【问题标题】:How to create an PayPal button with overwritable variables如何使用可覆盖变量创建 PayPal 按钮
【发布时间】:2012-01-02 11:30:39
【问题描述】:

您好,我想创建一个具有动态设置金额的贝宝购买按钮。 我想通过表单中的文本输入字段传递金额,并通过隐藏字段传递 item_number。

问题是,无论我做什么,我都会从 paypal 网站获得一个加密的 s-xclick 按钮。 此按钮不允许将隐藏变量放置在表单中。

我认为我需要的是一个 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 侦听器中处理此问题。未加密的可更改按钮是否还有其他问题?

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

【问题讨论】:

  • 你试过什么?结果在哪里?你希望别人为你写它吗?
  • 你真的明白我不是要代码吗?我要求在贝宝网站上创建一个非托管按钮或允许 cmd 类型 xlick 而不是 s-xclick!!!!
  • 一个简单的网络搜索就能满足你!

标签: php html paypal


【解决方案1】:

您无法动态覆盖金额的原因是您有一个所谓的“PayPal 托管按钮”。
使用托管按钮,金额存储在 PayPal 端,不能用“金额”变量覆盖。 您要么想要使用非托管按钮,要么使用 BMUpdateButton API 调用来动态更新按钮的数量。
要使用非托管按钮,只需在按钮创建工具中找到“第 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

类似地,您也可以使用BMCreateButton API 创建新按钮,或使用BMButtonSearch API 搜索所有已存储托管按钮的列表(例如,自动查找按钮的 hosts_button_id )

使用托管按钮的原因是因为它更安全。一个非托管的、未加密的按钮基本上会使金额容易被操纵。欺诈交易等待发生。

【讨论】:

  • 我希望允许用户输入金额,但我希望确保用户不会更改货币代码。我认为他们否决了我的问题是不公平的。这不是太简单,我在问之前用谷歌搜索了几个小时!
  • 上面的答案仍然适用。您可以允许买家输入金额,然后获取该金额,调用 BMCReateButton API,发送金额,获取 hosts_button_id 并将买家重定向到 PayPal (paypal.com/cgi-bin/…)
  • 我实现了未加密的解决方案,但我体验到可以通过后变量操作来更改货币代码。我现在可以在我的 ipn 侦听器中捕获它并在这种情况下退还付款,但我会花一些时间来尝试实施您的解决方案。你怎么看?无论如何,我需要用肥皂或 nvp 退款。我会告诉你我已经拥有的。
【解决方案2】:

您不应该使用未加密的 xclick 。我解决这个问题的方法是使用paypal button api - 在客户端有某种缓存,所以你不会每次都做整个http请求响应。

请注意,paypal 使用 2 种类型的 api - NVP 有点安静(也不是真的)和 SOAP(我使用 NVP 方法)

您也可以使用 openssl 在您的服务器中生成加密按钮 - 但我在使用此方法时遇到了无法解决的问题,在这里或在 paypal 可怕的开发者论坛中都无法获得任何帮助

编辑:未加密按钮的问题是任何使用萤火虫(不是在谈论更高级的工具)的人都可以拦截付款并更改费用等'..

如果您坚持这个方向,您可以按照 paypal 中的简单 html 表单来创建此按钮。您在贝宝网站上执行此操作并创建一个未加密的按钮,然后只需编辑 html 并将所需字段更改为&lt;?php $variable?&gt;。我强烈建议不要走这条路。

【讨论】:

  • 你在使用 api 方面有什么进步?未加密按钮的风险是什么?在 1a-android.de 上,我运行了一个未加密的按钮,它工作正常,但它是一个捐赠按钮,我忘记了我是如何在没有 api 和 s-xclick 的情况下获得一个按钮的,例如这里1a-android.de/android-spiele/farm-story-nachbarn
  • 我现在找到了support.qualityunit.com/knowledgebase/post-affiliate-pro/…,但我不确定这样是否足够安全。我必须检查货币代码不会被用户更改。
  • 那是不安全的未加密方式!但它会工作,我试过了
【解决方案3】:

我认为如果您更新...“you@yoursite.com”...它可能对您有用...它未加密,并且似乎仍托管在贝宝的网站上以进行清算

删除:value="my_default_price" 如果您希望用户将其输入到空白文本框中...对于我的页面,价格与黄金价格挂钩,因此我必须动态更新变量“金额”,我只是省略 value=

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

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 2020-06-26
    • 2014-12-15
    • 2014-02-27
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多