在线支付是一个有近 20 年发展历程的行业,其背后系统的技术设计也随着时间、政策、技术的迭代,不断发生着变化。作为一个与钱直接打交道的行业,支付系统的准确性、安全性、稳定性要求都非常高,对程序员而言无疑是一个非常有挑战性的技术领域。 本文从资金的视角提炼了支付系统背后的业务与技术要点,帮助大家理清支付和资金的关系,文中多处架构示意图非常直观,相信能给大家一些全面的技术输入!
关注腾讯云开发者,一手技术干货提前解锁👇
提起在线支付,大家一定不陌生,这个行业发展了快20年了,最近又推出了“碰一碰”支付等创新形态。但绝大多数人对支付的了解仍只浮在水面上,作为支付行业从业者,今天来带大家看看冰山下面的部分:欢迎走进“资金管理”这个神秘领域。
这里所说的“资金”或“资金管理”不是特指某一个团队或某一款产品,你可以理解为支付一定要与钱打交道吧?我暂且把在支付流程中与钱相关的东西都放进一个黑盒子里,为了便于叙述,给这个黑盒子取一个名字叫“资金平台”,再一步步解密黑盒子里放了哪些东西。在正式解密之前,我们先看看这个黑盒子(“资金平台”)在支付流程中是如何与上下游交互的。
举个例子,小明口渴了,进711买了一瓶水,用微信支付向收银员付了5元钱。
整个流程大致上像是这样:
首先这个资金平台是服务于支付公司(比如微信支付)的,理论上每个支付公司都应当有个资金平台,架构上或许多少有些不同,但底层原理上是一致的。
那么资金平台需要做些什么呢?如果只从最浅显的角度看,应该至少完成这1件事:把小明支付的5元钱转给711。
问题就来了,就这么简单,支付系统不能自己做吗,为什么一定要交给资金平台?直觉告诉我们,银行、微信支付、711属于不同的体系,用户的钱不会乖乖的自己飞到711的账户里,这里面一定还有许多“猫腻”,不着急,下面就来一点点解密。
在此之前先插个题外话:上图向银行发起扣款看起来也是与资金相关的动作,为什么不是资金平台来完成?这是因为扣款是支付主链路的关键环节,支付强依赖扣款结果来确认支付状态,而且扣款指令只是完成了与银行的信息流交互,并未真正发生资金流转。
3.1 备付金账户管理
首先还是要回答这个问题:钱是怎么从用户银行卡转到711的?
银行当然不会直接对接711,中间需要经过微信支付进行中转,根据央行的规定,第三方支付的资金都需要受到两联(银联、网联)监管,微信支付需要在央行开设一个备付金账户,所有未结算的资金都会沉淀在备付金账户里。
资金平台需要负责对备付金账户进行管理,包括:
实际上一家支付公司不可能只开一个备付金账户,在断直连以前账户都是直接开在商业银行的,断直连后也仍有许多场景需要在商业银行开户。理论上说只有开在央行的账户才叫备付金账户,大家平时交流说习惯了会把普通账户也叫做备付金账户。
不管怎么样,这些账户里都是有存钱的,都是物理账户,为了便于管账,每一个物理账户还会在公司内部开设一个虚拟“影子户”或者叫“头寸户”。
3.2 (客户)账户管理
小明作为微信支付的用户,在微信支付里有个钱包账户,就是我们平时看到的这个:
每个用户在资金平台内都有一个“余额户”,充值、收到红包时账户就会加钱,使用余额支付时账户就会扣钱。
小明买水如果用银行卡支付,就不涉及余额户的变动;如果用余额支付,则余额-5。
所谓“客户账户”就是指提供给客户使用的账户,包括个人用户和商户。
与“客户账户”对应的叫做“内部户”,内部户不需要开放给客户使用,只用于内部记账。
至此,我们可以用一张图描述资金账户体系:
这里的账户体系所包含的,是企业自己需要管理的账户。像小明自己在工商银行开设的账户则不属于管辖范围。
3.3 结算
有了上面的准备工作后,我们就可以开始结算了。
结算,就是把资金结给商户的过程。
根据商户入驻时签订的合同,每个商户都有相应的结算周期和结算方式。
- 结算周期:例如实时结算,T+1 结算
- 结算方式:结算到卡,结算到余额
假设 T+1 结算,整个过程看起来像这样:
如果结算到余额,直接商户余额+20,如果结算到卡,根据行业规范要求信息流需要经过银网联,再由银网联进行统一清算。
3.4 对账
资金平台很重要的一个职责是保证资金安全。我们先来看看小明支付的5元是怎么进到微信支付的备付金账户的:
前面说到第三方支付的资金受到两联监管,每一笔交易都需要上报,网联在这里面还承担了资金清算的职责。它会算清楚工商银行和财付通的应收应付账款,一定时间内进行汇总后一次性打款。
可以看到清算的工作交给了网联,支付公司只是被动接受消息和收到账款,虽说网联是国家队,但有没有极小的可能性它也会算错?例如程序员写了一个bug之类的?
为了避免这种情况发生,我们就需要进行资金对账,使用标准的三层对账模式:
三层对账保证了每一笔明细、每一笔账款的准确性。
不只是小明的付款会有对账,前面提到的结算过程也会对账,只要发生了实体资金变动的都需要进行对账。因此有时也把对账称为账实核对。
3.5 记账
上面的支付过程有个小问题,如果是 T+1 结算,从小明支付成功到真正结算还隔着老长时间,在这中间买水的5元钱去哪了?
这就要分实体资金和虚拟资金来说明了。
实体资金,也就是真正意义上的钱在哪,这个要看网联的清算周期
实体资金的流转看起来像这样:
可以看到实体资金的流转并不总是那么实时的,有一些“真空期”:钱在路上了,至于到哪了咱也不知道。为了能更好地管理整个资金的生命周期,降低资金风险,就需要引入虚拟资金流,也就是我们所说的“记账”。
上面提到小明支付成功后,但还未结算前,资金就沉淀在“商户待结算”里面,类似于“商户待结算”这样的账户,就是内部户。
我们尝试还原一下完整的记账过程,注意记账是以支付公司的视角去记的(假定商户是结算到余额):
事件 | D 应收待清算 | C 网关过渡户 | C 商户待结算 | D 应收应清算 | D 备付金头寸 | C 商户余额户 |
---|---|---|---|---|---|---|
渠道扣款成功 | D +5 | C +5 | ||||
支付成功 | D -5 | C +5 | ||||
网联清分完成(完成明细对账) | C -5 | D +5 | ||||
资金到账(完成资金对账) | C -5 | D +5 | ||||
结算完成 | D -5 | C +5 |
细心观察可以发现,记账过程有这样的特点
上面提到了实体资金流,那是否有虚拟资金流?
当然有,我们按照借记指向贷记的顺序,把所有相关的内部户串联起来,就形成了虚拟资金流。
那么记账有什么用呢?
3.6 会计核算
现在我们知道了一笔支付的钱怎么收进来,怎么结出去,怎么通过记账、对账来防范和识别风险,还有什么没做的吗?
确实还有一件事:如果账记错了怎么办?不仅会影响资金风险防控的效果,财务报表也会不准确,影响经营决策。
在会计学上是通过会计核算的方式来验证账本是否有问题。
简单来说,会计核算就是在做核对和统计。有这么几件事:
感兴趣的可以进一步搜索【资产负债表】、【利润表】、【现金流量表】,本文就不再继续延伸了。
用一张图总结一下在支付流程中资金平台的职责和作用:
文章的上半部分说的是境内一笔支付的场景, 在跨境场景下是否有什么区别呢?任何业务一旦加上了“跨境”二字,整个业务和系统的复杂度就不只是上升了一个量级。
以上不同因素的叠加导致资金业务的复杂性也是指数级上升,但咱也别被这些就吓住了,看看在这样的背景下资金平台应该怎么做。
从这个章节起,我们聊一聊跨境支付中的资金管理问题。
现在把场景换成跨境支付,小明去韩国旅游,进711买了一瓶矿泉水,价格是1000韩元(KRW),拿着微信扫码,随着“滴”的一声,付款成功5人民币(CNY)。
跨境业务确实有些复杂,上面的场景设置过于粗糙了,正式开始之前我们得补充一些必要的假设 (这个场景是虚拟场景,与微信业务无关):
把上面的图扩展一下,逻辑上的关系大概像这样:
7.1 备付金和账户体系
备付金其实跟国内的备付金管理区别不大,也是要管理备付金账户的生命周期。但是需要注意:
账户体系也没什么区别,在上文已经介绍过了。
7.2 资金通路管理
资金从小明的银行卡到711商户要分几步?咱们来一步步分析:
完整的资金通路可能是这样(境内兑换):
或这样(出境后兑换):
现实情况可能比这还复杂的多,因此资金平台一个重要的作用就是把资金链路打通,某些情况下或许有不止一条资金通路,那就还需根据资金时效性、资金成本、监管政策等因素进行综合决策,选一条最合适的资金通路。
7.3 外汇兑换
小明支付的5CNY必须经过外汇兑换(FX:Foreign Exchange)才能转成KRW。但如果要展开聊外汇,估计一篇文章都写不下,这里还是聚焦说一说在支付关键链路下外汇的核心流程。
我们以上面的资金通路二进行说明:
大致上外汇的核心流程是这样的:
7.4 清算和对账
清算的重点就是分清参与清算的双方是谁,谁是主动清算,谁是被动清算。
阶段一:清分,主动清算的一方负责算账,算好了给对方出一份清算文件,被动清算的一方要明细对账,以免对方算错了。
阶段二:清偿,根据清分的结果进行打款。主动清算方通过调拨把钱转入被动清算方账户。这时双方的银行发生动账,会各自收到银行的账单通知,还需要进行一次账单对账。
清算和对账的大体流程如下:
实际上这里的复杂性并不来自于清算流程, 而是对清算关系的分析。我们以上面的资金通路二为例,来捋一捋整个链路中所有机构间的清算关系:
这里有两点稍做解释
7.5 多主体账务管理
说到这里,你应该对实体资金流比较了解了,但资金平台还有一个重要职责就是管理虚拟资金流,也就是记账。
说记账之前又得先说一个名词:主体(Entity),或叫法人主体(Legal Entity),可以理解为在法律上独立注册的一家公司,享有法人权利和义务,例如签订合同等需要法人主体来签订。
还有一个词叫核算主体或会计主体(Accounting Entity),因为稍微大一点规模的公司,不会只做单一业务,不同业务的账需要分开管,而核算主体就是为了管账而设计的,我们平时说的“你这笔账要记到哪个主体下面?”这里就是指核算主体。
与境内支付单主体、单币种不同,跨境支付涉及到跨主体、多币种。为了能够说清一笔跨境支付,我就虚拟出了3个主体(微信支付中国 WPCN,微信支付香港 WPHK,微信支付韩国 WPKR),假设每个主体只做单一业务,也就是只有一个核算主体。
记账的要求是每个核算主体、每个币种都要有单独的账本。
OK,下面就到了资金管理领域最最最最最最难理解的部分了,我会把大致资金流画出来,但我并不打算立刻解释为什么账要这么记,设置这些账户的目的是什么。这部分需要比较深的业务背景和账务知识,外行看起来会很晦涩枯燥。
资金流并不是只有唯一一种画法(与业务流程设计有关),这里以资金通路二为例,仅供参考:
是不是很晕?没关系,对于没有账务背景的同学,目前只需知道两点就够了:
7.6 流动性管理
咱也问了一下 GPT,什么是流动性(Liquidity)管理?
资金流动性管理是指企业或金融机构对其资金流动性进行监控、分析和优化的过程,以确保在需要时能够迅速获取足够的现金或现金等价物,以满足短期的财务需求和运营支出。流动性管理的目标是平衡流动性风险与收益,确保企业在任何时候都能履行其财务义务。
害~这种专业术语,就是懂的人都懂,不懂的人问完也是一脸懵。
还是我来说吧。我们先来看看在支付业务,尤其在跨境支付中为什么需要用到流动性管理?
不管是上述哪种场景,都是需要识别出哪些环节可能存在资金短缺,并及时通过其他手段(如资金调拨)填补短缺资金,以确保业务运营的稳定性,这就是流动性管理。
要达成这一点,我们就需要做到:
我们来总结一下,把资金平台这个黑盒子打开,看看里面到底长啥样。
跨境业务是非常复杂的,本文也只是走马观花,把主流程大致盘点了一下。后续还会展开更多技术架构和实现细节,可以关注公众号了解更多。
欢迎关注原文作者 Louis 的公众号:支付进阶之路👇
-End-
原创作者|Louis