网站支付标准:如何连接发送的订单和接收订单的 IPN?

Posted

技术标签:

【中文标题】网站支付标准:如何连接发送的订单和接收订单的 IPN?【英文标题】:Website Payments Standard: How would I connect the order being sent and the IPN receiving it? 【发布时间】:2013-03-03 23:42:29 【问题描述】:

我设置了一个自定义购物车,我想知道如何将我的数据库中的“客户订单”连接到订单完成后 Paypal 将发送的“IPN POST”。

我可以要求提供电子邮件地址并比较两者;但它们可能不一样。在处理IPN handler 时,我至少需要进行哪些检查?

*我发现很多此类信息分布在多个问题中。我希望这可以为其他人节省很多时间。

【问题讨论】:

【参考方案1】:

您可以将隐藏在 html 中的 custom 变量与您的订单一起传递,一旦订单完成,该变量将被传回 IPN。


如何在“网站支付标准”的订购阶段执行此操作:

<input type="hidden" name="custom" value="UNIQUEVALUE">

UNIQUEVALUE 是存储在您的数据库中用于识别订单的唯一标识符。


在完成付款阶段:

这将作为 POST 变量 custom 传递给您的 IPN。

https://www.x.com/developers/paypal/documentation-tools/ipn/integration-guide/IPNReference#id091EAB0105Z *还说明此自定义变量的最大长度为:255 个字符。


在上线之前,您至少应该进行以下检查:

检查 1:检查订单是否存在 检查 2:检查订单不重复 检查 3:检查您的支付金额是否正确 检查 4:使用沙盒/虚假订单进行测试 检查5:测试,测试,再测试


检查 1:检查订单存在

然后,在您的处理程序/侦听器 IPN 中,您应该在数据库中查询此 UNIQUEVALUE,如果未找到,请自行发送电子邮件告知已发生这种情况。


检查 2:检查订单不重复

您应该将“txn_id”与付款状态一起存储在您的数据库中。如果订单是完整的,那么这意味着txn_id 是重复的,应该这样处理。

*记住:检查付款状态。这可能会通过待处理等...如果txn_type = web_acceptpayment_status = Completed 则订单完成。这就是您需要存储订单状态的原因。因为您现在可以得到一个待处理的订单,然后是一个完整的订单。它们都将具有相同的txn_id

完整的状态列表可以在这里找到:https://www.x.com/developers/paypal/documentation-tools/ipn/integration-guide/IPNReference#id091EB04C0HS

对于那些懒惰的人,这些可以是:Canceled_Reversal / Completed / Created / Denied / Expired / Failed / Pending / Refunded / Reversed / Processed / Voided。


检查 3:检查您的支付金额是否正确

您应该做的另一项检查是查看收到的付款和订单成本是否相同。使用“网站付款标准”,某人可以更改您的 HTML 代码并通过不同的付款金额。


检查 4:使用沙盒/虚假订单进行测试

使用https://developer.paypal.com/ 转到“应用程序”并将测试 IPN 消息发送到您的 IPN 处理程序。还要记住将IPN handler 中的代码从paypal.com/cgi-bin/webscr 更改为sandbox.paypal.com/cgi-bin/webscr。否则会失败。


检查 5:测试,测试,再测试

使用贝宝“发送测试 IPN 消息”,彻底测试您的 IPN handler。然后再次测试。

【讨论】:

以上是关于网站支付标准:如何连接发送的订单和接收订单的 IPN?的主要内容,如果未能解决你的问题,请参考以下文章

支付宝支付流程

如何保证接口的幂等性。。。。。

更改 Woocommerce 结帐端点以显示订单摘要详细信息

如何保证微服务接口的幂等性

通知发送,接收不到通知的处理办法

管理支付与订单