支付核心系统简介

斗转星移,物是人非,跨境支付方兴未艾。故纸堆边,人道是,行业知识深似海。键盘敲响,思绪飞扬,代码卷起千层循环。堆栈溢出,一屏前多少豪杰。

遥想入职当年,西装革履正青春。文档堆中,苦读间,晦涩难懂似迷雾。多少前辈,今何在?星辰大海俱往矣。

蓦然回首,已然三十五,归往何处。岁月如梦,一键盘还敲晨月。

某团的:

某东金融的:

某蚁金服的:

下面描述的概念大部分做了极致简化,只是用于入门,对于理解概念应该是够用的。真实的实现会复杂非常多。

这些概念如同支付核心系统拼图的一些小碎片,串起这些小碎片,就是一个完整的支付系统大图。

另:后面的描述中,经常混着用“支付系统”、“支付平台”,“支付机构”,“收单机构”,本质是一个东西。在内部来说,就是一个支付系统,但从和外部机构交互来说,就是一个支付平台。对用户来说是支付,对商户来说就是帮商户收单。

说明:

如果换成时序图,如下:

我们以最典型的电商购物举个例子(只是举例):小明使用PayPal在拼多多电商(海外)通过多多钱包(海外)支付了50美金。

经过简化后的交互图如下:

在支付流程中,就是商户委托收单机构(支付平台)把用户的钱收回来,然后再把钱结算给商家。

下面以典型通过外部渠道的卡支付为例说明。

渠道路由核心作用是当有多个渠道同时满足业务诉求时,综合支付成功率、支付成本、用户体验、渠道状态等多种因素挑选出最优的一条渠道。具体如下:

金融机构的记账一定是基于复式记账法。下面以用户通过支付平台使用银行支付500块为例做个简要说明。

假设:支付平台使用CMB做为收单行,在CMB开设有备付金账户。

涉及的支付平台内部账户:

账户类型

账户

备注

借记账户

应收-渠道-CMB

应收归属借记账户

贷记账户

应付-过渡-网关过渡户

应付-平台托管-商户待结算

应付-平台托管-商户余额

手续费收入-商户-消费

应付归属贷记账户

手续费意味着所有者权益增加,归属贷记账户

记账步骤:

阶段

操作账户

金额

第一步

资金从渠道到网关过渡户

借:应收-渠道-CMB

贷:应付-过渡-网关过渡户

500

第二步

扣除手续费

借:应付-过渡-网关过渡户

贷:手续费收入-商户-消费

10

第三步

网关过渡户到商户待结算账户

贷:应付-平台托管-商户待结算

490

第四步

结算给商户

借:应付-平台托管-商户待结算

贷:应付-平台托管-商户余额

【借记类】账户:资产,应收款等;

【贷记类】账户:负债,所有者权益,应付款等;

【借记类】账户(如资产,应收款),【增加】为【借】,【减少】为【贷】;

【贷记类】账户(如负债和所有者权益,应付款),【增加】为【贷】,【减少】为【借】;

复式记账法定义:对每项经济业务按相等的金额在两个或两个以上有关账户中同时进行登记的方法。

记账原则:有借必有贷,借贷必相等。

记账依据:会计恒等式:1.资产=负债+所有者权益;2.利润=收入-费用。

账户:具有一定格式和结构,能够用来连续、系统、全面的记录反映某种经济业务的增减变化及其结果。

科目:同类财务交易的分类,比如资产、负债、所有者权限、收入或费用等都属于科目。一般科目会分为多级。

账户和科目的区别:科目只有名字,账户包括结构和格式,每个账户对应一个特定的科目。

在账务系统中,通常包含以下几种账户类型:

DR:用户余额(负债类账户)100

CR:提现过渡户(负债类账户)100

一般来说,客户账户的记账需要是实时的,比如用户充值、提现,商家提现,用户退款等。

这些账户如果不做实时记账,一来有损用户体验,二来有资损风险。比如用户充值100块,如果延时不到账,用户可能会投诉。如果提现不实时记账,用户有可能重复提现成功。如果退款不实时记账,有可能在退款场景下被透支。

假设记账需要几十毫秒(数据库性能决定的),一个账户最高也就只支持几十个TPS的记账请求,对于一些高并发的账户(也称为热点账户)一定是性能不足的。这个时候一般使用缓冲记账,以提高性能。开通缓冲记账的,通常是内部账户或允许商户透支的流出场景。

缓冲记账通常就是先记录流水,然后起定时任务去捞取流水,汇总后进行记账。前提是一定要做好资损防控。

除了缓冲记账外,还有拆分账户的方式来解决热点账户问题。

会计科目就是把会计要素进行分类,比如资产、负债等。通常都会有多级分类。

会计科目示例:

有了账户和会计科目,发生一笔交易时,如何让系统自动去记账?这个是记账方案做的事。其中一个解决方案就是给不同的交易场景制定不同的交易码,通过交易码来驱动记账。

下面是一个典型的支付系统的记账方案示例。

所谓日切,简单理解就是切换到下一个会计日。主要做的工作:

日切试算平衡核心逻辑:

对账一般有几种结果:

第一层是信息流明细对账。我方流水和银行清算文件的流水逐一核对。可能会存在长短款情况。

第二层是账单对账。就是把我方流水汇总生成我方账单,然后把银行流水汇总生成银行账单,进行对账。可能会存在银行账单和我方账单不一致的情况,比如共支付100万,渠道分2次打款,一笔98万,一笔2万。

第三层是账实对账。就是我方内部记录的银行头寸和银行真实的余额是否一致。可能存在我方记录的头寸是220万,但是银行实际余额只有200万的情况。

我们通常说的记账,哪怕是一笔简单的支付,也会有多次记账。具体在什么节点记什么账,一般由财务人员决定。

下面是一个典型的使用银行通道进行支付的记账,会涉及网关过渡户,渠道待清算,商户待结算,手续费,银行头寸等多个内部户。

商户结算和用户支付是两个独立流程。

以典型的商户结算到卡记账为例,通常涉及商户待结算户,网关过渡户,渠道应清算,渠道已清算,银行头寸等内部户。

所谓产品架构图,简单的理解,就是站在产品角度,提供什么样的服务能力。下面是一个典型的支付系统的产品架构图。实际实现时差异会很大,尤其是上面的产品或应用层,有很多机构为特殊的行业提供一些特殊的能力,比如携程的支付就会有航空方面的B2B业务。但基础的能力基本也就这些。

跳过几个支付公司,这些基础的概念在几家公司都差不太多,区别是底层技术实现。比如RPC框架,数据库,业务流程,部署架构等。

主要对接商户,比如下单、支付等接口入口。通常要求有比较高的安全性。部分公司可能会把移动端网关、PC门户网关、商户通知等能力集成在开放网关,也可能会单独拆出部署。

负责把商户的单收下来,并给商户发起结算。承担的收单产品包括有:线上收单,线下收单,担保交易、即时到账等,每个公司的商业策略不同,开出的收单产品会有差异。

有些公司把结算划到出款中心,对接银企直连的渠道。

承担无买卖标的的纯资金转移能力。典型的有:充值、转账、提现、代发。和支付的区分在于支付是有买卖标的,而资金产品没有。也就是在系统中没有买卖记录发生,但在线下可能有。

资金产品一般需要独立的牌照。

渲染可用支付方式。包括查询账户是否有余额,查询营销是否有营销券,查询渠道网关是否有可用的外部渠道,最后组合成可用支付方式,供前端渲染。

收银核心就像一个大内总管,收到请求后,找商户平台核实身份,找合约平台核实权限,找会员平台核实用户身份,找收单看一下这笔单是否可以继续支付,找账务中心获取余额信息,营销看看有没有可用的券,找渠道网关看看没有可用的渠道,找额度中心看看是否超限额了,找风控问一下当前支付是否安全,找会员平台校验支付密码......

负责真正的扣款或转账。有些公司叫支付核心。

