乐趣区

关于支付:聊聊支付流程的设计与实现逻辑

老手打怵新手头疼的业务;

一、业务背景

通常在业务体系中,都会或多或少的波及到领取相干的性能;对于一些教训欠缺同学来说,最缓和的就是面对这类领取结算的逻辑,因为流程中的任何细节问题,都可能引发对账异样的状况;

谬误产生之后,再想去修复流程,破费的工夫老本又是昂扬的,还牵扯谬误数据的调平问题,最终很可能引发乱账算不清的后果,而后须要人工染指手动解决;

在领取场景中,岂但波及诸多的简单业务,结算规定,超长的流程,第三方对接,其中更是波及到诸多技术细节,比方:事务管理、异步解决、重试机制、加锁等;上面来剖析具体的细节逻辑。

二、领取业务

1、流程拆解

面对简单业务的时候,最根本的能力就是要懂得把流程拆成模块,做好各个模块治理,再思考如何连接起整个流程,从而造成解决问题的思路和教训;

如图是对交易场景常见的合成,大抵能够分为四个模块:

  • 账面治理:对于开明领取性能的用户,必须清晰的治理资金信息;比方可用,解冻,账单等;
  • 交易流水:整个资金治理的流水记录,不局限于交易场景,还有充值,提现,退款等;
  • 领取对接:通常流程中的领取性能都是对接第三方领取平台来实现的,所以要做好申请和报文的记录;
  • 订单构造:比方在电商交易中,订单模型的治理,拆单策略等,领取的商品规格等;

这里只是从一个惯例的交易流程中去剖析,理论的细节形容会远比图例简单,尽管业务细节各不相同,然而解决思路是大体相通的;再依据各个模块设计流程时序图,布局好节点之间的连接和合作;

2、流程时序

通过时序图的设计,来剖析各个节点在连接合作时应该如何解决,在领取业务中,通常分为领取前、领取对接、领取后三个外围阶段:

  • 领取前:在商品下单时,构建订单模型,依据拆单规定校验库存、商品状态等,而后进行账户资金解冻,生成交易流水,此时的状态都是待领取;
  • 领取对接:领取前业务模型初始化胜利之后,构建第三方领取对接申请,发动付款流程,并记录相应的申请动作和参数,期待领取后果的告诉;
  • 领取后:依据领取后果的胜利与否,执行相应的业务模型状态更新,如果领取胜利则交易记录、解冻的资金、订单构造与库存等都须要做一系列更新;

实际上对业务有清晰的了解和拆分之后,再做好时序流程的设计,这样就曾经让一个简单的场景看起来简略许多了,之后就是设计各个节点的数据结构;

3、结构设计

基于下面的业务场景剖析和拆解,以及流程时序图的出现,能够很容易输入一份根底维度的结构设计,下图能够作为参考:

  • 账面治理:三个外围维度,账户金额,可用余额,解冻金额;
  • 交易记录:存储用户的交易动作,然而可能会产生多个交易明细,典型的场景就是购物车下单;
  • 交易明细:通常因为订单拆分,从而导致交易被拆分多条明细,进而将资金领取给不同商家;
  • 领取对接:申请第三方领取平台时,须要记录申请时参数,以及第三方回调告诉的报文;
  • 订单记录:在一笔订单中可能存在多个拆分的子单,拆分策略也很多,比方仓库,商家,品类等;
  • 订单明细:治理每笔子订单的信息,下单的商品、规格、买卖双方、单价、数量、金额等;

即便单看下面的简略设计,都能感觉到领取业务的复杂性,更何况还会叠加红包或满减等优惠规定之后,其复杂程度可想而知;

当然如果有明确的开发标准,在简单版本中,所有开发必须输入业务的合成拆分思路,时序和结构设计,在对立评审之后再落地编码,这样即使是简单的业务也会有极大的质量保证。

三、关联业务

下面单从领取的主逻辑去剖析流程,实际上波及到的业务远不止流程中提到的这些,以常见的电商场景为例,交易中还存在商品治理、库存治理、物流治理,领取对接还会波及优惠规定嵌入等等;

商品治理

  • 商品主体:保护商品各个维度的信息,并提供各种规格选项,以及根底的定价阶梯,构建商品详情形容;
  • 仓储治理:订单拆单之后,须要依据商品编号去校验仓储信息,进行相应的库存解冻以及领取后的仓库发货;

优惠券规定

  • 优惠券主体:为了适配更多的业务场景,须要对优惠规定有诸多的设计,比方满减或折扣比例、按价格阶梯优惠、有效期限度等;
  • 发放规定:撑持日常的经营流动,用户生命周期的保护,以及渠道流量的转化,提供用户群营销的根底能力;

这里简述的商品和优惠券业务,都是与领取流程有严密的分割,比方拆单后库存有余,须要移除该商品;优惠券在领取中的应用策略,以及退款时的解决形式等;

四、实际总结

最初从技术实现的角度,总结一下领取流程中的一些关键问题:

  • 业务模型:对业务有清晰的了解,并能拆分出外围的节点,设计出相应的流程时序和数据结构;
  • 事务管理:交易流程中罕用 TCC 事务机制,即 Try(预处理)、Confirm(确认)、Cancel(勾销) 模式;
  • 加锁与重试:领取实现后收回领取胜利的音讯,而后进行业务更新,通常须要对解决的订单号加锁,防止音讯重试机制引发数据问题;
  • 资金结算:波及金额的计算,天然要求不能呈现精度损失的问题,在一次交易中必须保障每笔资金能够通过对账核验;
  • 流程保护:流程自身是很难保障不呈现谬误的,须要在开发的时候,提供流程的可视化界面,并且反对手动保护的机制;

很多简单的业务场景治理,都须要一个长期的迭代过程,然而前提须要牢牢把握住外围的逻辑;对业务的认知是一个由繁入简的过程,而业务的实现是一个由浅到深的过程,即剖析与了解,到落地实现,再到摸索与翻新。

五、参考源码

 编程文档:https://gitee.com/cicadasmile/butte-java-note

利用仓库:https://gitee.com/cicadasmile/butte-flyer-parent
退出移动版