在线支付系统的精英搭档:深入剖析收银核心与支付引擎的协同作战

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

收银核心和支付引擎是支付系统最核心的两个子系统之一。

本篇主要讲清楚收银核心和支付引擎的设计与实现,包括收银核心如何渲染可用支付方式,支付引擎如何去为商户扣款,以及它们的领域模型设计,状态机设计等。

**

1. 前言

如果说电子商务是现代经济的繁华都市,那么在线支付系统无疑就是最繁忙的交通大动脉。在这个每年数十万亿规模的在线支付交易世界中,有两个默契十足的队友密切配合,确保每一笔交易都像优雅的华尔兹舞步一样流畅 -- 这就是我们今天的主角:收银核心和支付引擎。

2. 协同作战

先给一个直观的协同作战的图,有一个整体的印象。

3. 收银核心:交易的智囊团

想象一下,你走进了一家精品咖啡店,在这里收银核心就好比是那位亲切的侍者,不仅为你呈上菜单上各式支付方式的大餐,还会确保核验你的身份,然后查出你留存在咖啡店的预存款。在支付你的账单时,还会偷偷做个背影调查(风控检查),以确保你不是正在洗钱。

3.1. 收银核心在支付系统中的位置

收银核心是支付系统的门面,负责处理用户的支付请求,核心能力就两个:1)支付方式咨询,告诉用户本次可以使用哪些支付方式。2)提交支付后的各种校验,比如订单是否有效,商户权限,用户身份,风控等。

3.2. 支付咨询

上面的图分别是电商(京东)的收银台,支付平台(微信支付)的收银台。

支付咨询阶段,需要做以下几个工作:

  1. 基础检查:可支付检查(有可能订单已经已经被支付),用户检查,商户检查等。
  2. 资产咨询:绑卡数据,账户余额,营销(比如满减、红包等)。
  3. 渠道咨询:通过币种、金额、渠道开关等。
  4. 额度咨询:单笔限额、日累计限额、月累计限额等。
  5. 支付方式组装:把上面的资产、渠道等组装成用户方便理解的支付方式。
  6. 支付方式排序:把用户可用支付方式做好推荐排序(既要考虑用户体验,又要考虑营销策略)。

最后把支付方式返回给用户,供用户在支付时选择。

3.3. 支付受理

用户选择好支付方式,点击"确认支付",就到了支付受理阶段。主要做以下几个工作:

  1. 在支付咨询阶段的工作全部做一遍。因为用户在支付方式渲染后有可能过了很久才支付,很多数据在后台可能已经发生变化,比如余额变了,或者订单已经过期了等情况。
  2. 全部通过后,调用风控进行风险判断。
  3. 如果是外部渠道的卡支付,还需要调用渠道路由,选择出一条最优的渠道。
  4. 然后是提交支付请求到支付引擎进行真实扣款。
  5. 最后是从收单平台轮询交易结果。

特别说明一下:为什么轮询结果是从收单平台而不是支付引擎?因为对用户而言,收单的结果代表最终的支付结果。比如用户支付回来后,支付引擎是成功的,但是收单平台因为已经订单过期关闭,就会发起资金退回操作,这样收单平台的订单实际是没有支付成功的。就会提示用户:"订单已关闭,如果已经扣款,支付款项预计在15个工作日内原路退回。"

3.4. 收银核心系统架构

提供给用户有多种支付方式:卡、余额、网银等。

收单产品主要包括:标准收银台,前置收银台,扫码付等。其中标准收银是由支付平台提供,需要跳转到支付平台,而前置收银台是直接嵌入到商户收银台里面完成支付。

核心服务包括:支付咨询、支付受理、风控挑战并支付等。

外部依赖主要有:会员、商服、卡中心、风控、渠道网关、支付引擎等。

3.5. 收银核心领域模型

3.6. 常见支付方式

快捷支付

通过在支付系统中提前绑定银行卡信息,快速完成支付交易,不需要每次都填写完整的卡详情。

代扣/协议支付

个人授权商户直接去支付平台或银行进行扣款,不需要用户参与支付过程。比如水电煤代扣,滴滴打车代扣。

卡支付

使用信用卡或借记卡支付。

网银支付

需要跳转到银行提供的支付页面,输入银行账户信息进行支付。

VA支付

Virtual Account。虚拟账户是银行临时生成的一个账户,与用户和订单临时关联。一般在东南亚的支付场景,或者国际收款场景下使用得比较多。

东南亚很多人没有银行卡,但又要在线买东西,就可以临时生成一个VA。以支付流程为例:用户选择某个银行的VA支付方式,支付系统调用银行接口,先为用户订单生成一个VA号,用户拿着VA去钱下ATM机转账,银行收到钱后,通知支付系统,支付系统再通知商户,商户给用户发货。

