更换服务器IP后,支付宝回调地址(notify_url)不进行调用

由于业务需要,公司将运行在公司自己机房服务器的一个电商项目要搬至云服务器。项目搬至云服务器之后,经过一番的配置折腾之后,除了支付宝支付不能正常使用外,一切运行正常,访问速度虽没达到理想的状态,但也获得了一定的提升。

支付宝无法正常使用,对电商应用来说是一个较为致命的错误,给顾客造成了很不好的影响,作为技术人员只好进入加班模式。为不影响顾客使用,只能通宵进行测试查找问题。一遍遍测试、看代码、查资料、找解决方案,本地机房项目和云服务器项目来回切换着调试,最后苦逼的发现,一样的程序代码在云服务器支付宝就是不能正常使用,而在我们本地机房的项目却一切正常。由此得出结论,支付宝无法正常使用的原因,很有可能出现在服务器的配置上。经过程序员在代码中加入节点打印,最后确认是支付宝无法调用我们的支付宝回调地址(即notify_url参数的值),而造成我们程序无法正常处理支付宝支付。这也就能解释,我们的顾客通过支付宝支付后,支付宝进行了扣款,我们的支付宝商家账户也收到了款,但是我们的系统却没接到付款成功的通知,从而我们的系统无法更新订单的支付状态。

接下来和云服务器商进行沟通,并且联系了支付宝的客服,得到很多支持。https://docs.open.alipay.com/common/fr9vsk,这个地址时支付宝客服给的关于联调问题解决的,里面还有一个联调日志排查的接口。期间看到一篇文章http://bbs.ecshop.com/thread-151320-1-1.html,这是关于“因为更换服务器ip导致支付宝接口收不到NOTIFY通知问题“,虽然按这篇文章的操作没有成功,依然感觉从中获得了一些帮助。继续和支付宝客服沟通后,支付宝客服告诉我们,我们的支付宝回调地址外网无法进行访问,所以我们系统接不到支付通知,又给了我们一个测试外网访问的在线工具http://www.atool.org/httptest.php。通过测试,我们的回调地址确实无法进行外网的访问,而且我们项目的其他地址也无法通过该工具的外网访问测试。

和云服务器商进行联系,网络负责人员提出,很有可能是因为我们的支付请求和支付宝的回调请求走的不是一个ip,所以无法进行请求,建议我们关掉其他运营商的映射,只留一个ip映射域名。关闭ip映射时,忽然想起来,我们的域名缺少一个默认的映射,于是我关掉了其他运营商ip映射,只留了电信ip的域名映射,然后我又加上了一个默认的映射,为保证成功,默认映射的ip也是电信运营商的。然后再测试,就发现我们回调地址通过了外网访问测试,真是大喜过望。这是我就在怀疑,很有可能是原来没有默认映射的原因造成的回调地址无法进行外网访问。为印证我的想法,没有按照云服务器商的要求,将电信映射关掉再开联通的,而是将联通的打开并保持着电信和默认。果不其然,外网访问测试依然能通过,把移动的映射打开之后依然能外网访问。为了进一步印证我的想法,关掉了默认映射,然后接口就无法通过外网访问测试了。

最后总结:由于支付宝回调的发起ip有可能是不属于三家运营商的,所以你在没设置默认映射时,他会随机访问一个映射ip,而支付接口为保证安全性,是要求支付请求的进出要在同一个ip上的,所以默认映射的设置对支付宝的支付回调很重要。
————————————————
版权声明:本文为CSDN博主「feiguo2016」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18747519/article/details/82982755
已邀请:

要回复问题请先登录注册