回调问题是支付系统排第一的故障类型。用户付了钱,你的系统不知道,订单一直显示"待支付"——用户急,你更急。

第一步:检查 notify_url 能不能从外网访问。很多人在本地用 127.0.0.1 测试通了,上线后忘了改成公网域名。支付平台的服务器是主动来请求你的回调地址的,它访问不到你的内网地址。用手机 4G 网络直接访问一下你的 notify_url,看看能不能通。

第二步:检查服务器防火墙。宝塔面板默认开了防火墙,部分云服务器还有安全组。确认 443 端口(HTTPS)对外放行。之前我碰过一个奇葩问题:安全组只放了 80 端口没放 443,HTTP 回调没问题但 HTTPS 回调全失败。

第三步:看 Nginx 日志。日志路径一般是 /www/wwwlogs/你的域名.log。搜索 notify 关键词,如果发现有请求进来但返回了 404 或 500,说明回调到达了但你的处理程序有问题。

第四步:验签名。回调里带了一个 sign 字段,你需要用同样的算法(参数排序 + 拼接商户密钥 + MD5)算一遍,跟传过来的 sign 比对。不一致说明要么密钥配错了,要么参数被篡改。彩虹易支付的签名算法在 API文档 里写得很清楚。

第五步:最后别忘了返回 success这是纯文本字符串,不是 JSON。很多人习惯性地 echo json_encode(['code'=>1]),平台收到的不是 success 就会一直重发回调,你以为回调丢了,其实是回调被你拒绝了。