首页 > 解决方案 > Payflow Pro:阻止重复发票 ID 不起作用

问题描述

我的网络应用程序遭受重复支付交易的困扰。它使用Payflow Pro JAVA SDK调用 PayPal Gateway 以处理通过 PayPal 的用户付款。

作为一个短期解决方案,我们决定按照本文INV NUM中的建议通过,以便 PayPal 可以跟踪它并拒绝具有相同发票 ID 以及相应错误代码和消息的交易。

在测试修复时,我仍然收到statusCode0 和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;

有谁可以告诉我为什么它不起作用?

标签: javapaypalpayment-gatewaypaypal-sandbox

解决方案


之后,与 PayPal 技术支持人员聊天并深入研究 PayPal 文档,我得到了问题的答案。独特的 INV NUM 方法在我与 PayPal 集成的情况下不起作用。为了解决问题,我需要为事务生成并设置唯一的 Req Id。有关 X-VPS-REQUEST-ID 标头的更多详细信息,请参见此处。PayPal 将收到的请求 ID 存储在请求表中,因此当您发送新交易时,它会检查之前是否使用过该请求 ID,如果是,则将交易视为重复交易并返回原始交易的响应:

重要提示:如果您使用以前使用的 X-VPS-REQUEST-ID 发送新事务,服务器将忽略新数据并将响应返回到与该 X-VPS-REQUEST-ID 关联的原始事务。

重复事务将标志DUPLICATE设置为1。这种行为需要我处理额外的情况,例如原始交易由于无效的卡到期日期而失败,并且第二笔交易以有效的到期日期发送。在这种情况下,我必须生成新的请求 ID,否则我仍然会收到来自原始事务的失败响应。

注意:将责任归咎于支付供应商只是防止重复的一种附加措施,不应被视为解决问题的主要方法。这就是为什么我必须重新设计我的支付工作流程以确定重复交易,然后再打电话给支付供应商并以适当的方式处理它。


推荐阅读