前言:   本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/

作者上来回顾了支付流程,

一 设计目标

支付路由在支付系统中的核心作用,除了本职工作路由外,还承担如下职责:

  1. 省钱,省钱,省钱,这是支付路由选择支付通道的最主要的规则。 哪个通道省钱,基本会优先考虑这个通道。
  2. 提升支付产品的QOS。这体现在系统的可靠性、稳定性、性能和可用性上。通过屏蔽掉无法连接、不稳定、性能低的通道来提升这些指标。
  3. 支持营销。通过优先选择有优惠活动的通道,可以帮助业务提升付费客户量。
  4. 降低运营成本。一个设计良好的支付路由,可以大大降低运营投入。

二 软件架构

支付路由并不会直接对接前端的支付产品或者后端的支付渠道,它是支付网关的一部分。如果是基于微服务的架构,支付路由作为一个独立的服务,被支付网关所调用。

三 计算因子

路由规则是支付路由的核心。在规则设置上,需要和公司的业务、支付服务的scope来综合考虑。 这里讲述的是通用的规则设计,供具体实现时参考。

产品类型 当然,路由时首选需要考虑渠道可以支持的支付产品。

费率 费率是路由最重要的一个指标。一般银行是按照额度来收费,部分是按照交易笔数来收费,复杂点的是阶梯收费,比如10万一个费率档次,100万一个费率档次。

优惠活动 银行、第三方支付为了延揽客户,经常也会提供一些补贴给对接的商户,对于使用该渠道的交易进行补贴。而优惠的策略也是多种多样。

交易限额 不同通道会限制每次交易的金额上限,以及针对每个账户每天的额度限制。超过这个额度,需要变换通道。

卡类型 通道支持的信用卡或者借记卡。

通道的QOS 掉单率、网络延迟以及接口能支持的TPS,是路由的一个重要衡量因素。

资金头寸 电商公司在银行或者第三方平台的资金头寸。如果资金头寸不足,则不能使用这个通道来执行。

(术语补充下解释:头寸指投资者拥有或借用的资金数量。 “头寸”一词来源于中国,银行里用于日常支付的“袁大头”,十个袁大头摞起来刚好是一寸,因此叫“头寸”。中国旧时指银行钱庄等所拥有的款项,收多付少叫多头寸,收少付多叫缺头寸,结算收付差额叫轧头寸,借款弥补差额叫拆头寸。
头寸就是资金,指的是银行当前所有可以运用的资金的总和。主要包括在央行的超额准备金、存放同业清算款项净额、银行存款以及现金等部分。头寸管理的目标就是在保证流动性的前提下尽可能的降低头寸占用,避免资金闲置浪费。)

到账时效 对于转账,资金什么时候到目标账户上,也是影响路由选择的一个因素。

商户类型 不同类型的商户可以选择不同的通道。 比如高性能、费率高的通道,预留给高级商户。

四 模块设计

支付路由从架构上来说,一般是作为支付网关的一部分。采用微服务架构时,路由模块作为一个独立的服务来部署,为支付网关所调用。所涉及的模块如上所示:

支付通道管理 提供通道支持的产品类型、费率等信息。

支付通道QOS监控 收集通道使用过程中的错误信息,接口延迟,超时情况等信息,用于统计QOS。

资金头寸管理 用于监控公司在各个支付通道上的头寸,并提供头寸的信息。

优惠活动

银行、第三方支付为了延揽客户,经常也会提供一些补贴给对接的商户,对于使用该渠道的交易进行补贴。而优惠的策略也是多种多样:

  1. 支付策略;针对使用该通道的所有支付进行补贴;仅针对首次使用该通道的用户进行补贴;仅针对绑卡的用户进行补贴。
  2. 补贴时,按照支付金额来设置优惠额度,或者按比例打折。
  3. 一般活动都会设置补贴总额度。该额度用完了就停止补贴。 
    当然,活动也都会设置开始和截止时间。

五 路由计算

人工路由

大部分支付系统在接入渠道不多时,人工路由也是一个不错的选择。运营人员指定支付渠道和产品之间的映射关系。出问题时人工切换即可。这种路由的优势是性能高,路由结果可控,出问题时易于排查问题。当接入通道数量增加,营销活动频繁时,人工路由会是一个巨大的投入。

基于规则的路由

这是相对比较简单的自动路由设计。 按照业务要求设置各种路由规则,比如:

if(支付方式==招商借记卡 && 额度<100) then 目标通道==银联token支付
if(支付方式==招商借记卡 && 额度>100) then 目标通道==招商快捷支付

