支付概念模型设计
梳理一个复杂的支付和退款场景,使用概念模型快速了解大致需要涉及哪些模型以及这些模型之间的关系,并通过这些模型梳理出设计要点。
支付场景
支付方式:现金、在线支付、优惠折扣、皆有。 支付渠道:PC Web、小程序、APP等。 支付平台:企业一体化支付平台、微信支付、阿里支付等
- 支付:用户选择一个订单发起支付
- 再支付:用户订单支付失败或者超时支付后,再次发起支付
- 合并支付:用户可以选择多个订单(甚至可以是不同类型的订单)合并一起后发起支付
- 混合支付:一部分金额选择现金、一部分金额在线支付等
退款场景
- 全额退款:一次性全额退款
- 部分退款:用户可输入小于支付金额的数值,这样可以发起多笔部分退款
概念模型设计
设计要点:
1个订单因支付方式多种等原因,可以发起多笔支付,所以1个订单可以有1个或多个支付明细
多个支付明细(订单维度)可以合并成一个支付单进行统一支付
支付单用于发起支付操作
1个订单可以选择不同的支付方式、录入不同的金额来发起多次退款申请,退款申请通过后生成一个退款单
退款单用于发起退款操作
多个支付渠道可同时发起支付,很容易出现同一个订单被多个渠道同时进行支付的情况,需要考虑加上分布式锁的机制避免出现同一个订单出现支付多次的情况
支付平台的支付回调加上系统定时器主动查询支付结果,保障用户支付状态的实时显示
多渠道、高并发非常容易造成数据不一致的情况,如:用户已经支付了,但是订单状态为待支付等,避免出现订单已支付,还能更新成待支付的操作,做好状态设计以及流转控制。
写在最后
也许大部分的支付场景并没有这么复杂,这里提供一个思路供大家参考。概念模型可以帮助我们快速理解支付的整体设计,接下来还需根据业务的实际情况,进行具体属性的完善以及逻辑实现。
License:
CC BY 4.0