PayPal IPN 延迟数小时



我正在使用PayPal自适应支付通过PayPal进行交易。虽然很少有交易需要超过6个小时,但接收IPN。

我已经浏览了论坛帖子和他们的文档,我通过了 - https://developer.paypal.com/webapps/developer/docs/classic/products/instant-payment-notification/

"由于 IPN 不是实时服务,因此您的结帐流程不应等待 IPN 消息才能完成。如果签出流程依赖于接收 IPN 消息,则处理可能会因系统负载或其他原因而延迟。您应该配置结帐流程以处理可能的延迟。

回调花费超过6个小时太多了。 有什么建议吗?

我已经构建了几个自定义购物车。平均而言,我看到 IPN PayPal最长在 2 分钟内返回,通常定期付款比单次付款花费更长的时间,因为它们在初始设置时发送两条 IPN 消息,而不仅仅是一条。我通常采用"自定义"属性并放置一个我已永久 cookie 的唯一标识符。因此,即使我可能会看到定期付款的初始IPN,我也会等待说txn_type subscr_payment并且payment_statusCompleted的IPN。除非您看到第二条消息,否则您不能真正信任订阅付款已付款。如果是单笔付款,那么我希望txn_type web_acceptpayment_status Completed.

我处理事情的方式是将客户重定向到PayPal使用表单按钮技术进行购买。客户付款,然后被重定向(感谢我最初创建的表单隐藏变量)回到我自己指定的自定义购物车 URL。我称该 URL 为付款确认脚本。我显示一条带有进度条的消息,请稍候,等待他们的付款正在与PayPal确认。我将它们放在那里 10 秒钟,然后重定向到收据。在收据上,我检查数据库以查看我的 IPN 脚本是否已处理此订单。如果没有,那么我会再次将它们重定向回付款确认脚本,然后再延迟 10 秒的进度条。我的收据使用会话 cookie 来确保我永远不会将它们多次发送到付款确认脚本的循环中。因此,客户再等待 10 秒钟,然后返回收据页面,在那里我再次测试,在我保存的"自定义"属性上读取我的永久 cookie,而不是从我用作数据库中订单键的 IPN 传入的"自定义"属性。通常在第一个或第二个 10 秒延迟内,IPN 已经进来,我可以继续。但是,如果IPN仍未进入,那么我会重定向到一条友好的错误消息,指出无法确认他们的付款,并致电我们的呼叫中心以解决此问题。然后,我们的呼叫中心技术人员在PayPal中看到延迟问题,将其他交易撤回,并通过电话手动销售给客户。

最新更新