背景
某支付平台XXX-Pay支持组合支付,XXX-Channel是其中的一条支付渠道。该支付渠道提供的冻结服务接口时,在调用的时候同步返回PayNo,而业务执行结果,通过异步回调的方式实现。
正常执行序列
调用支付服务冻结接口
请求中待{Source,ReqId,FrozenAmount}
落地支付请求,生成PayNo
以Source和ReqId做唯一键约束,落地支付冻结请求,并生成唯一的PayNo。
同步返回PayNo支付冻结号
将PayNo同步返回给调用方
更新支付冻结号PayNo
调用方将PayNo落地到本地,并和ReqId关联起来。使用的方式是字段全更新的方式.
//得到DTO
select * from request where id = 1;
requestDTO.setPayNo(233);
update request set reqId=#reqId#, payNo=#payNo# where id = 1;
异步完成支付
XXX-Channel异步线程完成支付(内部补偿机制,保证支付过程要么成功,要么失败,不存在中间状态)。