技术上,规则可以使用drools来描述。

基于权重的路由

规则路由的难点各种规则的制定。在路由因子增多的情况下,规则的维护会是一个噩梦。基于权重的路由则可以缓解这个问题。这种计算方式,简单说,就是对各个通道打分,分数最高的就命中。难点在于制定打分的标准以及计算公式。 比如可以从费率、优惠额度、QOS和使用率角度来评分,给优惠额度高一点的比重,这会导致高优惠额度的通道被优先命中。注意每个维度上的计算公式也不是一成不变的,比如使用率和QOS都是动态打分计算。权重的调整是一个挑战,需要在运行过程中不断的调试。必要时,可以使用旁路测试来比较两种算法的优劣。

路由是支付的核心模块,稳定性是第一要素,其次是性能,最后才是怎么省钱。路由系统的设计,需要和公司业务发展保持一致,并适度超前。简单的if-else实现可以满足大多数场景下的需求。避免在系统建设初期引入过于复杂的路由。

【支付系统学习笔记】-二支付系统设计(支付路由设计)相关推荐

  1. 【支付系统学习笔记】-二支付系统设计(支付网关设计)

    前言: 本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 一 概述 在支付系统中,支付网关和支付渠道的对接是最核心的功能.其中支付网关是对外提供服务的接 ...

  2. 【支付系统学习笔记】-二支付系统设计(支付产品设计)

    本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据 ...

  3. 【支付系统学习笔记】-二支付设计(银行卡支付)

    前言:   本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 一 支付与交易 作者先明确了概念: 交易是生成订单:支付是对订单进行付款. 支付行为有多种 ...

  4. Linux系统学习笔记二

    参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili 1.文件编辑器 vim:是所有Unix和Linux系统下标准的文件编辑器 gedit:Linu ...

  5. 支付+电商双系统项目笔记(七)支付系统:支付宝支付开发

    目录 一.支付系统介绍 二.代码解析 1.支付宝支付参数配置 2.controller类 3.service类 4.dao类 三.支付演示 一.支付系统介绍 该支付系统实现了支付宝的网站支付功能(微信 ...

  6. java实现微信支付宝等多个支付平台合一的二维码支付(SSM框架)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听java实现微信支付宝等多个支付平台合一的二维码支付(SSM框架) 整体思路: 实现微信支付宝等支付平台合多为一的二 ...

  7. 开源支付系统,助你快速开发支付功能

    项目介绍 Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式.已对接微信支付,支付宝,云闪付官方接口,支持聚合码支付. Jeepay使用Spring Boot和Ant ...

  8. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  9. 一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付

    一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付.

最新文章

  1. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档
  2. HDOJ1035 ( Robot Motion ) 【递归】
  3. Github新建分支以处理原仓库提交时detached HEAD的问题
  4. 好系统重装助手教您如何设置宽带并连接无线上网
  5. IntelliJ IDEA2017 修改缓存文件的路径
  6. (一)MySQL优化之索引优化
  7. iOS下数据存储的方式
  8. 9.3 寻找magic index
  9. java 算数运算符
  10. delphi代码在linux编译运行,[教程] Delphi 10.2 Linux 程序开发环境部署的基本步骤
  11. 易辅客栈第一套从零学辅助系列教程
  12. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学计算机工程专业大学排名
  13. 贝叶斯判别分析,Python代码分类讲解
  14. android 自动打开第三方应用商店,Android应用自动跳转到应用市场详情页面的方法...
  15. DSP28335 ecap使用
  16. FPGA学习日记(八)SDRAM的读写测试
  17. Android开发之高仿QQ消息侧拉删除
  18. springboot如何解析邮箱
  19. win10电脑用蓝牙实现文件传输,安卓手机通过蓝牙将文件传送到电脑
  20. 关于wifi打印服务器方案和USB共享打印机模块工作原理

热门文章

  1. 执行update语句,返回受影响行数为0的几种情况
  2. 面试软件测试员,差点被骗到“缅北”...
  3. mysql-dql(Data QueryLanguage)summary
  4. 表单展示界示例_联系表单页面设计的12个最佳实践(包括示例)
  5. 如何写规范头文件,及头文件和源文件之间函数调用等关系
  6. 硬盘使用时间可以改吗,怎么样修改呢?
  7. 深入分析 I/O 的工作机制
  8. android 线程间通信几种方式
  9. vscode-cats插件是如何开发的?小包带你来实现一下
  10. 线性回归-预测房价(机器学习)