图解结算平台:准确高效给商户结款

这是《百图解码支付系统设计与实现》专栏系列文章中的第(4)篇。

本章主要讲清楚支付系统中商户结算涉及的基本概念,产品架构、系统架构,以及一些核心的流程和相关领域模型、状态机设计等。

1. 前言

收单结算是支付系统最重要的子域之一,行业内经常把有牌照的支付平台称为"收单机构"就可见一斑。

我们在上一篇文章讲了收单如何帮忙商户收钱,收完钱还得转给商户,用户支付100块钱,那么到底给商户多少钱,什么时候给,这都是结算平台干的工作。谓之"结算"。

下面这个图留着是为了提高"收单、结算、拒付"紧密结合的印象。

三者的职能如下:

收单核心: 主要负责处理商户订单的全生命周期管理:订单创建、支付推进、退款、撤销等。

结算核心: 主要负责把商户应收账款算清楚,把结算款按合同约定结转给商户。

拒付核心: 主要负责处理用户的拒付和对应的抗辩以及最后的判责。

2. 结算在支付系统中的位置

在收单机构(支付平台)里,结算就是把帮商户收进来的钱,按约定的结算规则、准确、及时地结算给商户

3. 结算产品架构

结算模式分为主动结算和被动结算。站在商户 的角度,被动结算 就是以收单机构为准,收单机构说结多少就是多少。主动结算就是以商户为准,商户说结多少就是多少。一般来说,大部分商户都是被动结算,特殊的大商户比如Google,Apple经常使用主动结算。

结算一定要设计账期,就像账务系统要有会计日是一样的道理,避免跨天的交易或零点附近的交易出现结算异常。对应就有账期创建、入账、关账、出账。

4. 结算系统架构

核心的服务包括:结算受理、注册,账期的新建、关账、出账,最后就是结算。

5. 结算核心流程

下面以即时到账模式为例说明。担保交易模式和预授权模式稍有不同。

在交易日,收单收到支付成功回执后,就发消息给结算,结算收到消息去查结算合约,进入结算注册流程。

在结算注册时,如果存在打开的账期,就直接挂过去,如果不存在,就创建一个账期。

在结算日,先进行关账,避免在途任务受影响。关账成功后,进入结算批次,再进入打款流程。

打款有3种情况:1)结算到商户余额户。2)在线结算到提现卡。3)线下人工打款(人工结算)。

打款完成后,推进结算流水SETTLED。

6. 结算核心领域模型

左边绿色部分是账单和流水相关信息,中间蓝色是账期和批次相关信息,右边是打款信息。

因为一个收单可能会有多种费用,所以会生成多条我方账单流水。同样的,一个收单可能结算给多个主体,对应有多笔结算流水。

结算账期有点类似会计日的概念,是为了控制零点左右的收单单据的结算能落到正确的结算账期里去。

关账后就会发起外部结算以及对应的打款。一个结算批次可能会分成多笔打款。

7. 结算状态机设计

上面把结算涉及到的状态机都画出来了。

特殊的是打款单的状态机,因为打款有可能调用外部渠道打到商户的卡里去,外部渠道有一定概率先返回打款成功,过两天后又返回退票(实际打款失败,资金退回),这个时候需要推进到REVERSE,然后重新更新信息后再进行打款。

退票的原因有多种,比如商户的卡被冻结等。

8. 资金流

结算一般只涉及到正向资金流,也就是支付成功后,一步步推进结算到商户余额户或者商户银行卡,如果是结算到商户余额户,就需要商户主动在商户门户发起提现到卡。

9. 结束语

本章主要讲了结算的基本概念,以及对应的产品和系统架构图,一些核心的领域模型和状态机设计。

相关推荐
苏三说技术7 分钟前
为什么大厂都不推荐在MySQL中使用NULL值?
后端
RingWu10 分钟前
微服务架构-全链路追踪
微服务·云原生·架构
techdashen11 分钟前
Rust 模块和文件不是一回事:一次讲清 `mod`、`use`、`pub use`
开发语言·后端·rust
爱勇宝25 分钟前
别焦虑,也别躺平:给年轻程序员的一封信
前端·后端·架构
RingWu36 分钟前
微服务架构-全链路追踪:Apache SkyWalking
微服务·架构·apache
Full Stack Developme39 分钟前
Spring 发展历史
java·后端·spring
ClouGence1 小时前
TiCDC 够用吗?聊聊 TiDB 同步的几个关键问题
数据库·分布式·后端
lili00121 小时前
CC GUI 插件架构剖析:如何为 JetBrains IDE 打造完整的 AI 编程工作台
java·ide·人工智能·python·架构·ai编程
音符犹如代码1 小时前
Docker 一键部署带有 TimescaleDB 插件的 PostgreSQL
java·运维·数据库·后端·docker·postgresql·容器
LucianaiB1 小时前
从模型护栏到工程门禁:基于 XGuard 二创一个 Agent/CI 动态策略安全护栏
后端