带有“min_amount”和“set_customer_limit”的PayPal按钮

2022-08-30 14:19:04

我创建了一个带有文本输入的非托管PayPal按钮,让用户定义要支付的金额。这是一个订阅按钮。

现在的问题是,必须有一个最低支付金额,比如101(瑞士法郎- 瑞士法郎)。

根据PayPal HTML-Variables的文档,我可以将隐藏输入中的以下var添加到我的表单中,以使其正常工作。

  • set_customer_limit值为max_limit_own
  • min_amount值为101

set_customer_limit正在工作,但min_amount不起作用。接受任何金额。

我在技术支持处打开了一张票,但直到现在才回复。

这是我的表格:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <input type="hidden" name="cmd" value="_xclick-subscriptions">
    <!-- //... -->
    <input type="hidden" name="cancel_return" value="mydomain.com/cancel">
    <input type="hidden" name="return" value="mydomain.com/paid">
    <input type="hidden" name="token" value="<?php echo $token; ?>">
    <input type="hidden" name="src" value="1">
    <input type="text" name="a3" value="101.00">
    <input type="hidden" name="p3" value="1">
    <input type="hidden" name="t3" value="Y">
    <input type="hidden" name="currency_code" value="CHF">
    <input type="hidden" name="bn" value="PP-SubscriptionsBF:btn_subscribeCC_LG.gif:NonHostedGuest">
<!-- the concerned inputs -->
    <input type="hidden" name="set_customer_limit" value="max_limit_own">
    <input type="hidden" name="min_amount" value="101">
<!-- ---- -->
    <input type="image" src="https://www.paypalobjects.com/de_DE/CH/i/btn/btn_subscribeCC_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">
</form>

至于目前,我只是用JavaScript验证了最低数量,这并不真正安全......


编辑

作为一个想法,我可以实现另一个表单(通过AJAX,onchange,onkeyup等提交),它设置用户在PayPal表单之前给出的最小金额,然后将其放入PayPal输入(再次设置为隐藏):

<input type="hidden" name="a3" value="<?php echo $_POST['pre_min_amount'] ?>">

这样,我可以在提交PayPal表格之前用PhP验证最低金额。但这对我来说似乎不是一个干净的方式。如果有人能给我一个提示,真的很高兴!


答案 1

PayPal技术支持的答案是:不,这是不可能的!

(回答日期为05/02/2015)希望这在将来是可能的。如果是这样,请发布您的答案!


我真的建议使用PayPal API来处理这种事情(包括创建开发人员帐户,通过文档等)。

因此,此“解决方案”是一种快速而肮脏的解决方法


首先,在页面上添加一个小表单(我现在称之为min_amount -form)(告诉用户,他必须先设置数量):

<form id="min_amount" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
    <input type="text" id="pre_min_amount" name="pre_min_amount" value="101">
    <input type="submit" value="Set min. Amount">
</form>

然后,使用NowDoc将整个PayPal表单添加到PHP变量中,并将min_amount表单中的发布值添加到输入中:a3

$min_amount = 0;
$payPalForm = <<<SOME
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <!-- //... -->
    <input type="hidden" name="a3" value="$min_amount">
</form>
SOME;

提交后,检查最低金额是否为真,然后仅显示PayPal表单:

if (isset($_POST['pre_min_amount']) && is_numeric($_POST['pre_min_amount']) && floatval($_POST['pre_min_amount']) >= 101) {
    $min_amount = htmlspecialchars($_POST['pre_min_amount']);
    echo $payPalForm;
}

正如我所说,它既快速又肮脏(这个项目没有更多时间),但你要确保在服务器端验证最小数量,而不仅仅是使用Javascript。您还可以提交带有 AJAX 调用的min_amount窗体,但随后此调用的返回在客户端,这也不是真正安全的。(当然你也可以)

顺便说一句,我一点也不为这个解决方案感到自豪,但有时,程序员的生活很艰难,我相信你们所有的程序员都必须以某种方式在某个地方做一些问答代码;-)...


更新: 08/05/2015

这一切都取决于相关帐户注册的国家/地区。仅在美国和加拿大由PayPal保证的全方位服务


答案 2

推荐