用微信实时到账支付,最怕回调失败。用户付了钱,你网站收不到通知,订单不更新,用户来找售后,特别麻烦。今天教大家回调失败了怎么排查怎么解决。
回调失败有哪些表现?
1. 用户付款成功了,但你网站订单还是「待支付」状态
2. 平台后台有订单记录,你网站没有
3. 偶尔能收到,偶尔收不到,不稳定
4. 支付成功后一直停留在支付页面,不跳转
出现这些情况,基本就是回调出问题了。
第一步:检查回调地址对不对
最常见的原因就是回调地址填错了。
去平台后台,看看异步通知地址(notify_url)填的对不对。
注意几点:
1. 地址要完整,http://或者https://开头
2. 地址要能公网访问,本地地址内网地址不行
3. 不要有特殊字符或者中文
4. 复制粘贴的时候注意有没有多余空格
可以直接在浏览器里访问一下这个地址,看能不能正常打开,有没有报错。打不开的话肯定收不到回调。
第二步:检查服务器/防火墙
有的服务器防火墙或者安全组,拦截了外部请求。平台的回调请求被拦了,自然收不到。
看看:
1. 服务器防火墙有没有拦截POST请求
2. 安全组有没有限制IP访问
3. CDN或者WAF有没有拦截
4. 网站有没有防CC攻击设置,把平台IP误拦了
可以临时关一下防火墙测试,或者把平台的IP加白名单。
第三步:检查回调代码
地址没问题,也能访问,那就要看代码了。
检查签名验证:
很多人回调收不到,是因为签名验证失败,代码直接return了。
看看签名算法对不对,参数顺序、密钥、编码格式,都要跟文档一致。
检查参数接收:
平台是POST方式发回调的,你代码里要用POST接收。写成GET肯定收不到。
检查返回值:
回调处理完了,要输出 success 或者平台要求的内容。不输出的话,平台会认为通知失败,一直重发。
检查代码错误:
代码里有没有语法错误、数据库连接失败之类的问题,导致程序执行不下去。
可以打开错误提示,访问一下回调地址,看有没有报错。
第四步:检查订单处理逻辑
有时候回调其实收到了,但是订单没更新。
比如:
1. 订单号对不上,查不到订单
2. 订单已经处理过了,重复通知被忽略了
3. 金额校验不通过,认为是异常订单
4. 数据库写入失败,没更新成功
可以加个日志,收到回调就把参数写进日志文件。看看平台到底发没发,发的内容是什么。
有日志就好排查多了。
第五步:找平台客服
自己这边都查了没问题,那就找平台客服。
问清楚:
1. 平台那边有没有发送回调?
2. 发送的状态是什么?成功还是失败?
3. 返回的状态码是什么?
4. 有没有错误信息?
平台那边能看到发送记录,一看就知道问题出在哪。
临时解决方案
回调出问题了,先别慌,有临时办法:
1. 手动查询订单
很多平台有订单查询接口,你可以主动去查订单状态,不只是等回调。
用户支付后,你前端轮询查询,或者后台定时查询未支付订单。
2. 邮件通知兜底
支付成功后给你发邮件,就算回调失败,你收到邮件也能手动处理。
3. 备用通道顶上
这个平台回调老出问题,就先切到备用平台,别影响生意。
怎么提高回调成功率?
1. 选靠谱的平台,易支付稳定通道回调成功率高
2. 服务器稳定,别经常宕机
3. 回调接口做简单点,别搞太复杂,减少出错概率
4. 做好日志,出问题好排查
5. 加上订单查询的兜底机制,回调失败也能补单
支付宝回调也一样吗?
是的,支付宝即时到账收的回调排查方法跟微信一样,都是这个思路。
都是先查地址,再查服务器,再查代码,再找平台。
原理都是一样的,都是异步通知机制。
总结
微信实时到账支付回调失败,别慌,一步步排查。
先看地址对不对,再看服务器有没有拦截,再看代码有没有问题,最后找客服。
做好日志和兜底机制,就算回调偶尔失败,也不会影响用户体验。
免签约线上收款,回调是关键一环,处理好了,自动化收款就稳了。
发表回复