如果是余额就调账务扣减余额,如果是红包就调营销做核销,如果是外部银行通道就调渠道网关。

负责去外部渠道扣款。通常还会提供渠道路由、渠道咨询等能力,做得细的公司可能会把渠道核心和报文/文件网关单独拆出来。其中渠道核心就提供渠道路由、渠道咨询、渠道开关等服务,报文/文件网关负责报文转换、签名验签等。

管理商户的入驻签约、KYB、交易管理等。

管理对外提供的产品能力,比如快捷支付,代扣等。一般大的支付系统才会独立成一个子系统。

负责账户开立,记账等。

会计科目管理、分录管理、日切管理等。

监管报表有时候也放在这里,有些公司也会独立出去。

很多集团公司往往有一套独立的专业财务系统,这个时候往往需要会计中心做完日切后,要把记账信息合并到集团公司的财务系统中去,简称并账。

负责明细对账和资金对账。

提供满减、红包等营销工具。

针对账户和交易,提供实时、离线风控,控制交易的风险。反洗钱、反欺诈是基本要求。

通常各公司对风控规则看成是机密,研发也可能看不到运营配置的规则。经常看到有网友问:“有xx公司的人在吗?我有xxx场景下的支付总是提示风控不过,是否知道是什么原因,怎么才能通过?”,完全是浪费口舌,谁会对外公布自己的风控规则,让人去钻空子呢?

订单管理、渠道管理、产品管理等综合运营工具。

主要用于数据汇总和分析。当前各支付公司基本都是分布式部署N多个应用,数据都在散落在各子系统中,需要汇总到数据平台用于经营分析。

负责管理用户的绑卡信息。需要经过PCI认证。

累计用户、商户的额度,通常有日、月、年,单卡等各种分类。

负责外汇报价和兑换。

一些跨境支付公司,在多个国家多个银行有头寸,各头寸之间经常需要做流动性管理,提高资金利用率。

毕竟在国外不需要把备付金强制存到央行还不给利息。当资金量大的时候,这笔收益可不少。

负责差错处理。比如渠道退款失败(银行账号销户,过了银行的退款有效期等),需要通过其它的方式退给用户。

处理用户的拒付和举证。在跨境支付场景下,信用卡用户联系发卡行说卡被盗刷或商品没有收到,或商品有问题等,拒绝支付给商户。

国内基本没有看到拒付场景。

一般来说,技术风险主要包含稳定性和资损两个方面。其中稳定性风险就是大家经常说的几个9,比如99.999%可用,就是5个9。资损风险就是平台或用户的资金损失。

虽然资损也是技术风险的一种,但是因为对于专业的持牌支付公司来,资损是一种非常严重的事故,容易引发客诉、网络事件、甚至监管介入,所以又较一般的风险更为严重,常常把资损防控单独拿出来说。

技术风险体系过于庞大,这里只谈几点通用知识。

我们通常先需要知道风险来自哪里,才知道如何去防控。而风险往往来自变化。举几个例子,抛砖引玉:

流量变化:大促场景下,流量会暴增。

代码变化:引入了新的代码。

业务变化:修改了业务流程,或引入了新的业务。

外部变化:外部新的攻击手段。

根据变化去应对风险。比如大促引入了流量变化,那就做压测、扩容、限流、降级非核心业务等应对。比如原来只有支付,这些有了用户提现,针对用户提现,内部多个子域可能状态/金额不一致,和银行渠道的状态/金额也可能不一致,那就加入各种对账手段,以及对应的应急预案。

对账是资损防控中最效的手段之一。

前面讲过的三层对账主要是和银行渠道对账,除了这个之外,一般的支付平台还会有内部系统之间的两两核对,这种核对主要是信息流层面的核对,主要核对状态、金额的一致性。

幂等是针对重复请求的,支付系统一般会面临以下几个重复请求的场景:

幂等解决方案

所谓业务幂等,就是由各域自己把唯一性的交易ID作为数据库唯一索引,这样可以保证不会重复处理。

