支付系统有三个黑箱:“清结算对账、支付引擎、会计系统”。之所以被称为黑箱,是因为它们深藏后台,很少被人看到,其次,它们需要会计知识。本文将用最浅显的语言来介绍三个黑箱中的一个——“支付引擎”。
1. 什么是支付引擎?
支付引擎又称支付核心,是支付系统的后端调度器,负责处理本地账户、清算银行间资金。支付引擎每天要处理数百万笔交易、数亿资金,所以需要快速、准确。
图 1:支付引擎的位置
从上图可以看出,支付引擎位于后台的中间,它是在线交易和日终结算的调度器。
1.1 网上交易
他负责将交易请求发送到会计中心进行记账、通道清算,保证交易的资金和账户最终一致。
1.2 日终会计
他向对帐中心提供会计数据,并协助对帐中心和会计中心完成期末的会计结算。(会计核算就是会计的处理流程。)
2.支付引擎设计 2.1业务架构
图2:支付引擎业务架构
支付引擎采用分层架构设计,支付前端接收交易订单并进行预处理;支付引擎负责处理核心会计逻辑。
2.1.1 支付预处理(业务场景过滤)
支付前端负责请求订单解析、风控检查、费用计算处理,其目的是为了让支付引擎能够更高效的处理账户结算和渠道清算逻辑。
支付前端对外提供的可访问接口都是有业务意义的,比如“充值、收单、快捷支付、网银支付、条码支付”等等。支付前端根据不同的交易进行充值同名验证、收单商户交易风险、快捷卡仓信息等,然后根据不同支付产品的对账要求,向支付引擎发送指令。
2.1.2 支付引擎(重点关注账务处理)
支付引擎负责核心会计逻辑处理,包括账户结算的会计分录、渠道清算的交易金额等,因此对外提供的接口都是原子性的,比如前文提到的“充值、收单”等业务,都是由支付引擎统一按照“入账”的会计逻辑来处理,是否相同只是收款人和收款人的账号填写不同,这些在支付前预处理阶段已经核对过了。
2.2 核心流程
支付引擎、账户中心、对账中心共同组成支付核心系统,其中支付引擎起到核心调度的作用。
图3:支付核心处理流程
1)账户交易触发
触发支付引擎的账户交易有两种方式,一是通过交易、收银员主动调用支付引擎(图中1.1、1.2),二是配置清算会话,定期执行“自动清算、渠道清算、结算到卡”等周期性结算业务。
2)付款预处理
支付前端负责消息解析、风控检验、费用计算等业务预处理,然后将指令转发给支付引擎进行账务处理。若在风控检验阶段被拦截,则直接取消订单,并将结果信息返回前端。
3)支付引擎处理
支付引擎负责记账逻辑,记账的账户信息来自于用户的“结算协议”,会计分录和渠道交易金额来自于“清算规则”。
4)内场和外场处理
支付引擎调用外部的会计系统和支付系统,也就是所谓的出口,出口又分为内部字段和外部字段,内部字段负责会计中心的记账,外部字段负责支付通道的清算,内部和外部字段相互配合,实现资金和账务的最终一致性。
5)会计中心处理
账户中心负责处理支付引擎发送的记账指令。需要注意的是,为了满足互联网用户的高并发需求,账户中心采用资金与账户分离处理的方式,实时更新客户账户资金余额,异步登记明细账及更新内部子账户余额。
6)对账中心处理
支付引擎向对账中心提供结算成功的账户数据,对账中心也利用支付引擎进行账户调整和期末结转、余额操作。
2.3 商业模式
支付引擎分为驱动业务流的服务模型和传递指令的订单模型。
2.3.1 支付服务模式
图4:支付服务ER模型
1)服务触发
服务流程的触发方式有两种,一种是通过外部指令主动触发,一种是通过清除会话的方式定时触发任务。
2)指令解析
支付服务将首先解析请求,然后创建调用该服务的指令。
3)执行服务
服务采用流程化处理方式,流程由状态机控制,状态机把每一次退出看成一个服务步骤,以退出的支付结果作为下一步的执行条件,如此循环往复,直至支付完成。
3)生成指令
退出指令的生成是根据参与者的结算协议和清算规则生成清算结算条款,内部条款为会计分录,外部条款为交易金额。
2.3.2 支付订单模型
图 5:付款订单 ER 图
支付订单和指令分为四层:
1、交易层:接受交易系统和收银员的支付请求,每条请求都会生成一张支付订单。
2、前端层:解析支付订单中的“产品码、支付方式、交易类型”生成支付指令,推送至支付引擎进行会计处理。
3.核心层:用于产生会计核算信息、通道清算信息。
4、接入层:按照支付流程接入会计中心、支付渠道。
为何不将“收款、付款、退款”子订单拆分开来?
由于支付引擎只专注于账务处理,这些场景在指令层面只是“记账和处理”的参数不同,这样一套指令的设计可以适应不同场景的记账需求,当然如果考虑更高的性能要求,可以拆分成单独的子订单进行记录,但指令信息都差不多。
2.3.3 支付策略模型
图 6:支付服务路由策略
支付引擎的策略模型通过解析订单要素,对目标服务进行路由,并在服务运行前加载清结算参数。可以看出,整个策略路由过程中,业务信息被过滤掉,只留下账户信息和需要调用的服务节点。
图7:支付引擎策略模型
在预支付阶段解析订单因素时,交易类型会被转化为“存款、取款、退款”等有会计含义的支付类型。因为这些交易在会计层面是一样的,只是收款人/收款人账号不同而已。
同时,“快捷B2C借记、网银B2C贷记”等支付方式也被统一归类为“快捷、网银、条码”等支付方式,因为对于支付引擎来说,它们只是调用通道的流程不同,卡类型、公私标识对流程没有影响。
通过以上的过滤方式,我们可以更加清晰的明白“支付引擎只关注账户信息和跨行收付款”的定义。
3.支付引擎服务流程
支付引擎采用基于流程的业务处理方式,既可以调用业务主流程顺序执行,也可以直接访问业务节点单步执行。为保证流程的灵活性,支付引擎采用“交易步骤+指令状态”的方式顺序执行。
1)交易步骤:支付过程中处理的各个服务状态。
2)命令状态:子服务执行命令的结果是“成功”还是“失败”。
每个流程都有一个“初始”节点,是该流程的入口节点,初始节点也会创建新的支付指令,每个流程节点的结果决定下一步进入哪个子节点。
当然,现在很多开发平台都已经变成了更方便的低代码平台,可以用鼠标拖动流程节点、设置分支逻辑。
3.1 存款处理流程
图8:存款处理流程(小程序)
图 9:存款处理步骤和清算说明
入账流程是先接入外部渠道,再完成内部账务处理,因此存在“支付成功、支付失败、取消支付”三个分支,其中只有支付成功才涉及账务处理,日终对账后完成渠道汇总及划转。
上图中,“支付”是一条指令,“发起、申请、成功”是这条指令控制的业务步骤,结算、结转亦然如此。
3.2 退款流程
图 10:提款处理流程
图11:退款步骤及结算说明
退款服务先从客户账户中扣除款项,如果渠道退款成功,款项会存入待结算账户,如果退款失败,款项会退回到客户账户。退款一般会伴随正向交易,简单的收单交易有一般退款处理,复杂的组合支付则需要退款到资金来源处。
3.3 提款流程
图 12:提款处理流程
图13:提款流程及结算说明
提现流程与退款账户处理方式类似,先从客户账户扣款再由渠道完成提现,若失败则退回到客户账户。
4.支付引擎交互设计 4.1支付引擎交互主流程
图14:支付引擎交互主流程
支付引擎核心围绕支付服务,可通过指令直接触发,也可配置清算会话触发,过程中获取默认账户模板生成相应会计分录进入会计核心,根据交易金额调用支付通道。
图15:支付引擎功能列表
4.2 服务流程
图16:服务进程配置
支付引擎采用基于流程的配置方式,根据服务代码和支付类型访问相应的服务节点。访问支付服务,可以以“”节点作为主流程的入口程序,然后依次访问子流程。当然也可以直接填写子流程代码直接访问。
图 17:流程设置
每个流程节点都可以单独配置,包括对应的清算规则以及下一步要执行的流程。当然现在比较流行的方法是采用可视化的拖拽方式来配置业务处理流程。
4.3 清除会话
图18:存款业务清算环节
以上是实时触发流程的执行方式,当然也有定时触发执行的方式,比如期末记账、开具对账单、商户资金结算到卡等都可以通过配置不同的提交和执行频率。
4.4 和解协议
结算协议包括会计处理的默认账号、不同交易的结算周期等。
4.4.1 协议账户
图 19:协议账户
存储填写会计分录时使用的帐号。有些账户只有在交易运行时才能获取,例如“会员账户”、“待清算的机构账户”等。因此,这里可以使用参与者的角色来表示这些账户的价值。
4.4.2 结算周期
图 20:结算周期
填写每一笔充值、收款、提现等需要实时处理的交易的结算周期,次日到账的提现需要T+1天执行。
4.5 清算规则
图21:清算规则
清算规则是内部和外部会计处理的规则,例如上图中对存款会计处理设置了“存款条款”,针对不同的清算代码设置了会计处理规则,业务运行时会通过清算代码执行这些规则。
4.5.1 内场术语
图 22:内场术语
内部术语是向“会计中心”记账的会计分录,他通过数字集来管理这些记账分录,其中“会员账户、机构清算账户”等只能在操作过程中明确的账户被角色取代。固定的内部过渡账户可以直接填写相应的账户。
4.5.2 场外条款
图 23:场外条款
场外交易的会计信息就简单多了,只需要填写参与人的角色和交易金额即可。
五、结论
支付引擎的细节相当广泛,如果想全面掌握支付引擎,必须掌握“会计、支付、技术”等各个方面,因此对于从事研发的产品技术人员来说,了解支付引擎的基本工作原理非常重要,毕竟支付是直接操作“钱”的业务。
5.1 什么是支付引擎?
作为会计中心和支付通道的驱动,其本质是处理账户清算和结算的核心系统。
5.2 支付引擎架构
支付引擎追求速度和准确性,所以分为“支付前置机、支付引擎”两部分,支付前置机负责风控、计费、报文转换等支付预处理,支付引擎负责指令处理、调用账户中心记账、调用资金通道进行跨行清算等。
5.3 支付服务路由
支付引擎只关心账户的处理,因此会对请求订单进行策略性拆分,路由到目标服务,从而形成支付指令,实现内部账户与外部资金的最终一致性。
图 1:支付服务路由策略
5.4 付款处理
图2:支付引擎处理流程
支付前端会根据每笔支付请求生成支付订单,解析报文生成指令,支付引擎执行指令,并根据加载的清算结算规则生成清算结算指令,驱动会计中心及资金通道进行清算结算处理。
5.5 付款处理
图 3:支付处理流程
支付引擎采用“交易步骤+支付状态”的流转模式,初始作为主流程的入口节点,创建支付指令,各步骤负责对内对外的会计处理,每一步的执行结果决定下一个交易节点的执行,如此循环往复,完成一笔支付请求的处理。
好啦,今天就到这里,下次我们再给大家介绍另外一个黑匣子——“会计中心”,欢迎大家观看。