Payflow Pro:阻止重复的发票 ID 不起作用
Payflow Pro: blocking duplicate invoice IDs does not work
我的网络应用程序存在重复支付交易问题。它使用 Payflow Pro JAVA SDK 调用 PayPal 网关以通过 PayPal 处理用户付款。
作为短期解决方案,我们决定按照此 article 中的建议通过 INV NUM
,以便 PayPal 可以跟踪它并拒绝具有相同发票 ID 和相应错误代码的交易和消息。
在测试修复时,我仍然收到 statusCode
0 和重复交易的交易消息 APPROVED
。然而,对于重复交易,DUPLICATE
标志设置为真,我认为这将其标识为重复交易,但我不明白这是否意味着交易未成功处理,这意味着用户没有被第二次收费。
发票生成方法如下所示:
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 header 的更多详细信息是 here。 PayPal 将收到的请求 ID 存储在请求 table 中,因此当您发送新交易时,它会检查之前是否使用过该请求 ID,如果是,那么它将把该交易视为重复交易并且 return 您对原交易的回复:
Important: If you send in a NEW transaction with a previously used
X-VPS-REQUEST-ID, the server ignores the new data and returns the
response to the original transaction associated with that
X-VPS-REQUEST-ID.
重复交易的标志 DUPLICATE
将设置为 1
。
这种行为需要我处理其他情况,例如,当原始交易因卡到期日期无效而失败时,第二笔交易以有效到期日期发送。在这种情况下,我必须生成新的请求 ID,否则我仍然会收到来自原始事务的失败响应。
注意:让付款供应商承担责任只是防止重复的额外措施,不应被视为解决问题的主要方法。这就是为什么我必须重新调整我的支付工作流程以确定重复交易,然后再致电支付供应商并以正确的方式处理它。
我的网络应用程序存在重复支付交易问题。它使用 Payflow Pro JAVA SDK 调用 PayPal 网关以通过 PayPal 处理用户付款。
作为短期解决方案,我们决定按照此 article 中的建议通过 INV NUM
,以便 PayPal 可以跟踪它并拒绝具有相同发票 ID 和相应错误代码的交易和消息。
在测试修复时,我仍然收到 statusCode
0 和重复交易的交易消息 APPROVED
。然而,对于重复交易,DUPLICATE
标志设置为真,我认为这将其标识为重复交易,但我不明白这是否意味着交易未成功处理,这意味着用户没有被第二次收费。
发票生成方法如下所示:
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 header 的更多详细信息是 here。 PayPal 将收到的请求 ID 存储在请求 table 中,因此当您发送新交易时,它会检查之前是否使用过该请求 ID,如果是,那么它将把该交易视为重复交易并且 return 您对原交易的回复:
Important: If you send in a NEW transaction with a previously used X-VPS-REQUEST-ID, the server ignores the new data and returns the response to the original transaction associated with that X-VPS-REQUEST-ID.
重复交易的标志 DUPLICATE
将设置为 1
。
这种行为需要我处理其他情况,例如,当原始交易因卡到期日期无效而失败时,第二笔交易以有效到期日期发送。在这种情况下,我必须生成新的请求 ID,否则我仍然会收到来自原始事务的失败响应。
注意:让付款供应商承担责任只是防止重复的额外措施,不应被视为解决问题的主要方法。这就是为什么我必须重新调整我的支付工作流程以确定重复交易,然后再致电支付供应商并以正确的方式处理它。