详解第三方支付之无卡支付底层系统设计

详解第三方支付之无卡支付底层系统设计

2016-03-27 pay-dog 支付狗

上篇文章从通道类别、通道接口、通道特性三方面介绍了无卡通道,支付公司的无卡支付底层系统正是基于上述认识进行设计的。今天详解第三方支付之无卡支付底层系统设计。一般来说,所谓无卡支付底层系统,包括两个大部分:无卡通道接入层、无卡通道路由层;又可从中拆分出相对独立的卡通道数据、通道配置、路由规则这三部分。如下述无卡支付业务结构图中虚框所示。



一、无卡通道接入层

支付公司的无卡通道接入层有着这样的职责:

接入通道,并向路由层提供通道级别的标准服务。


换言之,无卡通道接入层应当屏蔽不同通道的同类型接口差异。譬如,同为支付接口,不同无卡通道提供的获取支付结果的方式,分为:同步返回、异步通知、主动查询等方式,这种种不同,无卡通道路由层及之上的业务系统都应该看不到。

1.1

接入层-模块划分

为了提供通道级别的标准服务,无卡通道接入层如下设计:


1.2

接入层-鉴权

鉴权服务模块封装无卡通道的鉴权类接口。上篇文章提到,不同无卡通道提供的鉴权类接口是不一样的,包括卡信息验证、签约、解约、银行短验确认等。这些差异在接入层将被屏蔽,给路由层及更上层业务系统提供标准的鉴权服务。接口的关键入参与出参如下:


1.3

接入层-支付

支付服务模块封装无卡通道的支付类接口。屏蔽无卡通道的差异包括支付结果的获取方式(同步返回、异步回调、主动查询等)等。由于支付的时效性并不总能保证,因此向上层系统提供支付结果查询接口或者支付结果的回调。接口的关键入参与出参如下:


1.4

接入层-预授权

预授权服务模块封装无卡通道的预授权类接口。从上篇文章已经可以看到,无卡通道可提供的预授权类是非常丰富的,包括申请、追加、撤销、扣款、冲正等。支付公司根据自身业务的需求对接部分接口即可。下表列出了主要的预授权类接口的关键入参与出参如下:


1.5

接入层-退款

退款服务模块封装无卡通道的退款类接口。退款是基于原有支付扣款订单的相反方向的操作。其接口相对比较简单,如下表所示:


1.6

接入层-对账

对账服务模块封装无卡通道的获取对账文件接口,一般来说,支付公司与通道间的对账都是通过获取通道提供的各类对账文件来进行的。具体的操作则是:接入层获取对账文件接口定时地将各个通道的对账文件下载并提供给专门的对账系统;对账系统将自动地基于通道的对账文件与支付公司自身的交易数据(也由接入层提供)进行对比;如果发现差异则需要结算人员找出差异订单并与通道方沟通解决。对账文件获取接口的关键入参与出参如下:



二、无卡通道路由层

无卡通道路由层是业务与通道的适配器,它的职责是:

根据业务需求自动筛选通道,向上提供银行级别的服务。


换言之,上层业务无需知晓通道概念。对于上层业务来说,这意味着不需要关心个别通道的维护,如果有备份通道可用的话。

2.1

路由层-模块划分

路由层提供的是路由服务,因而它只提供有路由需求的接口,包括鉴权请求、解约请求、支付请求、预授权请求。这与接入层各模块提供的接口相比,少了很多。而缺少的那些接口,都是基于原订单请求,无需路由。也可以在路由层简单封装这些基于原订单请求的接口提供给上层业务系统调用。


2.2

路由层-鉴权

路由层的鉴权服务模块,对应于接入层的鉴权服务模块。区别在于后者提供的是通道级服务,而前者提供的是银行级别的服务。具体而言:

  1. 路由层的鉴权请求总是先调用卡通道数据服务,以确认当前请求鉴权的卡信息是否已经鉴权成功过,避免重复调用浪费成本,或者发现当前卡信息不相符时需要先解约再签约;

  2. 路由层的鉴权请求经过路由规则筛选出最终的鉴权通道,也可能需要同时调用多个通道的鉴权才满足交易层对卡信息的验证要求,甚至在允许的情况下可同时调用所有符合硬性要求的鉴权通道。


