支付系统学习(一)从用户视角到系统视角
# 动机
支付系统是现代金融系统中不可或缺的一环,通过支付系统,人们实现了物质交换过程中的资金流动。在信息时代,支付系统通过计算机实现了信息化、自动化,极大地提升了整个支付过程的效率,进而增强了物质交换过程的实时性。因此,了解支付系统的各种概念,是通过信息系统实现该系统的重要前提。
但「了解」和「会用」之间还有距离。作为工程师,需要理解的不是用户看到的流程,而是一笔支付在信息系统里为什么必须实现成这个样子。要回答这个问题,先要弄清一笔支付究竟是怎么成立的。
# 用户视角
支付的过程和参与的主体决定了支付系统的结构,因此首先学习支付过程。这里以常见的支付宝支付为例,从用户的角度出发,一次支付包含如下步骤:
- 扫描商户的二维码;
- 进入支付界面,此时出现支付币种、汇率及对应支付商家;
- 选择支付方式(如银行卡、花呗或余额宝等),输入金额,确认支付;
- 选择身份验证方式,如指纹、密码、人脸等;
- 验证通过,支付完成,展示结果;
在这个视角下,结论很简单:我的账户少了 100 元,商户的账户多了 100 元,资金从客户处转移到了商户处。如果支付系统只是如此,那它不过是一个转账接口;但实际的支付系统远比这复杂,因此用户的视角必然隐藏了某些东西。
# 系统视角
仅从客户角度,我们是完全无法理解支付系统全貌的,因此还需要通过其他角度了解支付系统的内部工作原理。为此,首先需要了解参与支付的各方在支付的过程中都做了什么,每一步又是为了什么。在支付的过程中,参与的主体有以下四方:
- 客户:发出支付动作的主体,所支付的金额需要从其账户中划扣;
- 商户:接受款项的主体;
- 渠道:负责资金流转移的主体,例如银行;
- 支付机构:负责提供支付功能、连接所有参与方的平台,也是本系列研究的重点;
用户视角的 5 步操作放入这四方关系中后就不再朴素,因为每一步都不是单一主体的动作,而是至少两方之间的一次约定。另外需要明确的是,资金并不是从客户直接流向商户的一条直线,而是四方之间一连串债权债务关系的替换。
# 资金流与权责流
对于同一笔支付,可以分别从资金流和权责流两个角度观察,两者对应着不同的图景。
第一种是资金流,只关注结果:一条从客户到商户的线,标着金额,它可以回答钱最后在哪里,但无法回答这笔钱为什么该动。第二种是权责流,关注的是依据:客户、支付机构、渠道、商户四方串成一条链,每一环都是一次债权债务的替换,而每次替换都需要有依据支撑,例如合同、授权、签名、清算规则。
两者的差别,就是「记账」和「支付系统」的差别。在数据库中把余额加一减一,任何后端都可以实现,支付系统真正的难点在于谁有资格记录这一笔增删、依据是什么、出错时如何收回。支付系统的复杂度,基本都来自于对权责的确认、转移与最终一致。
# 支付环节的由来
既然一次支付是一连串权责替换,那么接下来的问题是这一串环节具体是哪些、它们为什么必须存在。这些环节并不是设计者主观挑选出的一组步骤,而是被两个基本约束逐步逼出来的:一是客户与商户之间互不信任,二是用于支付的钱并不在支付机构手里。
从这两个约束出发,每个环节都是前一个环节无法单独解决问题时所必需的补充:
- 引入支付机构(中间人)。直接转账要求双方同时可信交割,现实中做不到,因此需要一个双方都信任的第三方居中,这是信任问题的唯一解。但引入中间人又带来了新的约束,即中间人不是钱的主人。
- 授权。中间人要替客户动钱,可它不是钱的主人,凭什么动?必须有客户的明确授权。授权让中间人获得「代客户付款」的资格,并且这个资格是可验证、不可抵赖的。
- 渠道与扣款。授权只解决了「我同意付」,但钱还在客户的银行账户里,支付机构动不了,因此必须通过渠道(银行、卡组织)才能触碰这笔钱。扣款正是授权与渠道结合后的落地动作。
- 清分与结算。支付机构拿到钱后,不能立刻划给商户:它服务成千上万个商户,不可能每笔实时划账,还需要处理对账、退款、拒付和手续费,而且它手里掌握的是全体用户的备付金,不能与自有资金混同。因此必须先把「谁欠谁」算清(清分),再统一划拨(结算)。
由此,这四个环节对应的是支付机构的三个子系统:收银台负责用户的交互与授权编排,渠道负责与银行等外部机构的对接,清结算负责账务的核算与资金划拨。它们并不是并列的功能模块,而是同一条迫不得已的链条在不同层面的落点。
# 权责拆解
上面推导出的环节落到具体的一次支付上,展开为如下步骤。这里按照前面提到的顺序,对照主体逐步拆开,观察每一步的权责变化和依据。
- 扫码确认:客户对商户产生付款义务(债务),依据是买卖合同和商户的收款请求;
- 选择支付方式:客户指示渠道代其清偿该债务,依据是客户与渠道之间的代付授权协议;
- 身份验证:授权指令生效且不可否认,依据是电子签名、密码或生物特征;
- 渠道扣款:客户对渠道的债务增加,渠道取得对客户的追偿权,依据是渠道服务协议;
- 清分到账:支付机构对商户产生付款义务,同时对渠道有一笔应收,依据是清算规则和结算协议;
- 结算出金:支付机构对商户的债务清偿完毕,权责链闭合;
整条链上,没有任何一刻是客户的钱直接变成商户的钱。每一环都是独立的债权债务关系,各自依赖一份依据成立。客户账户减少 100 元时,商户的债务清偿尚未开始,而商户真正收到资金,可能在若干天之后。
# 由此引出的一些问题
将视角从用户转换到权责之后,一些新的问题会自然出现,它们来自权责结构本身的要求:
- 支付为什么要分成授权和请款两步?授权只是冻结权责,请款才真正转移权责;
- 清分和结算为什么要分开?清分是确认权责(算清谁欠谁),结算是资金的实际划拨;
- 为什么必须对账?多个账本对同一笔权责的记录需要收敛,否则权责就无法落实;
- 支付为什么必须幂等?权责转移只能发生一次,重复执行相当于凭空产生一笔债权;
这些问题会在后续文章中依次展开,展开的顺序正是前面推导出的链条:从收银台的主体与账户关系讲起,然后是对外的渠道对接,最后是对内的商户清结算。本文需要先确立一个立场:支付系统真正维护的是权责关系,而余额只是其外在表现。
# 总结
本章中我们从用户视角出发,说明了用户看到的 5 步支付流程隐藏了系统的复杂性,进而引入系统视角下的四方主体,并将观察的重心从资金流转移到权责流。一次支付是一连串独立的债权债务关系替换,每一环都有自己的依据。后续将从主体和账户关系讲起,讨论在支付机构的视角下,「钱」究竟是什么。