支付回调重复到达或并发到达时,怎样保证只发一次货?
先自己想一想,再看参考要点
参考要点
- 先验签,核对商户号、订单号、金额与本地订单一致,并确认交易状态是支付成功,再把三件事放在同一个事务中:以交易号为主键插入去重表,重复的通知报 1062 后回滚
- 用 UPDATE ... WHERE status IN ('UNPAID', 'CLOSING') 改为已支付,影响 1 行才继续
- 写入发货消息
- 重复的通知也要应答成功,否则平台会继续重发
- 先查状态再更新的写法,同一笔通知并发到达 10 次时会发 10 次货