在数据库前面可以加一层缓存来提高性能,但是缓存只用于查询,查到数据认为就返回幂等成功,但是但不到,需要尝试插入数据库,插入成功后再刷新数据到缓存。

为什么要使用数据库的唯一索引做为兜底,是因为缓存是可能失效的。

在面临时经常有同学只回答到“使用redis分布式锁来实现幂等”,这是不对的。因为缓存有可能失效,分布式锁只是用于防并发操作的一种手段,无法根本性解决幂等问题,幂等一定是依赖数据库的唯一索引解决。

大部分简单的支付系统只要有业务幂等基本也够用了。

分布式事务是个好东西,但是复杂度也高,还经常出现所谓的事务悬挂问题,且虽然各家都号称简单易用,对业务代码侵入少,但事实并非如此。

所以我个人更倾向于避免使用分布式事务解决方案,而是采用最终一致性来解决。对大部分中小公司来说,最终一致性已经够用。

对于研发经验不足的团队而言,经常会犯以下几种错误:

带来的后果,通常就是资金损失,再细化一下,最常见的情况有下面3种:

最佳实践:

数据库一般都会设计一个自增ID作为主键,同时还会设计一个能唯一标识一笔业务的ID,这就是所谓的业务ID(也称业务键)。比如收单域的收单单号。

也有人采用所谓雪花算法,但其实不适用于支付场景。

下面以32位的支付系统业务ID生成为例说明。实际应用时可灵活调整。

第1-8位:日期。通过单号一眼能看出是哪天的交易。

第9位:数据版本。用于单据号的升级。

第10位:系统版本。用于内部系统版本升级,尤其是不兼容升级的时候,老业务使用老的系统处理,新业务使用新系统处理。

第11-13位:系统标识码。支付系统内部每个域分配一段,由各域自行再分配给内部系统。比如010是收单核心,012是结算核心。

第16-17位:机房位。用于全球化部署。

第18-19位:用户分库位。支持百库。

第20-21位:用户分表位。支持百表。

第22位:预发生产标识位。比如0代表预发环境,1代表生产环境。

第23-24位:预留。各域根据实际情况扩展使用。

第24-32位:序列号空间。一亿规模,循环使用。一个机房一天一亿笔是很大的规模了。如果不够用,可以扩展到第24位,到十亿规模。

状态机,也称为有限状态机(FSM,FiniteStateMachine),是一种行为模型,由一组定义良好的状态、状态之间的转换规则和一个初始状态组成。它根据当前的状态和输入的事件,从一个状态转移到另一个状态。

下图就是收单子域设计中交易单的状态机设计。

从图中可以看到,一共4个状态,每个状态之间的转换由指定的事件触发。

常见代码实现误区

经常看到工作几年的同事实现状态机时,仍然使用ifelse或switchcase来写。这是不对的,会让实现变得复杂,且容易出现问题。

甚至直接在订单的领域模型里面使用String来定义,而不是把状态模式封装单独的类。

还有就是直接调用领域模型更新状态,而不是通过事件来驱动。

限于篇幅,这里就不给正确的示例了。有兴趣的可以去网上看看,良好的示例有很多。

我们要明白日志是用来做什么的。只是先弄明白做事的目的,我们才能更好把事情做对。在我看来,日志有两个核心的作用:1)监控,诊断系统或业务是否存在问题;2)排查问题。

对于监控而言,我们需要知道几个核心的数据:业务/接口的请求量、成功量、成功率、耗时,系统返回码、业务返回码,异常信息等。对于排查问题而言,我们需要有出入参、中间处理数据的上下文、报错的上下文等。

接下来,基于上面的分析,我们就清楚我们应该有几种日志:

对个人和商户/渠道的敏感信息进行安全存储。

确保客户端与支付系统服务器之间、商户系统与支付系统之间、支付系统内部服务器与服务器之间、支付系统与银行之间的数据传输安全。这包括采用加密技术等措施来保障数据传输过程中的安全性。

