退款不是把订单状态改成“已退款”就结束了。库存、优惠、支付、配送和通知可能都要跟着变化;只要其中一个环节超时或重复消费,用户看到的状态就会互相打架。
先画清楚状态,而不是先写接口
区分“申请中”“退款受理”“支付确认”“补偿失败”等状态,明确每一次迁移由谁发起、能否回退、是否允许重试。状态图不必漂亮,但必须能回答:现在这笔钱处在哪一步,下一步由谁负责。
消息只传递事实,不传递猜测
支付成功、退款成功、库存释放分别应该是独立事实事件。消费者要能幂等处理,消息体要带业务单号、事件编号和发生时间。用“当前订单全部信息”当消息,很容易让下游把过期字段重新写回去。
补偿要有可操作的入口
不是每个失败都能自动重试。对账任务、死信队列、人工处理页和审计记录应当串成一条线,让值班的人知道该补哪一步、补完如何确认。
把主流程跑通只是开始。退款链路设计得好,靠的是状态可解释、事件可重放、失败可收口。
正文完




