混合支付设计

混合支付设计

前提:

三方支付需支持:
支付下单
支付
退款

表结构

pay_order
支付单号
调用三方下单是否成功:调用中、成功、失败
支付状态:未支付、支付成功(所有三方支付成功)、支付失败(任意一个三方支付失败)

pay_order_item
支付方式:微信、支付宝
支付金额:
三方下单状态:未调用、调用成功、调用失败
下单结果数据(支付时需要的信息,如支付二维码、微信小程序支付需要的数据)
支付状态:未支付、支付成功、支付失败

refund_order
支付单号
退款单号
退款状态:未支付、退款成功(所有三方支付成功)、退款失败(任意一个三方支付失败)

refund_order_item
pay_order_item的id
三方退款下单状态:未调用、调用成功、调用失败
调用失败次数
退款状态:未退款、退款成功、退款失败

流程

  1. 下单
    创建pay_order、
    创建pay_order_item(三方下单状态=未调用)
    发送调用三方的消息
    返回支付单号

  2. 调用三方下单消息消费
    调用三方
    设置pay_order_item调用结果:调用成功、调用失败
    发送综合结果处理

  3. 获取支付下单结果:根据支付单号,获取下单结果
    如果pay_order.调用三方下单是成功,则返回支付信息
    如果pay_order.调用三方下单是失败,则返回失败消息
    如果pay_order.调用三方下单是未调用,则前端继续轮询,查询支付下单结果

  1. 下单综合结果消费(成功、部分成功 + 部分失败、失败)
    查询pay_order下的所有下单状态
    如果有部分为未调用,则结束处理
    如果全部成功,修改pay_order的调用三方下单为成功
    如果部分成功、部分失败,修改pay_order的调用三方下单为失败

  2. 三方支付回调处理
    修改支付订单明细
    发送【三方支付结果综合处理】的消息

  3. 三方支付结果综合处理(消费者)
    查询pay_order下的所有明细支付状态
    如果全部成功,则支付成功
    如果全部失败,则修改pay_order(支付状态=支付失败)
    如果部分成功、部分失败:
    修改pay_order(支付状态=支付失败)
    创建退款单
    发送退款调用消息

  4. 到期取消订单
    查询pay_order的支付状态
    如果是支付成功、支付失败,结束处理
    将未支付的修改为,取消支付
    发送【三方支付结果综合处理】

  5. 支付失败退款处理
    调用三方退款接口
    调用成功,修改

  6. 预警接口
    查询超时未退款的,发送预警消息,人工介入处理

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容