其接口入参与出参如下表所示:

2.3

路由层-支付/预授权

支付和预授权具有比较一致的特征,因此放在一起讲解,它们具有下述特点:

  1. 支付请求(和预授权请求)总是先调用卡通道数据服务,以获得签约号等卡信息;

  2. 支付请求(和预授权请求)一般不对底层通道进行组合使用,原因是支付过程远较鉴权来得复杂,如果因为限额等原因将一笔支付拆成两笔,可能出现其中一笔成功另一笔掉单的情况,增加后续差错处理的难度;

  3. 在耗时允许的情况下,路由层可以在一次支付失败的情况下,换走另一个通道再进行一次支付,通过此法提升成功率。


其接口入参与出参如下表所示:



三、卡通道数据系统

卡通道数据既可以放在无卡通道接入层系统中,也可放在无卡通道路由层系统,亦可独立一体。从职责上看,卡通道数据系统负责:

存储卡信息-通道的鉴权结果并提供查询服务。


它既提供查询服务,也提供数据保存服务(可由接入层负责保存,也可由路由层负责保存)。

3.1

卡通道数据-内容

先解释何为卡信息。此处的卡信息包括:

卡号、签约号、证件号、证件类型、姓名、手机号、有效期、CVV2、取款密码


其中后三项敏感卡信息按央行规定是不允许存储的,实际是否存储取决于各家支付公司对便捷性与安全性的权衡。现实情况是:只要不出大规模风险事件(如携程泄露用户银行卡信息事件),外界没人知道一家公司是否存储敏感卡信息。


卡通道数据则包括:

卡号、通道、签约号、证件号、证件类型、姓名、手机号、有效期、CVV2、取款密码,鉴权结果,鉴权时间


其中卡号、通道是联合主键。此数据标识的是,一份卡信息是否被某个通道认可,其中“鉴权结果”既包括无卡通道鉴权类接口的结果,也包括那些支付过程进行卡信息验证的支付类接口的鉴权结果。

3.2

卡通道数据-意义

记录卡通道数据很重要,它有下述作用:


3.3

卡通道数据-接口

卡通道数据系统对外提供两个接口,其关键入参与出参如下表:



四、通道配置系统

通道参数(或属性)配置的职责是:

清晰标记每个无卡通道的各项参数。


这些被标记的参数是在调用无卡通道接口时需要的,或者是在无卡通道路由层路由时需要的。

4.1

通道配置-模块划分

参数大致分为两类:对接所需,路由所需;因而此部分可分为两大模块。


4.2

通道配置-对接专用参数

至少有如下表中的四类参数是在对接无卡通道时需要使用到的。


4.3

通道配置-路由专用参数

路由参数配置模块,其职责是:配置所有通道与路由有关的属性。所有与通道有关的属性,只要对路由层选择通道有影响的,都应在通道属性配置服务模块进行配置,以便路由层基于具体交易订单的要求与每个无卡通道的属性进行路由。


为了更清晰地向路由层提供服务,此模块定义的通道往往是逻辑通道,而非真实通道。举例而言,某通道同时支持多家银行,但每家银行的限额、行业等不相同,这种情况下,就可以且需要按银行拆分此真实通道为多个逻辑通道,以便配置该通道不同银行的限额、行业等参数。


用于路由的通道属性大致可以依序分为以下几类:


说明:

  1. 必需的离散属性:指每笔支付订单必定是某种属性,如必定是某个卡种,而不可能是两个或两个以上的卡种

  2. 非必需的离散属性:指有的支付订单可能并不需要关心的参数,如有的支付订单可能不关心是否银行下发短验,而另一些支付订单则必须银行下发短验,或者不能接受银行下发短验


五、路由规则配置

路由规则是实现路由层职责的核心所在,路由层依赖路由规则筛选通道。路由规则配置的职责是:

