生成支付签名
1.根据订单号查询最新支付单是否有待支付的支付单
2.如果有待支付支付单,触发一次主动查询,避免回调完了和支付成功主动查询查询结果失败的重复失败,导致用户重复支付
3.如果此单查出已支付则直接修改订单状态提示此单已支付
4.如果待支付支付单未支付,则判断是否超过超时失效 如果超过则提示支付超时,请重新下单
5.如果超时则生成支付签名(可以本地缓存 或者每次实时请求支付系统生成,支付系统应该也会缓存)
5.如果没有支付单,则创建支付单并落库,然后根据新的支付单 生成支付签名
主动查询处理
1.即支付成功,支付方通知我们成功我们控制跳转到对应的页面,或者支付方302重定向跳转到我们的确认页面,调用支付的主动查询,如果支付成功则更改状态为待支付下一状态(涉及修改状态加锁)
异步回调通知处理
1.异步回调查看订单是什么状态,如果是因为过期未支付的话,则触发自动退款(一般是主动查询为待支付,异步回调未回调,或者down机,处理失败,或者消费消息不及时,定时任务过期未支付)
2.此接口不宜阻塞,收到回调消息,记录日志表,消息丢到MQ 异步处理
过期未支付处理
1.正常未支付不需要关心
2.如果是因为实际支付了,主动查询未支付,异步回调未回调,或者down机,处理失败,或者消费消息不及时。
3.过期未支付逻辑触发时。主动查询一次,如果因为2这种情况导致的待支付,实际已经支付了。根据业务评估自动退款 还是判定支付成功改为待发货
4.比如这种业务场景,有限制多少公里15分钟必须送到。如果没有送到,就会赔钱。如果过期未支付逻辑触发时 再修改为待发货,就会导致送货超时赔钱
涉及到的表
订单表,支付单表,退款单表(售后表)
支付临界时间
生成支付签名都需要传递超时时间,且当前系统也会有个超时时间。可以比第三方支付大几秒。让三方支付抛出超时