2011-11-20 2 views
6

Здравствуйте, я хотел бы создать кнопку покупки Paypal с динамической установленной суммой. Я хотел бы передать сумму в текстовое поле ввода в форме и item_number по скрытому полю.Как создать кнопку PayPal с перезаписываемыми переменными

Проблема в том, что когда-либо я получаю зашифрованную кнопку s-xclick с веб-сайта paypal. Эта кнопка не позволяет помещать скрытые переменные в форму.

Я думаю, что мне нужна кнопка xclick. Моя цель - позволить пользователям увеличить свой внутренний кредит на моем сайте.

EDIT (перемещение дополнения к вопросу от ответа на вопрос) (отсюда @tokam:

Для добавления в дискуссию, я хотел бы показать мое текущее решение проблемы:

Здесь у нас есть некоторые Javascript проверка, которая помогает пользователю с входом. Признайте, что он открывает осветитель на успехе

function validatePaypalForm() 
{ 
    var val = $('#paypalPaymentAmount').val().replace(/\s*$/, "").replace(/,/ , ".").replace(/€$/, ""); 
    var errormsg = ''; 
    var ret, amountField; 
    if(val==='' || isNaN(parseFloat(val)) || !isFinite(val)) 
    { 
     errormsg = 'Bitte geben Sie einen gültigen Betrag an'; 
}else if(parseFloat(val) < <?php echo $this->minimum?> ) 
{ 
    errormsg = 'Das Einzahlungsminimum betr&auml;gt <?php echo $this->minimum?>&euro;'; 
} 

ret = (errormsg === ''); 


amountField = $('#paypalAmountField'); 
if(ret) 
{ 
    amountField.removeClass('error');  
    $('#paypalAmountErrorMessage').html('&nbsp;'); 
    $('#paypalPaymentAmount').val(val); 
    fb.start( 
     '<p><strong>Sie werden in kürze zur Seite von Paypal weitergeleitet.</strong></p>', 
     'width:700 showPrint:false modal:true showClose:false showOuterClose:true showItemNumber:false closeOnNewWindow:false outsideClickCloses:true innerBorder:0 imageClickCloses:false scrolling: no' 
    ); 

}else{ 
    amountField.addClass('error'); 
    $('#paypalAmountErrorMessage').html(errormsg); 
} 

return ret; 

} Здесь приходит мою кнопку сейчас. вопросы, я имею с собой, например, что это легко для t пользователь должен установить другой код валюты. Я мог бы справиться с этим в своем прослушивателе IPN, возвратив оплату. Существуют ли другие проблемы, связанные с незашифрованной сменяемой кнопкой?

<form onsubmit="return validatePaypalForm();" class="stn-form" action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<fieldset id="fieldset-p"><legend><span>2.</span>myproject Guthaben aufladen per Paypal Zahlung</legend> 
<div id='paypalAmountField' class="field"> 
<label for='paypalPaymentAmount' >Betrag &euro;:</label> 
<input id='paypalPaymentAmount' type="text" name='amount' value='' /> 
<span style='display:block;' id='paypalAmountErrorMessage' class='errorText'>'&nbsp;</span> 

</div> 
<input type="hidden" name="cmd" value="_xclick"> 
<input type="hidden" name="business" value="THE_ID_OF_MY_CLIENT"> 
<input type="hidden" name="lc" value="DE"> 
<input type="hidden" name="item_name" value="myproject Advertiser Vorkasse"> 
<input type="hidden" name='item_number' value="11500"> 
<input type="hidden" name="currency_code" value="EUR"> 
<input type="hidden" name="button_subtype" value="services"> 
<input type="hidden" name="no_note" value="1"> 
<input type="hidden" name="no_shipping" value="1"> 
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_paynowCC_LG.gif:NonHosted"> 
<input type="hidden" name="rm" value="1"> 
<input type="hidden" name='cbt' value="Zu myproject.de zur&uuml;ckkehren"> 
<input type="hidden" name="currency_code" value="EUR"> 
<input type="hidden" name="return" value="http://myproject.somedomain.net/advertiser/guthaben-aufladen/ret/success" /> 
<input type="hidden" name="cancel_ return" value="http://myproject.somedomain.net/advertiser/guthaben-aufladen/ret/canceled" /> 
<div class="actionrow"> 

<input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal."> 
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1"> 
</div> 
</fieldset> 
</form> 
+0

Что вы пробовали? какие результаты? вы ожидаете, что кто-то еще напишет это для вас? –

+0

Вы действительно понимаете, что я не прошу ввести код? Я прошу функцию на веб-сайте PayPal создать кнопку без хоста или разрешить тип cmd вместо x-xclick !!!! –

+1

простой веб-поиск дал бы вам это! – alonisser

ответ

9

Причина, по которой вы не можете переопределить сумму динамически, заключается в том, что у вас есть так называемая «кнопка размещения в PayPal».
С помощью размещенной кнопки сумма хранится на стороне PayPal и не может быть перезаписана переменной «сумма». Вы хотите либо использовать кнопку без хостинга, либо использовать вызов API BMUpdateButton для динамического обновления суммы кнопки.
Чтобы использовать незанятую кнопку, просто найдите «Шаг 2» в инструменте создания кнопок и отпустите кнопку «Хост» с помощью PayPal.

Вариант 2: Все еще используйте размещенную кнопку и используйте BMUpdateButton API для обновления суммы.Пример запроса для BMUpdateButton будет выглядеть следующим образом:

USER=Your API username 
PWD=Your API password 
SIGNATURE=Your API signature 
VERSION=82.0 
HOSTEDUBTTONID=The value of <input type="hidden" name="hosted_button_id" value=""> 
BUTTONTYPE=The type of button. E.g. BUYNOW 
BUTTONCODE=The type of code you want to get back. E.g. HOSTED 
L_BUTTONVAR0=amount=The new amount with a period as separator 
L_BUTTONVAR1=item_name=Optional: a new item name if you wish 

Similary, вы можете также использовать BMCreateButton API для создания новой кнопки, или использовать BMButtonSearch API для поиска по списку всех сохраненных размещенных кнопок (для например, найти host_button_id вашей кнопки, например)

Причина использования размещенной кнопки заключается в том, что она более безопасна. Не размещенная, незашифрованная кнопка в основном оставит суммы открытыми для манипуляций. Мошеннические транзакции ждут.

+0

Я хочу, чтобы пользователю разрешалось вводить сумму, но желательно, чтобы я был уверен, что код валюты не будет изменен пользователем , Я думаю, что это несправедливо, что они проголосовали за мой вопрос. Это не слишком просто, и я заглядывал за несколько часов, прежде чем спрашивать! –

+0

Ответ по-прежнему применяется. Вы можете позволить покупателю ввести сумму, затем принять эту сумму, вызвать API BMCReateButton, отправить сумму, получить host_button_id и перенаправить покупателя на PayPal (https://www.paypal.com/cgi-bin/webscr? cmd = _s-xclick & hosted_button_id = response_for_hosted_button_id_here) – Robert

+0

Я внедрил незашифрованное решение, но я испытал, что с помощью пост-переменной манипуляции можно изменить код валюты. Я мог бы либо поймать это сейчас в моем слушателе ipn и вернуть платеж в этом случае, но я кулачок потрачу некоторое время, чтобы попытаться реализовать ваше решение. Как вы думаете? Мне все равно требуется возврат с мылом или nvp. Я покажу вам, что у меня уже есть. –

2

Вы не должны использовать xclick, который не зашифрован. способ, которым я решил это, - использовать paypal button api - с каким-то кэшированием в клиенте, чтобы вы не выполняли весь запрос HTTP-запроса каждый раз.

обратите внимание, что PayPal использует 2 типа API - в NVP, который является своего рода успокоительное (тоже не очень) и SOAP (я использовал метод НВП)

вы также можете сгенерировать кнопку зашифрованное в вашем сервере, используя OpenSSL - но я бег в неразрешимые проблемы с этим методом и не мог получить никакой помощи для этого либо здесь, либо в PAYPAL ужасных форумов разработчиков

редактировать: проблема не зашифрованные кнопки, что кто-нибудь с помощью Firebug (не говорит о более продвинутых инструментах) может перехватить платеж и изменить стоимость и т. д.

Если вы настаиваете в этом направлении, вы можете следовать простой форме html из PayPal, чтобы создать эту кнопку. вы делаете это на сайте paypal и создаете незашифрованную кнопку, а затем просто редактируете html и меняете нужное поле на <?php $variable?>. Я бы настоятельно советовал этому пути.

+0

Каково ваше продвижение использования api? каков риск не зашифрованных кнопок? on 1a-android.de Я запускаю незашифрованную кнопку, которая работает нормально, но это кнопка пожертвования, и я забыл, как мне удалось получить один без api и без s-xclick, например. здесь http://www.1a-android.de/android-spiele/farm-story-nachbarn/ –

+0

Я нашел это сейчас http://support.qualityunit.com/knowledgebase/post-affiliate-pro/tips-tricks /how-to-create-paypal-non-hosted-non-encrypted-buttons.html , но я не уверен, что он достаточно безопасен. Я должен проверить, что код валюты не будет изменен пользователем. –

+0

Это незащищенный незашифрованный путь! но он будет работать, я попробовал его – alonisser

0

Я думаю, что это может работать для вас, если вы обновляете ... «[email protected]» ... это не шифруются и до сих пор, кажется, разместить на сайте PayPal, для очистки

падение: значение =» my_default_price " , если вы хотите, чтобы пользователь ввел его в пустое текстовое поле ... для моей страницы цены привязаны к цене золота, поэтому мне нужно динамически обновлять переменную« сумма », и я просто опускаю значение =

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_xclick"> 
<input type="hidden" name="business" value="[email protected]"> 
<input type="hidden" name="item_name" value="example description"> 
<input type="hidden" name="item_number" value=""> 
<input type="text" name="amount" value="my_default_price"> 
<input type="hidden" name="no_shipping" value="1"> 
<input type="hidden" name="return" value="http://www.yoursite.com/returnpage.php"> 
<input type="hidden" name="currency_code" value="USD"> 
<input type="hidden" name="lc" value="US"> 
<input type="hidden" name="bn" value="PP-BuyNowBF"> 
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but02.gif" border="0" name="submit" alt="Make your payments with PayPal. It is free, secure, effective."> 
<img alt="" border="0" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1"> 
</form> 
Смежные вопросы