这两天整paypal支付。网站使用了paypal快捷支付及paypal的标准支付。
标准支付订单支付了货款,但是订单却不更新,订单状态还是未付款,而实际paypal确实已经收到款了。
对于这个问题纠结了两三天。
网站提交给paypal的参数中有这么俩个参数
return notify_url这俩个参数
一个是直接返回我们自己网站的,另一个notify_url是异步post数据到我们网站对订单进行处理的。
这个就是所谓的付款通知即IPN通知。
收到IPN通知后我们网站需要post回去给paypal进行验证即通知确认。
PayPal 返回验证信息,通过验证为VERIFIED,不通过则为INVALD。(此时订单如果没有验证成功也是没有交易成功的)
接下来就是我们对订单进行处理了。
这个通知如果没有接受到,paypal会连续发送4天。
paypal测试可以开启sandbox沙箱模式(正式运行的时候关闭),这个模式下通知只是发送一次的。
测试中发现这个IPN通知地址填写正确啊,而在IPN页面却发现,这个页面完全没有执行。
而且这个页面并没有什么错误。最终呢发现paypal帐号需要后台设置IPN地址(需要保证你的地址外网能够访问的)。此项设置是在paypal帐号账户信息里设置的。
感觉好坑啊,paypal的文档上面却没有看到 TAT
此时就会有人问了,一个paypal只能设置一个IPN通知地址,如果有多个站的话怎么办呢?
对此paypal给出的解决方案是
推荐由统一的 IPN 地址接受所有网站的信息
* 方便集中管理, 同步所有交易数据, 并且账户内的信息变更, IPN 也可以统一发送
* 如果需要区别交易来源的网站, 推荐使用 商家自定义的 Custom, Invoice 参数来有效管理, 如 invoice = web1-12345, custom=web1-客户号.