实现路由规则的可配置化及其与具体通道属性的分离。


且路由规则应当是灵活可配置的,灵活性应当类似风控规则,做到规则与具体数据的分离。所谓路由,就是筛选或决策过程;路由规则规范了如何进行筛选过滤。

5.1

路由配置-规则列表

路由规则从前到后可以设计如下所示,一次路由总是先走所有硬规则再走软规则。如果经过硬规则之后留下不止一个通道,则再依次通过软规则,直到只剩下一个通道;相反如果在进行硬规则路由过程中就把所有通道均过滤掉,没有任何通道符合硬规则,只能向上层业务返回路由失败。


5.2

路由配置-如何快速路由

路由既要满足业务要求,又要高效,因为通道尤其是逻辑通道的数量是非常大的,可能多得数百甚至上千条逻辑通道,必须在短时间内筛选出符合要求的最优通道。那么如何能做到快速路由呢?这是一个偏技术的命题,pay-dog也顺便聊一聊。


提速方法一:路由规则的顺序很重要。路由规则除了先硬规则后软件规则之外,在硬规则序列中,还应将有助于快速缩小范围的路由规则放在前面。


提速方法二:基于离散属性的硬规则,可采用位运算。对所有硬规则而言,其实质是在做判断题,判断题的两端分别是交易要求和通道属性。学过计算机的读者应该知道,最快速的运算是位运算。当然,将判断题通过位运算来进行的前提是判断题的两端必须是离散数据。因此硬规则-离散属性部分,正是可以应用位运算来提升性能的地方。


以“银行”规则为例,通过编码,将每个银行赋以不同的二进制进位值。例如工行是1(二进制,下同),农行是10,中行是100,……,如果通道同时支持工行与农行,则其银行编码为11;假设一共20家银行,则通道的银行属性可以由一个20位二进制的数字来表示。交易要求的银行采用相同规则进行编码。于是,“银行”规则就可以通过交易银行编码与通道支持的银行编码进行位与运算进行,凡位与运算结果为0的通道则过滤,凡位与运算不为0的通道则保留。


其他离散属性可以做类似的编码规定。这样将判断均使用位与运算来进行,可达到提升性能的效果。整个运算过程如下图所示(假设路由规则为:交易类型、卡种、银行):



提速方法三:合并基于离散属性的硬规则。如果将所有基于离散属性的硬规则用到的离散属性进行拼接(可以提前一次性完成),就可以将多个规则合并为一个规则。从提速方法二推导出的提速方法三的过程如下图所示,整个过程只需4次位运算。



提速方法四:预存所有可能的交易要求对应的基于离散属性的硬规则结果。所有可能的交易要求就是提速方法三中合并的离散属性编码,一共有3(交易类型)*2(卡种)*20(银行)*10(行业)*3(授权-银行短验)*3(签约-银行短信通知)*3(支付-银行短信通知)*3(直连/间连)=97,200种可能。一旦预存,届时可一步到位得到结果。这种方式需要在新增通道或者变更通道路由参数时重新生成预存结果。


当然,路由层性能的提升还有很多方面,例如系统架构设计等。凡此种种,以及上述所谓提速方法,都让程序猿去考虑吧,产品狗不用操心。


六、总结

本文讲解了无卡支付底层系统的设计,包括:

  1. 无卡通道接入层:接入通道,并向路由层提供通道级别的标准服务;

  2. 无卡通道路由层:根据业务需求自动筛选通道,向上提供银行级别的服务

  3. 卡通道数据系统:存储卡信息-通道的鉴权结果并提供查询服务;

  4. 通道配置系统:标记每个无卡通道的各项属性;

  5. 路由规则配置:实现路由规则的可配置化及其与具体通道属性的分离


本文所讲述的无卡支付底层系统设计,同样适用于同时使用多家第三方支付服务的金融或电商公司,在金融或电商公司一般被称之为支付中心。下篇文章,pay-dog将讲解基于无卡路由层之上的鉴权绑卡业务系统的设计,敬请期待。

阅读 9
投诉

阅读更多

没有更多推荐了,返回首页