确保交易信息的完整性和真实性,防止交易信息被篡改或者被抵赖。一笔典型的交易,通常涉及到用户、商户、支付机构、银行四方,确保各方发出的信息没有被篡改也无法被抵赖。

识别并防止欺诈交易,包括套现、洗钱等违规操作,以及通过识别用户信息泄露和可疑交易来保护用户资产的安全。这一方面通常由支付风控系统负责。

防范DDoS攻击,确保支付系统的稳定运行和服务可用性。通过部署防火墙、入侵检测系统等技术手段,及时发现并应对可能的DDoS攻击,保障支付服务的正常进行。

支付安全是一个综合性的系统工程,除了技术手段外,还需要建立健全的安全制度和合规制度,而后两者通常被大部分人所忽略。

下图是一个极简版的支付安全大图,包含了支付安全需要考虑的核心要点。

哪种场景下需要加密存储,加密需要使用什么算法,密钥长度最少需要多少位,哪些场景下需要做签名验签,这些都是制度就明确了的。制度通常分为行业制度和内部安全制度。行业制度通常是国家层面制定的法律法规,比如《网络安全法》、《支付业务管理办法》等。内部安全制度通常是公司根据自身的业务和能力建立的制度,小公司可能就没有。

1)敏感数据安全存储。

2)交易安全传输。

3)交易的完整性和真实性。

4)交易的合法性(无欺诈)。

对应的技术手段有:

所谓提纲挈领,就是先掌握核心主干,有了这个前提,再去深入了解细节,才不至于“乱花渐欲迷人眼”,解决问题时才能如庖丁解牛,行云流水。伟人邓公提倡的“抓住主要矛盾”,也是这个道理。

犹记得N年前那天早上,我穿上最帅的衬衣、笔挺的西装裤、贼亮的皮鞋,推开房门,清风徐来,朝阳灿烂,一如我的心情,意气风发。那是我进入正值蓬勃发展的第三方支付行业的第一天。

入职当天老板扔了很多文档给我,看了一周,没看懂。想起老祖宗说的“读书百遍,其义自见”,继续苦读一周,仍然是雾里看花。不幸中的万幸,是挺过了试用期。直到多年后的一天,整理老旧硬盘的资料,才发现一方面是自己愚钝,另一方面也是那些资料写得过于晦涩难懂。于是萌发一个念头:要不我自己也总结总结?这是其中的一篇。

斗转星移,外面的阳光依然灿烂,衬衣、西装裤、皮鞋却已不知何处去了。