OTC支付

Over-the-Counter。柜台支付。一般指大型连锁线下零售商提供的支付能力,比如7-11或肯德基提供的支付能力。整体流程和VA很像。区别在于VA通常指银行提供的。

同样以支付流程为例:用户选择某个OTC服务提供商的OTC支付方式,比如7-11,支付系统调用7-11接口,先为用户订单生成一个OTC码,用户拿着OTC码去钱下7-11柜台拿现金充值,7-11收到钱后,通知支付系统,支付系统再通知商户,商户给用户发货。

第三方钱包支付

非银行机构提供的在线支付服务。比如支付宝、微信支付,国外的PayPal等。

余额支付

使用账户余额进行支付。

正扫

商户生成二维码,用户扫商户二维码。

反扫

消费者生成二维码,商户扫消费者的二维码。

4. 支付引擎:交易的行动派

一旦收银核心完成它的前期准备工作,支付引擎就像一位敏捷的忍者,悄无声息地完成了资金的转移。它的行动快速且精准,决不允许出现任何纰漏。

简单地说,支付引擎就是做资金账户的转移,所以有些公司也称为资产交换 。同时支付引擎处在支付系统的核心位置,所以有些公司也称为支付核心 。另一方面,支付引擎封装了多种支付能力,比如余额、外部渠道、营销等,所以有些公司也称为统一支付

4.1. 支付引擎在支付系统中的位置

支付引擎在支付系统中处于核心地位,所有的资金操作的信息流都会经过支付引擎,包括支付、退款、撤销、提现等。

4.2. 资产交换

对于支付引擎来说,最核心的能力就是资产交换:根据指令把资产从一个账户交换到另外一个账户

比如支付,那就是把用户账户的钱交换到商户账户。退款就是把商户账户的钱交换到用户账户。提现就是把用户或商户在支付平台账户余额的钱交换到用户或商户在外部银行账户。

4.3. 驱动记账

支付引擎除了做信息交换,还需要调用账务进行记账。

4.4. 支付引擎系统架构

支付引擎对外提供:支付、退款、撤销等基础的服务。

在资金交换层面,只有资产的冻结、解冻,扣减、增加。把变化的部分和不变的部分抽取出来。

资产对接只有两在类:内部资产和外部资产。内部资产包括:余额,内部营销资产。外部资产包括:外部银行卡、外部第三方钱包等。

4.5. 支付引擎领域模型设计

上面的是业务单据,包括:支付、退款、撤销等。

下面是交换单据,包括:交换明细,付方资产,收方资产等。

4.6. 支付引擎状态机设计

4.6.1. 支付总单

4.6.2. 普通支付单

4.6.3. 预授权单

4.6.4. 请款单

5. 结束语

在数字支付的舞台上,收银核心和支付引擎就像是经验丰富的舞者,他们的表演总是那么无懈可击,彼此依赖,共同庆祝每一次成功的交易。

每个公司对于收银核心和支付引擎的设计可能各有不同,但无外乎就是如何为用户计算出可用的支付方式,提交支付后做各种检查,然后用户的资产交换到商户的资产。

6. 传送门

支付系统设计与实现是一个专业性非常强的领域,里面涉及到的很多设计思路和理论也可以应用到其它行业的软件设计中,比如幂等性,加解密,领域设计思想,状态机设计等。

在《百图解码支付系统设计与实现》的知识宇宙,每一篇深入浅出的文章都是一颗既独立但又彼此强关联的星球,有必要提供一个传送门以便让大家即刻到达想要了解的文章。

专栏地址 百图解码支付系统设计与实现

领域相关

支付行业黑话:支付系统必知术语一网打尽

跟着图走,学支付:在线支付系统设计的图解教程

支付交易的三重奏:收单、结算与拒付在支付系统中的协奏曲

技术专题

交易流水号的艺术:掌握支付系统的业务ID生成指南

揭密支付安全:为什么你的交易无法被篡改

金融密语:揭秘支付系统的加解密艺术

支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石

避免重复扣款:分布式支付系统的幂等性原理与实践

相关推荐
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
Lx3522 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小池先生2 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
百罹鸟2 小时前
【vue高频面试题—场景篇】:实现一个实时更新的倒计时组件,如何确保倒计时在页面切换时能够正常暂停和恢复?
vue.js·后端·面试
小蜗牛慢慢爬行3 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10434 小时前
java web springboot
java·spring boot·后端
小扳5 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
龙少95436 小时前
【深入理解@EnableCaching】
java·后端·spring
溟洵7 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql