混合支付设计
前提:
三方支付需支持:
支付下单
支付
退款
表结构
pay_order
支付单号
调用三方下单是否成功:调用中、成功、失败
支付状态:未支付、支付成功(所有三方支付成功)、支付失败(任意一个三方支付失败)
pay_order_item
支付方式:微信、支付宝
支付金额:
三方下单状态:未调用、调用成功、调用失败
下单结果数据(支付时需要的信息,如支付二维码、微信小程序支付需要的数据)
支付状态:未支付、支付成功、支付失败
refund_order
支付单号
退款单号
退款状态:未支付、退款成功(所有三方支付成功)、退款失败(任意一个三方支付失败)
refund_order_item
pay_order_item的id
三方退款下单状态:未调用、调用成功、调用失败
调用失败次数
退款状态:未退款、退款成功、退款失败
流程
下单
创建pay_order、
创建pay_order_item(三方下单状态=未调用)
发送调用三方的消息
返回支付单号调用三方下单消息消费
调用三方
设置pay_order_item调用结果:调用成功、调用失败
发送综合结果处理获取支付下单结果:根据支付单号,获取下单结果
如果pay_order.调用三方下单是成功,则返回支付信息
如果pay_order.调用三方下单是失败,则返回失败消息
如果pay_order.调用三方下单是未调用,则前端继续轮询,查询支付下单结果
下单综合结果消费(成功、部分成功 + 部分失败、失败)
查询pay_order下的所有下单状态
如果有部分为未调用,则结束处理
如果全部成功,修改pay_order的调用三方下单为成功
如果部分成功、部分失败,修改pay_order的调用三方下单为失败三方支付回调处理
修改支付订单明细
发送【三方支付结果综合处理】的消息三方支付结果综合处理(消费者)
查询pay_order下的所有明细支付状态
如果全部成功,则支付成功
如果全部失败,则修改pay_order(支付状态=支付失败)
如果部分成功、部分失败:
修改pay_order(支付状态=支付失败)
创建退款单
发送退款调用消息到期取消订单
查询pay_order的支付状态
如果是支付成功、支付失败,结束处理
将未支付的修改为,取消支付
发送【三方支付结果综合处理】支付失败退款处理
调用三方退款接口
调用成功,修改预警接口
查询超时未退款的,发送预警消息,人工介入处理