我使用paypal自适应付款通过paypal进行交易。虽然很少有交易时间超过6小时也会收到IPN。
我已经浏览过论坛帖子和他们的文档,我来了 - https://developer.paypal.com/webapps/developer/docs/classic/products/instant-payment-notification/
"由于IPN不是实时服务,因此您的结帐流程不应等待IPN消息才能完成。如果结账流程取决于接收IPN消息,则可能由于系统负载或其他原因而延迟处理。您应配置结帐流程以处理可能的延迟。"
回调花了6个多小时太多了。有什么建议吗?
答案 0 :(得分:0)
我已经建立了几个自定义购物车。平均而言,我看到PayPal IPN最长会在2分钟内恢复,并且通常定期付款要比单次付款花费更长的时间,因为它们在初始设置中会发送两条IPN消息,而不仅仅是一条消息。我通常会使用“自定义”属性,并放置一个我永久存储过的唯一标识符。因此,即使我可能会看到定期付款都获得了最初的IPN,但我仍在等待说txn_type
是subscr_payment
以及payment_status
是Completed
的付款。除非您看到第二条消息,否则您不能真正相信已支付订阅费用。而且如果是一次付款,那么我希望txn_type
为web_accept
,而payment_status
为Completed
。
我处理事情的方式是使用表单按钮技术将客户重定向到PayPal进行购买。客户付款,然后将其重定向到我指定的我自己的自定义购物车网址(由于我最初创建的隐藏的var形式)。我称该URL为付款确认脚本。我会在进度条上显示一条消息,请等待PayPal确认付款后再等待。我把它们放在那儿10秒钟,然后重定向到收据。我在收据上检查数据库以查看我的IPN脚本是否已经处理了该订单。如果没有,那么我会再次将它们重定向回付款确认脚本,以等待另外10秒钟的进度条延迟。我的收据使用会话cookie来确保我从未多次将它们发送到循环中的付款确认脚本。因此,客户再等待10秒钟,然后返回到收据页面,在这里我再次进行测试,读取我保存的“ custom”属性上的永久cookie,而不是我从IPN传入的“ custom”属性用作数据库中的订单密钥。通常在第一或第二个10秒延迟内,IPN已经进入,我可以继续。但是,如果IPN仍未进入,那么我会重定向到一条友好的错误消息,提示无法确认其付款,并致电我们的呼叫中心以解决此问题。然后,我们的呼叫中心技术人员会在PayPal中看到延迟问题,退回另一笔交易,然后手动通过电话卖给客户。