支付前取消是逆向链路里最简单的一种: 合同签了,但资金还没流动,合同撤销只需要回补创单时操作的各类资产。 没有退款,没有复杂的跨域协调,只要「干净还原到下单前的状态」就行。


一、支付前取消的本质

支付前取消 = 回补创单时的资产操作

创单时各资产的操作方式不同,取消时的回补操作也对应不同:

资产 创单操作 取消回补
库存 FREEZE(冻结,预占模式) ROLLBACK_FREEZE(解冻)
优惠券 CONSUME(直接消耗) ROLLBACK_CONSUME(退回)
红包余额 DEDUCT(直接扣减) ROLLBACK_DEDUCT(退回)
限购名额 INCREASE(直接占用) ROLLBACK_INCREASE(释放)

取消时,按各资产实际的回补操作还原,回到下单前的状态。

没有资金流动:因为用户还没有付款,所以不涉及退款动作。取消后,订单状态变为 CANCELLED,不是 CLOSED。这两个状态的语义完全不同(详见第二部分第五章),结算域对它们的处理方式也不同。


二、取消入口的收口原则

支付前取消的入口,在现实系统中非常容易变得散乱——用户主动取消、商家取消、超时系统自动取消、风控拦截取消……每个场景都有可能各自打一个不同的接口。

正确原则:所有取消入口统一收口到交易域的一个取消接口

cancelOrder调用方.png

统一入口的好处:


三、支付前取消的完整流程