国内几家支付服务商几乎在所有事上都不一致:签名算法、回调报文形态、幂等约定、退款语义,甚至连"什么算已支付"的定义都不一样。多渠道收银台偏偏最容易在这些接缝处出错——回调没验签就是任人伪造,重放没挡住就是重复发货,而把"暂时没收到回调"当成"没支付"则会误伤真实订单。
点击空白处退出提示
国内几家支付服务商几乎在所有事上都不一致:签名算法、回调报文形态、幂等约定、退款语义,甚至连"什么算已支付"的定义都不一样。多渠道收银台偏偏最容易在这些接缝处出错——回调没验签就是任人伪造,重放没挡住就是重复发货,而把"暂时没收到回调"当成"没支付"则会误伤真实订单。
对外隐藏渠道差异,内部只有一条状态机:created → pending → paid → fulfilled。每个渠道写一个适配器负责自家签名与报文,核心只看统一事件。每一条回调都验签,同一个业务单号做重放保护,对账时把"没有回复"当成 unknown 而不是"未支付"——这条约定挡掉了最多的误判。同时覆盖微信小程序支付,并为渠道故障准备双二维码兜底。
单点集成负责人。难点不在接接口而在于语义对齐:把各家的"成功"翻译成同一个语义需要一个中间层;异步回调与主动查单要能互补而不是互相打架;退款要能跨渠道追溯原单。最终形态是不允许出现"已扣款但订单未生效"或"已发货但状态还在 pending"这两类脏态。



评论