本文主要介绍下支付中路由系统的主要流程。
支付路由的作用
降低成本:越便宜越好;
提高用户体验:用户支付的越爽越好;越快越好;成功率越高越好。
确保有可用通道:多个选择,确保能完成支付。
初期
在自由微信或者支付宝支付渠道的情况下,我们可以直接在暴露出一些接口给使用方调用即可。这种方式的优势是简单快速,本地调用更加直接高效稳定。与此同时也会存在一些诟病:
- 业务系统与支付系统位于同一个系统,系统任何一次变更都会影响整个系统。
- 扩展性问题。接入新支付渠道,需要新暴露一个支付服务接口。业务系统需要改动代码。也就是说,业务系统承担路由系统的功能。
- 复用性。新支付渠道,其实除了与支付渠道交互相关代码之外,其他代码可以复用。
中期
由于各种支付限制和业务的发展,需要接入更多的渠道。
实际上支付系统一般需要对接多个支付渠道,一是为了保证系统的可靠性,不能因为单一渠道的问题影响整个支付系统。二是为了提高支付能力,不同渠道提供支付能力不同。三是为了降低支付成本。
当系统中接入了多个渠道的时候,为了可以正确选择支付渠道支付,因此就需要设计渠道路由系统。
从上图可以看到路由系统功能其实很简单,根据一定的规则分发支付请求到正确的渠道。
交易类型与支付渠道
支付方式与支付渠道的关系:
系统如果接入了多个渠道,那么对于一笔交易来说,将会有多个支付渠道可以扣款。
假设如下场景:在平台A下单购买一双鞋子200元,然后结算时在收银台中使用招行借记卡进行支付【已签约】。然后此请求最终提交到了支付系统扣款,对于路由系统来说,1⃣️首先需要获取到支持招行借记卡并且已经签约过的渠道列表,2⃣️然后从支持招行借记卡的渠道中挑选出来费率最低、成功率最高、限额范围内、并发量范围内的渠道,3⃣️最终如果还有多个渠道可以选择,就可以选择一个最近最近未使用过的,至此路由就完成了。最后向最终确定的渠道发起请求执行扣款。以上过程为简略版,省略了许多细节,不代表实际中就是这么简单。
通过上述的过程应该已经大概了解了路由的大致流程了吧。
路由层架构图
渠道
什么是渠道?
渠道是指可以进行账户操作的一些支付机构,包括但不限于银行,例如 银联、招行直连、快钱等等。
渠道的属性
编码:gh-kj-001
名称:工行协议支付
类型:协议,网银,打款
状态: 开启,关闭
所属银行: 工商银行
卡种:借记卡
其他
渠道属性的作用
渠道属性的一个关键用途就是路由选择的依据,路由的规则配置其实就是根据渠道属性去配置的,什么属性的渠道能用,什么类型的渠道属性不能用。
路由规则
路由规则就是支付请求来了筛选渠道的条件;比如那个银行的,什么卡等。路由最核心的是规则以及筛选模型。
路由规则主要分两类:
1. 分组规则
为了提升筛选效率,我们先对通道按照组合规则进行分组,分组规则需要的标识用户身份信息参数是上游请求方必填的,而关于卡片信息的一些参数是路由内部解析出来的。比如按照以下属性进行分组:
- 交易类型:支付、打款、签约
- 账户类型:对私、对公
- 卡种:借记卡、贷记卡
- 银行:工商银行、招商银行、北京银行等
2. 筛选规则
经过通道的分组筛选,最后确定了一个列表,然后再通过筛选规则筛选出需要的渠道道,比如以下筛选规则:
- 已签约渠道:选择已经签约过的
- 状态:开启
- 成本最低优先:选择成本最低的
- 成功率最高优先:选择最近成功率最高的
- 响应时间最小优先:选择最近响应最快速的
- 高权重优先:权重
- 优先级
- ……
路由分组规则
通过上述的分组规则和筛选规则,就可以得出筛选的规则树如下图:
例如支付请求为:支付-对私-借记卡-工行,那么就可以快速定位到一个渠道组了:[银联,工行直连,快钱]。
路由筛选规则
经过一系列筛选规则后筛选出一个渠道。
如果在筛选过程中发现自由一个渠道可选择,那么就直接使用当前渠道。
例如:用户签约了快钱和工行直连渠道。支付请求上送了 支付-对私-借记卡-工行,1000元。那么就可以根据路由分组规则定位到[银联,工行直连,快钱]渠道,,根据状态路由过滤出[工行直连],然后根据签约表过滤出[银联,工行直连],根据成本路由过滤出[工行直连],此时自由一个通道可用,就直接短路使用工行直连渠道发起支付请求。反之,如果在筛选过程中发现快钱和工行直连渠道的状态都是不可用时,就需要返回对应的code码,引导用户重新签约其它支付渠道。
至此简略版已描述完毕。
以上就是个人对于支付路由的一些理解和描述,其中大部分都非常粗略,但是整体的流程就是这个样子。企业中会对其做各种更加深入的细化和调整,不尽相同,还需适时调整。
如果有错误或不足的地方,请多多留言指正。