Java Payflow Pro:阻止重复发票ID不起作用
我的web应用程序存在重复支付交易。它用来打电话到PayPal网关,通过PayPal处理用户付款 作为一个短期解决方案,我们决定按照本文的建议传递Java Payflow Pro:阻止重复发票ID不起作用,java,paypal,payment-gateway,paypal-sandbox,Java,Paypal,Payment Gateway,Paypal Sandbox,我的web应用程序存在重复支付交易。它用来打电话到PayPal网关,通过PayPal处理用户付款 作为一个短期解决方案,我们决定按照本文的建议传递INV NUM,以便PayPal可以跟踪它并拒绝具有相同发票ID的交易,以及相应的错误代码和消息 在测试修复程序时,我仍然获得重复事务的statusCode0和事务消息APPROVED。但是,对于重复交易,duplicate标志设置为true,我相信这会将其标识为重复交易,但我不明白这是否意味着交易未成功处理,意味着用户未再次收费。 发票生成方法如下所
INV NUM
,以便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;
有人能告诉我为什么它不起作用吗?在与PayPal技术支持人员聊天并深入研究PayPal文档后,我得到了问题的答案。 独特的INV NUM方法在我与PayPal集成的情况下不起作用。 为了解决问题,我需要为事务生成并设置唯一的Req Id。有关X-VPS-REQUEST-ID标头的更多详细信息,请参阅。PayPal将收到的请求ID存储在请求表中,因此当您发送新交易时,PayPal将检查该请求ID以前是否使用过,如果是,则将该交易视为重复交易,并返回原始交易的响应: 重要提示:如果您使用以前使用的 X-VPS-REQUEST-ID,服务器忽略新数据并返回 对与之关联的原始事务的响应 X-VPS-REQUEST-ID 重复事务将把标志
duplicate
设置为1
。
这种行为要求我处理额外的情况,例如,当原始交易因无效的卡过期日期而失败,并且第二笔交易以有效的过期日期发送时。在这种情况下,我必须生成新的req ID,否则我仍然会从原始事务中得到失败的响应
注意:将责任推给支付供应商只是针对重复的额外措施,不应被视为问题的主要解决方案。这就是为什么我必须重新设计我的支付工作流程,以确定重复交易,然后再打电话给支付供应商,并以适当的方式处理它