调用退款接口返回状态错误,后台显示订单已支付。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,订单存在未完成的退款或在途交易,或可退金额已被部分占用,重复提交时状态校验直接拒绝。

「退款状态校验」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

GET /pay/order/{no}
{ "status": "PAID", "refundable": 100 }
POST /pay/refund { "amount": 100 }

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,查询订单最新状态与可退金额;按剩余金额发起退款;处理结果落库再返回。

最后用这个标准收尾,退款请求被受理,订单状态与金额同步更新。

作者 9823189