如何防止重复 PayPal 付款?

Posted

技术标签:

【中文标题】如何防止重复 PayPal 付款?【英文标题】:How to prevent duplicate PayPal payments? 【发布时间】:2012-07-30 12:09:04 【问题描述】:

我有一个简单的“立即付款”按钮,它是通过按钮制造商创建的代码,并添加了一个“自定义”隐藏字段来识别它。 我想知道是否可以添加一些额外的隐藏字段来告诉 PayPal“此交易不应进行两次”。

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">

    <input type="hidden" name="cmd" value="_s-xclick">
    <input type="hidden" name="custom" value="MYUNIQUEID">
    <input type="hidden" name="hosted_button_id" value="MYHOSTEDBUTTONID">
    <input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif" 
    border="0" name="submit" >
    <img  border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"  >

</form>

由于现在客户不太可能支付两次,但我注意到当沙盒出现故障时,我成功地两次支付了同一笔交易。我绝对想避免的事情。不只是为了客户,这可以得到退款,当然,而且因为我不希望我的数据库搞砸了,我想避免大量编码来捕获重复付款......

【问题讨论】:

【参考方案1】:

您可能希望为“发票”参数添加一个唯一标识符; &lt;input type="hidden" name="invoice" value="your unique invoice ID"&gt; 并在您的帐户 www.paypal.com 的“个人资料”>“我的销售工具”部分中启用“阻止重复付款”

【讨论】:

【参考方案2】:

谢谢罗伯特! (上图)

我实际上已经走了这么远,以至于我打算向 PayPal 商家技术支持咨询这件事,就在提交我的问题之前,我发现了一个带有答案的页面 -

避免重复付款: https://ppmts.custhelp.com/app/answers/detail/a_id/165

不确定您是否必须登录才能看到上面的页面,所以为了方便起见,我在此处引用该页面:

您可以通过将发票编号传递给 贝宝系统。此功能适用于网站付款 标准和网站支付专业版(SOAP 和 NVP)。贝宝系统 将检查以确保您传递的发票号码尚未 只要您配置了个人资料,就已在您的帐户中付款 阻止重复的发票号码。

示例:发票 001 已支付,因此如果将 001 传递给 支付宝账户第二次,将被拒绝。

要在您的个人资料中屏蔽此内容:

阻止意外付款:您可以通过以下方式阻止意外付款 阻止重复的发票 ID

    登录https://www.paypal.com

    单击“个人资料”子选项卡

    在“销售偏好”下点击“收款偏好”

    如果您希望在传递“发票”变量时使用此功能,请选择“是,阻止每个发票 ID 多次付款”

    滚动到底部并点击“保存”按钮

要通过网站付款标准的发票编号,您将 需要在现有的按钮代码中添加一行代码。你不能 将此代码添加到最初创建为加密的按钮中。例子 下面:

对于 Website Payments Pro,您传递的参数取决于类型 您正在进行的 API 调用次数。

对于 SOAP:InvoiceID

对于 NVP:INVNUM

使用 Pro 时,如果检测到重复的发票编号,则会出现错误 10412 将被退回。如需 API 错误代码的完整列表, 以及关于 10412 错误的详细信息Click Here

【讨论】:

以上是关于如何防止重复 PayPal 付款?的主要内容,如果未能解决你的问题,请参考以下文章

IsolationLevel.RepeatableRead 防止重复

防止 PHP/JavaScript/JQuery (PayPal) 中的表单操作

Aop+Redis防止接口重复提交

如何防止 Woocommerce 在结帐页面上选择默认付款方式?

PayPal登录按钮,防止新窗口或自动关闭?

PayPal .net REST API - 带有额外一次性付款的重复计费协议