新手怕老手麻烦;新手怕老手麻烦。
1、业务背景
通常在业务系统中,或多或少都会涉及到支付相关的功能; 对于一些经验较少的同学来说,最紧张的就是面对这类支付结算的逻辑,因为过程中的任何一个细节都可能出现导致对账异常的情况;
发生错误后,尝试修复流程非常耗时且成本高昂,而且还涉及到错误数据的调平问题。 最终很可能会导致会计结果混乱,进而需要人工干预、人工处理;
在支付场景中,不仅涉及业务众多、结算规则复杂、流程长、第三方对接等,还涉及到很多技术细节,比如:交易管理、异步处理、重试机制、锁定等; 下面我们来分析一下具体的详细逻辑。
二、支付业务 1、流程拆解
面对复杂的业务时,最基本的能力就是知道如何把流程拆成模块,管理好每个模块,然后考虑如何连接整个流程,从而形成解决问题的思路和经验;
下图展示了常见的交易场景分解,大致可以分为四个模块:
这只是从正常的交易流程来分析。 实际的详细描述将比图示复杂得多。 虽然业务细节不同,但处理思路大体相同; 然后根据各个模块设计流程时序图,规划节点。 连接与协作;
2. 处理时序
通过时序图的设计,我们分析了各个节点在连接协作时应该如何处理。 在支付业务中,通常分为前置支付、支付对接、后支付三个核心阶段:
其实,当你对业务有了清晰的认识和拆分之后,你就可以设计时序流程了,这会让复杂的场景看起来简单很多。 之后就可以设计各个节点的数据结构了;
3、结构设计
基于上述业务场景分析和拆解,以及流程序列图的呈现,可以轻松输出基本维度的结构设计。 可以参考下图:
即使只看上面简单的设计,也能感受到支付业务的复杂性,更何况加上红包或者满额折扣等优惠规则之后,其复杂程度可想而知;
当然,如果有明确的开发规范,在复杂的版本中,所有开发人员都必须输出业务分解拆分的思路、时序和结构设计,统一审核后再实施编码,这样即使是复杂的业务也会有很好的品质。 确保。
3、相关业务
以上流程仅从支付的主要逻辑来分析。 事实上,涉及的业务远远不止流程中提到的内容。 以常见的电商场景为例,交易中还有商品管理、库存管理、物流管理、支付对接等。 还会涉及嵌入优惠规则等;
产品管理
优惠券规则
这里简单介绍的产品和优惠券业务都与支付流程密切相关。 例如订单拆分后库存不足,需要下架产品; 支付时的优惠券使用策略、退款处理方式等;
四、实践总结
最后,我们从技术实现的角度总结了支付过程中的一些关键问题:
很多复杂的业务场景管理需要长期的迭代过程,但前提是牢牢掌握核心逻辑; 理解业务是一个从复杂到简单的过程,实现业务是一个从浅到深的过程。 这个过程,就是分析认识,到实施,到探索创新。
5.参考源码
编程文档: https://gitee.com/cicadasmile/butte-java-note 应用仓库: https://gitee.com/cicadasmile/butte-flyer-parent