Как создать кнопку PayPal с перезаписываемыми переменными - PullRequest
6 голосов
/ 20 ноября 2011

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

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

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

РЕДАКТИРОВАТЬ (перемещение дополнения к вопросу из ответа на вопрос) (отсюда @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;

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

<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>

Ответы [ 3 ]

9 голосов
/ 21 ноября 2011

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

Вариант 2: по-прежнему используйте размещенную кнопку и используйте API BMUpdateButton для обновления суммы.Пример запроса для 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

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

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

2 голосов
/ 20 ноября 2011

вы не должны использовать xclick, который не зашифрован. я решил это с помощью кнопки PayPal API - с некоторым типом кэширования в клиенте, поэтому вы не будете каждый раз получать полный HTTP-запрос.

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

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

edit: проблема с незашифрованными кнопками заключается в том, что любой, кто использует firebug (не говоря о более продвинутых инструментах), может перехватить платеж и изменить стоимость и т. Д. '..

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

0 голосов
/ 06 января 2013

Я думаю, что это может сработать для вас, если вы обновите ... "you@yoursite.com" ... он не зашифрован и по-прежнему размещается на сайте PayPal для очистки

drop: value =«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="you@yoursite.com">
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...