支付成功页面显示正常,后台却偶尔多出一条订单,或者状态没改过来。问题多半出在回调这一环。
一、通知会来不止一次
平台为了保证送达,同一笔支付可能重复发通知。处理逻辑必须幂等:先按订单号查状态,已处理过就直接返回成功,别再走一遍加余额、发券的动作。
- 按订单号做幂等
- 已处理直接确认
- 加锁或唯一约束兜底
二、验签和金额都要核
回调里的签名、商户号、金额要逐项校验,金额对不上宁可挂起人工处理,也不能按通知里的数字直接改单。
- 验签必做
- 核对商户号与金额
- 异常挂起并告警
三、别把处理塞在回调请求里
发短信、生成报表这类慢动作放进队列异步做,回调本身尽快返回。否则一超时,平台重试,重复处理的风险更大。
- 回调快速确认
- 耗时任务转异步
- 失败可重试且可追溯
写在最后
上面这些是我们在这类项目里反复碰到的情况。业务不一样,做法不必照搬,先把自己的流程说清楚,再决定系统该怎么配。有具体场景想聊,电话或微信找我们就行。
