Payflow Pro:阻止重复发票 ID 不起作用
Posted
技术标签:
【中文标题】Payflow Pro:阻止重复发票 ID 不起作用【英文标题】:Payflow Pro: blocking duplicate invoice IDs does not work 【发布时间】:2021-04-22 19:17:20 【问题描述】:我的网络应用程序遭受重复支付交易的困扰。它使用Payflow Pro JAVA SDK 调用PayPal Gateway 来处理用户通过PayPal 支付的款项。
作为一个短期解决方案,我们决定通过INV NUM
,正如article 中所建议的那样,这样 PayPal 可以跟踪它并拒绝具有相同发票 ID 以及相应错误代码和消息的交易。
在测试修复时,我仍然收到statusCode
0 和重复交易的交易消息APPROVED
。但是,对于重复交易,DUPLICATE
标志设置为 true,我相信它会将其标识为重复交易,但我不明白这是否意味着交易未成功处理,这意味着用户没有第二次被收费。
发票生成方法如下所示:
Invoice inv = new Invoice();
/* Set Amount. */
Currency amt = new Currency(pip.getFeeAmount(), "USD");
inv.setAmt(amt);
inv.setPoNum(poNum);
// INV NUM e.g.: 988755aa8aeb262a506ec01
inv.setInvNum(pip.getInvNum());
BrowserInfo bi = new BrowserInfo();
bi.setButtonSource(buttonSource);
inv.setBrowserInfo(bi);
return inv;
谁能告诉我为什么它不起作用?
【问题讨论】:
【参考方案1】:在与 PayPal 技术支持人员交谈并深入研究 PayPal 文档后,我得到了问题的答案。 独特的 INV NUM 方法在我与 PayPal 集成的情况下不起作用。 为了解决问题,我需要为事务生成并设置唯一的 Req Id。有关 X-VPS-REQUEST-ID 标头的更多详细信息是 here。 PayPal 将收到的请求 ID 存储在请求表中,因此当您发送新交易时,它会检查之前是否使用过该请求 ID,如果是,则将交易视为重复交易并返回原始交易的响应:
重要提示:如果您使用以前使用过的新交易发送新交易 X-VPS-REQUEST-ID,服务器忽略新数据并返回 响应与该交易相关的原始交易 X-VPS-REQUEST-ID。
重复事务将标记DUPLICATE
设置为1
。
这种行为需要我处理额外的情况,例如原始交易由于无效的卡到期日期而失败,并且第二笔交易以有效的到期日期发送。在这种情况下,我必须生成新的请求 ID,否则我仍然会收到原始事务的失败响应。
注意:让支付供应商承担责任只是防止重复的一项额外措施,不应将其视为问题的主要解决方案。这就是为什么我必须重新设计我的支付工作流程以确定重复交易,然后再致电支付供应商并以适当的方式进行处理。
【讨论】:
以上是关于Payflow Pro:阻止重复发票 ID 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Paypal - PayFlow Pro,使用“交易 ID”获取交易详细信息 [关闭]
php [PayPal Pro Payflow]更改PayPal Pro Payflow中的信用卡图标