支付订单显示已支付,但钱没到商户账上——这个问题我去年处理了不下二十次。根因只有三种:回调没收到、代付卡住了、结算周期没到。直接按顺序排查,十分钟内能定位到问题。
凌晨三点十七分,电话响了
阿辉是我们站对接的商户,做夜宵外卖的。半夜是他们的高峰期,订单一单接一单。那天凌晨他的收款语音播报突然哑了,连收了六笔都没响。
打开后台一看,订单状态全是"已支付",但余额纹丝不动。商户急得不行,怕钱丢了,也怕客户付了款拿不到餐被投诉。
阿辉电话打到我这里的时候,我刚被猫踩醒。接起来就听到那边吼:钱呢?六笔都没到!
第一步:先看是不是回调的问题
我让他别慌,先把商户后台的订单列表截图发我。六笔订单,状态都是"已支付",但结算状态显示"待结算"。
这说明通道那边已经收到了钱,但通知没发到商户服务器。我让他登录服务器,在nginx日志里搜自己的回调地址:
tail -n 200 /var/log/nginx/access.log | grep "notify_url"
空空如也。通道的回调请求根本没到达他的服务器。
再看商户后台的防火墙规则,发现他前两天加固服务器的时候,手误把通道的回调IP段给封了。阿里云的安全组里多了一条拒绝规则,来源IP段填错了掩码,刚好覆盖了通道的出口IP。
撤掉那条规则之后,手动补推了六笔回调。语音播报马上响了,五笔到账。还有一笔没到。
第二步:那笔没到的,卡在代付环节
剩下的那一笔,回调日志显示收到了,但资金没有入账。打开通道后台的"代付管理"页面,这笔订单的代付状态是"处理中"。
代付卡住的常见原因有三个:商户余额不足导致代付发起失败、银行通道维护导致打款排队、或者收款账户信息有误触发了风控审核。阿辉这笔是第二种,收款行的支付通道刚好在凌晨三点到四点做维护。
这种情况只能等。银行恢复之后代付会自动重试,一般不超过两小时。实测发现,大部分银行维护都在凌晨窗口期,只要在 crontab 里加一条每半小时检查一次代付状态的脚本,自动补发失败的代付请求就行:
*/30 * * * * /usr/bin/php /www/check_pending_payout.php
这事其实在搭建支付环境的时候就该考虑到。关于从零搭站的完整流程,以前写过一篇实操记录:2026年做个人支付平台还能赚钱吗?三个月实操记录,里面专门讲了代付异常处理要提前配置好。
根因:回调触发了但代付排队,商户端感知就是"不到账"
回到那个问题:易支付不到账什么原因?阿辉这次的本质是两条线同时出了问题。回调链路断了导致通知收不到,代付链路排队导致资金延迟落地。两条线叠加,商户端的感知就是"明明付了钱,账上就是没钱"。
排查顺序永远是从前到后:
- 先确认通道是否收到了钱——看订单状态是不是"已支付"
- 再确认通知是否送达——查nginx日志有没有通道的回调请求
- 最后确认代付是否发起——查代付状态是不是"处理中"
不同情况的不同解法
情况一:订单状态一直是"未支付",但用户说扣款了。 这种99%是掉单。让用户在支付宝/微信里查扣款记录,截图发给你。拿着交易流水号去通道后台手动查单,能查到就补单,查不到就等——银行端扣款了但通道没收到通知的情况很少,一般半小时内会自动冲正。
情况二:订单已支付,回调也收到了,但结算一直是"待结算"。 检查商户的结算起结金额设置。有的通道默认起结金额是100块,低于100块的交易会一直挂着不结。把起结金额改成1块就行,或者告诉商户攒够额度再提。
情况三:代付状态是"失败"。 看失败原因代码。常见的有"账户信息不符"——商户的银行卡号或姓名写错了;"超出限额"——个人卡单日收款有上限;"风控拦截"——需要商户重新提交实名认证材料。对症处理就行。
再碰到这种事,我第一反应不会是接电话
阿辉后来在自己的商户后台加了个自动检测脚本,每分钟curl一次通道的状态查询接口,连续三次返回异常就自动发短信提醒他。他说这样至少不用等商户电话打过来才知道出事了。
我问他脚本跑得怎么样。
他说挺好,就是有时候半夜自己手机响了,打开一看是测试通知,然后翻个身继续睡——留商户那边的电话继续响。
这一行就是这样,你以为解决的是技术问题,其实解决的是信任问题。钱没到账的时候,再好的关系也经不住三分钟等待。