THE END
1.网关和路由器的区别网关和路由器的区别:本质区别、使用方式、功能不同。网关和路由器的区别 本质区别 网关这种设备主要是用来连接两种不同的网络。同时,网关还能够同时与两边的主机之间进行通信。但是两边的主机是不能够直接进行通信,是必须要经过网关才能进行通信。网关的工作是在应用层当中。路由器是属于网络层设备,通常是以包为单位https://baijiahao.baidu.com/s?id=1738322541857035497&wfr=spider&for=pc
2.网关离线是什么意思爱问知识人网关离线是指在网络连接中,将该连接的ip和dns设为自动获取。网关就是一个网络连接到另一个网络的关口https://iask.sina.com.cn/b/6ipbcouAGYQ.html
3.设备离线22什么意思60秒读懂世界设备离线22是什么意思?全面解析设备离线问题及解决方案 本文将详细解析设备离线22的含义,并针对不同场景下的设备离线问题提供相应的解决方案,帮助您快速恢复设备在线状态。 一、设备离线22的含义 设备离线22,通常指的是设备在网络连接方面出现了问题,导致设备无法正常连接到网络。其中,“22”可能代表一个特定的错误代码https://blog.yyzq.team/post/462170.html
4.边缘计算网关是什么意思边缘计算网关作用有哪些→MAIGOO知识边缘计算网关是什么意思 边缘计算网关作用有哪些 摘要:网关是网络互连设备,边缘计算网关就是用于边缘计算的中间节点,可以将传统中心化的数据处理过程移到离用户更近的地方完成,还可以通过标准容器在边缘计算网关设备上运行,具有数据采集、数据处理、数据存储、保障数据安全、远程管理、应用开发等作用,广泛应用于物联网、https://www.maigoo.com/goomai/301102.html
5.EasyNTS上云网关断电重启后设备离线是什么原因?EasyNTS上云网关是我们推出的一整套智能云组网产品,包含组网运维功能和多协议视频流拉转推功能。根据需求分为独立的软件产品、软硬一体的硬件产品。它可以解决内网设备上云、内网业务上云、资源数据分发、设备集中管理和低成本管控与运营,建立人与设备、设备与设备、网络与网络的安全连接。 https://blog.csdn.net/weixin_43194037/article/details/126181894
6.服务器处于离线状态什么意思?Worktile社区服务器处于离线状态什么意思 当服务器处于离线状态时,意味着该服务器当前无法与网络连接或未启动,无法提供网络服务。离线状态可能由多种原因引起,例如服务器硬件故障、网络连接问题、操作系统崩溃等。在服务器管理中,离线状态通常表示服务器无法正常工作,需要进行故障排除和修复。https://worktile.com/kb/ask/1832440.html
7.移动互联网时代的信息安全与防护超星尔雅学习通网课答案1、【单选题】伊朗核设施瘫痪事件是因为遭受了什么病毒的攻击?() A、埃博拉病毒 B、熊猫烧香 C、震网病毒 D、僵尸病毒 2、【单选题】震网病毒攻击针对的对象系统是()。 A、Windows B、Android C、ios D、SIMATIC WinCC 3、【单选题】美国“棱镜计划”的曝光者是谁?() http://xuzhou.ehqc.cn/html/95_13.html
8.路由器一直显示离线是什么问题路由器一直显示离线是什么问题 路由器一直显示离线可能是以下几种原因: 1. 路由器设置问题:可能是路由器的设置有问题,例如IP地址、子网掩码、网关等设置与网络配置不匹配,导致路由器无法连接到互联网。 2. 路由器故障:可能是路由器硬件出现故障,导致其无法正常连接到互联网。可以尝试重新启动路由器或者进行硬件故障排https://www.zcbm580.com/pos/6qvjn90qe.html
9.工业路由器显示离线是什么原因?如何解决?问题一:外网设置好了,路由器怎么显示离线? 解决:首先询问了一下客户那里设备的接线情况,客户回复接线图片,查看图片设备接线正确无误(lan口接电脑、wan口连接网线),查看网络设置—外网设置,看到客户这里连接类型选择了static ip 改为dhcp,保存并应用后设备在线 https://www.baimatech.com/bzwd-2022-12-12-02.html
10.有大佬知道米家全屋智能开关和灯泡都离线了是什么情况吗NGA玩家今天这个点好像都离线了,服务器炸了,如果有中枢网关蓝牙mesh设备都不会抽风。只是因为服务器炸了手机https://bbs.nga.cn/read.php?tid=39359009
11.网关服务器的意思网关华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:网关服务器的意思。https://support.huaweicloud.com/topic/964505-1-W
12.DataStudio数据服务API网关认证中心数据可视化离线另外自己开发调度引擎和基于Python的执行引擎。使用Python开发执行引擎是数据工厂的离线分析功能的重要核心构建。这使得用户可以在DataStudio中使用Python基于执行引擎的SDK进行脚本开发,调用数据访问接口,实现循环、异步执行SQL、引入DataFrame框架等高级离线分析功能成为可能。https://www.jianshu.com/p/cacdcf5ec088
13.智能控制技术范文12篇(全文)由于采集的数据仅覆盖装置所在地附近的区域,无法推算整个系统的运行状态,故如何将电力系统暂态稳定紧急控制模式由现有的“离线计算策略表,实时故障匹配”模式向“在线预决策、实时匹配”的新控制模式发展以及原系统中出现的一些问题与其在新系统中相应的解决方案必须进行深入的研究。https://www.99xueshu.com/w/ikeyve5gy2gl.html