我有一个简单的"立即付款"按钮,这是通过按钮生成器创建的代码,并添加了一个"自定义"隐藏字段来识别它。我想知道是否有一些额外的隐藏字段可以添加,告诉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" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
现在,客户不太可能支付两次,但我注意到,当Sandbox出现故障时,我成功地支付了两次相同的交易。这是我绝对想避免的事情。当然,不仅对客户来说,这可以得到退款,而且因为我不希望我的数据库一团糟,我希望避免大量的编码来捕捉重复的付款。。。
您需要为"invoice"参数添加一个唯一的标识符;<input type="hidden" name="invoice" value="your unique invoice ID">
,并在您的账户www.paypal.com 的"个人资料">"我的销售工具"部分启用"阻止重复付款"
谢谢Robert!(上图)
事实上,我走得太远了,我打算向PayPal商家技术支持部门询问此事,就在提交问题之前,我发现了一个页面,上面有答案-
避免重复付款:https://ppmts.custhelp.com/app/answers/detail/a_id/165
不确定你是否必须登录才能看到上面的页面,所以我在这里引用页面是为了方便:
您可以通过将发票编号传递到PayPal系统。此功能可用于网站支付标准和网站支付专业版(SOAP和NVP)。PayPal系统将检查以确保您传递的发票编号尚未已在您的帐户中支付,只要您配置了个人资料阻止重复的发票号码。
示例:发票001已经付款,因此如果001被传递给PayPal帐户第二次,它将被拒绝。
要在您的个人资料中阻止此操作:
阻止意外付款:您可以通过阻止重复的发票ID
登录位置https://www.paypal.com
单击"配置文件"子选项卡
在"销售偏好"下点击"付款接收偏好"
如果您希望在传递"发票"变量时使用此功能,请选择"是,阻止每个发票ID多次付款"
滚动到底部并点击"保存"按钮
要传递网站支付标准的发票号码,您将需要在现有的按钮代码中添加一行代码。你不能将此代码添加到最初创建为加密的按钮中。实例下图:
对于Website Payments Pro,您传递的参数取决于类型您正在进行的API调用。
对于SOAP:InvoiceID
对于NVP:INVNUM
使用Pro时,如果检测到重复的发票编号,则错误10412将被退回。对于API错误代码的完整列表,以及关于10412错误的详细信息点击此处