扫码支付后都发生了啥?
1 金融业务
业务模式划分:
-
交易类业务,如扫码支付
-
信贷类业务
扫码支付普遍但不简单:
-
扫码支付是最具代表性,最常见的金融场景
-
传统银行业务的标志性机构大多参与到扫码支付过程,可通过扫码支付了解国家金融系统运作
-
扫码业务同时具有互联网应用和机构应用的技术特点:既要对接互联网用户,也要对接金融机构
2 案例背景
扫码支付分场景,选择与跨境电商相关的扫码跨境支付场景,假设:
- 付款方用户支付人民币
- 付款方的借记卡是国内银行A发行,简称【买家开户行】
- 第三方支付公司的备付金账户在国内银行B,简称【第三方开户行】
- 收款方接受的美元
- 收款方的借记卡是国外银行C发行的,简称【卖家开户行】
- 第三方公司是通过银行D进行外币兑换业务,简称【汇兑提供行】
国内对人民币相关的外汇交易有管制,本外币交易需满足一定要求,如要求电商平台有对应交易明细。假设已都合规。
支付过程:用户扫码支付、第三方公司进行本币代收、外汇交易及外币代付。
3 用户扫码
扫码支付以用户扫码作为整个业务起点。终端用户角度,扫码由鉴权、支付和拉取状态三步。
3.1 鉴权
扫码支付最终会用买家银行卡支付。开始扫码支付前,第三方公司要核实你是否有卡使用权,即“绑卡”。
3.1.1 第三方公司咋验证用户的使用权
① 4要素验证
- 用户姓名
- 用户身份证号码
- 银行卡号码
- 银行注册的手机号
都是银行记录的信息,因此虽然看起来你是在第三方支付公司的App绑卡,其实是银行在背后进行相关信息验证(隐式验证)。
都是电子信息,可能盗用(手机号也可能转移用户),为安全,银行验证手机号时,还验证你是否拥有这手机号:发验证码到你在银行柜台办借记卡时注册的手机号。
② 鉴权过程
- 用户填写前3要素和手机号
- 银行发短信验证码给用户手机号
- 用户将前3要素和短信验证码发给第三方支付公司
- 第三方支付公司再将所有信息发送给银行确认
即验证5个信息:4个静态,1个动态信息。
用户绑卡通过后,银行返给第三方支付公司这个用户的内部ID信息(Token)。之后第三方支付公司就可拿这ID进行所有合法操作。
③ 流程示意图
3.2 支付
鉴权完成后,就能扫码支付。
二维码是图形化字符串,背后是这笔交易对应的订单。当用户点击“确认”后,就开始整个支付流程。
3.3 拉取支付状态
系统功能角度,用户APP的支付确认按钮有局限,它只能确认后台是否已收到支付请求,不能确认支付是否已成功。因为支付后台需花时间和银行沟通,期间后台不知银行的支付流程到哪步了。
因不知支付啥时完成,所以用户App需每隔段时间向支付后台拉取交易情况,即轮询。这过程一般几百ms结束,所以一般察觉不到延时。
3.3.1 为啥轮询?
金融机构每天面对大量的用户资金操作,操作时间、频率有很大偶然性。为应对用户操作峰值,金融机构普遍通过异步消息处理架构对极端流量削峰填谷。若流量突增,异步消息架构会缓存所有请求,慢慢处理,避免核心金融系统超载。因此,用户不会及时得到处理结果,需不断查询处理情况。
银行处理完支付后:
- 银行把支付成功消息推给用户、第三方支付公司
- 第三方支付公司也推给你支付成功消息
所以扫码支付成功后,会听到两个手机消息通知的声音。
3.3.2 获取最新状态
两种方案:
- 用户定期去拉取
- 服务器将状态消息实时推给用户
推拉结合,是异步系统常见处理方式。
① 支付状态获取的流程图
4 本币代收
假设支付涉及外汇交易,由于买、卖家币种不同,无法直接转账。需第三方支付公司这中间人帮忙。中间人要执行:
- 本币代收
- 外汇交易
- 外币代付
本币代收,即第三方支付公司代收用户资金,即将你该付钱先打到第三方支付公司账上。
由于第三方支付公司账号和买家银行卡在两家不同银行,本币代收需跨行转账。跨行转账涉及整个银行系统的大小额系统和超级网银等。
4.1 央行和清算机构
跨行转账时,钱在不同银行,需考虑:
① 咋跨行搬钱?
最直接的,用汽车将钱从一家银行金库搬到另一家银行。不太实用,汽车能运的钱重量有限,路上也不安全,钱最好别挪地方。
就需另一第三方机构。所有银行都在这该新第三方机构放够多钱:存款准备金。当两家银行需转账,第三方机构在内部搬运下即可。如美国黄金交易所,每个客户都有自己专属的黄金仓库,很多小车在仓库之间搬运黄金。
若该第三方机构够可信,连内部搬运都不需要。第三方机构只需记录谁的钱有多少及从哪里搬了多少到另一个地方。信用级别最高的金融机构即国家的中央银行-央行。所以央行解决真实资金的转移问题。
② 转多少
每天银行之间的跨行交易非常多,不可能每笔都通过央行转钱。所以银行系统对跨行转账的流程优化:
- 白天只做记录,不进行任何实质性的跨行转账
- 每天结束时,计算两个银行之间交易金额的差额,最后通过央行进行一笔跨行转账
这种计算交易差额的方式叫轧差。
记录白天跨行转账细节、晚上进行交易轧差的第三方机构叫清算机构。银联及网联及国外的万事达都是清算机构。
金融系统采用异步消息处理架构应对支付流量。轧差则是另一种金融机构应对大流量的一种处理方式。轧差本质是实时消息的批处理,算是延时更大的异步处理框架。
4.2 跨行转账流程
- 第三方支付公司发指令给第三方开户行,要求将钱从用户的买家开户行转到第三方开户行
- 第三方支付公司拥有用户在买家开户行的Token(绑卡获得),所以可合法发起这笔转账。跨行转账流程开始
- 第三方开户行将所有信息交给清算机构。清算机构作为第三方负责记录这些信息,并通知买家开户行、第三方开户行记录这笔转账
- 买家开户行记录的结果是对用户的账号进行扣款。扣款结束后用短信通知用户
- 第三方开户行记录的结果是对第三方支付公司的账号进行打款。打款结束后第三方支付公司可以通过银行网页看到对公账户金额发生变化。白天工作结束。此时买家开户行的账面上的资金虽然减少,但是减少的钱并没有实质性到达第三方开户行
- 晚上,清算机构对白天发生的交易进行盘存,发现有一笔从买家开户行到第三方开户行的跨行转账还没有真正完成。清算机构会将这笔未完成的跨行转账信息发给央行
- 最后,央行收到信息后,将买家开户行在央行的存款准备金调低,并将第三方开户行在央行的存款准备金调高。钱就真正从买家开户行转到第三方开户行
5 外汇交易
转账交易第二步是第三方支付公司进行外汇交易。当第三方支付公司完成用户本币代扣,第三方支付公司账上就有对应人民币。
将这些人民币变成美元,才能将美元转给国外卖家。外汇交易过程按交易量分为:
- C端外汇零售业务
- B端外汇批发业务
5.1 C端外汇零售业务
外汇交易和电商一样,也是买卖。第三方支付公司作为中间人,用人民币购买美元。
美元从哪买?
人民币有外汇管制,不能随意买卖,需通过有资质的银行。若外汇不涉及人民币,则选择面宽泛很多,银行、投行或其他金融机构都可。
账务原理建议一个账号只处理同一个币种交易。外汇交易涉及到两个币种,需两个不同账号。
假设第三方支付公司通过汇兑提供行进行外汇交易。那第三方公司要在汇兑提供行里建两个账号:
- 人民币账号
- 美元账号
同时,汇兑提供行内部也要有对应两个币种账号,对应:
- 人民币资金池
- 美元资金池
所以,一笔外币购买涉及4个账号之间的2笔支付订单。
交易过程示意图
外汇交易完成后,第三方支付公司在汇兑提供行的人民币账户金额减少,美元账户金额增加。这样第三方支付公司就有足够的美元支付给卖家。
外汇交易有成本:
- 时间成本:当天购买的外汇可能隔天才到账
- 交易成本:外汇交易一般按交易次数收费。为节省成本,第三方支付公司通常提前购买大量外汇以应对日间业务。只有当外汇储备下降到警戒线,再做下一笔大额外汇购买
这就解决第三方支付公司美元账户不足问题,但是它用来购汇的人民币账户一直在往外出钱,总有枯竭一天,咋办。
所以还需考虑从外部调资金进来。第三方支付公司的备付金账户在第三方开户行,因此要做从第三方开户行到汇兑提供行的跨行转账:
但第三方公司在第三方开户行的账户也在一直出钱,第三方开户行账户也要有进来资金的渠道。这是由本币代收的过程实现。把买家出资的流程补充完整:
汇兑提供行帮第三方支付公司实现外汇购买。但汇兑提供行的美元账户一直在出钱。这美元账户钱不够咋办?这时,汇兑提供行需从其他银行寻求帮助。这就涉及B端外汇批发交易。
5.2 B端外汇批发业务
前面电商相关的外汇交易属于外汇的零售业务。
银行、投行和其他外汇提供商间形成有层级的跨国组织,专门从事外汇的批发业务。批发业务的业务量非常巨大,通常每天都有几万亿美元规模。
外汇市场按交易量分层
- 最底层是面对终端用户的外汇零售商。这些零售商负责给一般用户提供小额外汇交易。这些小笔外汇交易汇集后,就形成一笔大的外汇订单,然后继续往上层交易
- 和底层外汇零售商一样,上层机构将所有外汇交易汇集后,形成更大外汇订单,再往更上层交易
- 一直往上汇集流程尽头是全球最大的外汇做市商,一般是巨型的跨国商业银行
这些跨国商业银行面对全球不同国家大量的储蓄用户,所以它们有不同币种巨额存款。这些做市商之间通过交换不同币种的大额固定利息存折来实现外汇交易,从而决定最终汇率:
外汇交易有时间成本,当天购买外汇需隔天到账。这一天时间间隔内,外汇市场可能巨大波动,造成金融机构账面上的资金亏损。所以,参与外汇业务的金融机构都会处理外汇相关的市场风险,如用期货、期权等衍生品来对冲风险。
5.3 至此的流程示意图
6 外币代付
和本币代收流程在原则上一样。不同在于外币代付的金额是美元,流出账号是第三方支付公司的美元账号。由于卖家的账号在卖家开户行,第三方支付的美元账号在汇兑提供行,这时要走国际的清结算过程。流程核心思想类似,只是细节更复杂。
7 总结
用户在扫码支付前需要证明自己合法拥有银行卡,要给开卡行提供4要素:姓名、身份证、银行卡号和手机号。验证通过后便可以开始支付流程。支付完成后用户可通过轮询异步获取支付状态。异步处理是金融机构应对支付流量的一种架构设计。
在第三方支付公司收到支付请求后,开始进行本币代收业务。由于账号设立的关系,需要进行跨行转账。此时清算中心和央行一起提供了跨行转账功能。跨行转账一般采用了日间交易、日终轧差结算的方式进行。轧差处理是金融机构应对支付流量的另一种架构设计。
第三方支付公司在完成本币代收业务之后,还要进行汇兑业务,具体分为外汇零售业务和批发业务。如果涉及外币代付业务,第三方支付公司还需要借助国际清结算组织的相关功能。
二维码支付涉及的大多数环节都是异步系统,比如用户App的异步支付状态查询,以及清算中心和央行及银行之间的跨行转账清结算过程。异步系统不会将结果同步返回给调用方。因此,我们在设计系统的时候,就需要支持状态的查询以及状态消息的推送功能。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
目前主攻市级软件项目设计、构建服务全社会的应用系统。
参考:
本文由博客一文多发平台 OpenWrite 发布!