如何防止重复 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】:您可能希望为“发票”参数添加一个唯一标识符; <input type="hidden" name="invoice" value="your unique invoice ID">
并在您的帐户 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) 中的表单操作