支付系统 — 支付路由

news2025/7/12 7:43:55

本文主要介绍下支付中路由系统的主要流程。

支付路由的作用

降低成本:越便宜越好;
提高用户体验:用户支付的越爽越好;越快越好;成功率越高越好。
确保有可用通道:多个选择,确保能完成支付。

初期

在自由微信或者支付宝支付渠道的情况下,我们可以直接在暴露出一些接口给使用方调用即可。这种方式的优势是简单快速,本地调用更加直接高效稳定。与此同时也会存在一些诟病:

  • 业务系统与支付系统位于同一个系统,系统任何一次变更都会影响整个系统。
  • 扩展性问题。接入新支付渠道,需要新暴露一个支付服务接口。业务系统需要改动代码。也就是说,业务系统承担路由系统的功能。
  • 复用性。新支付渠道,其实除了与支付渠道交互相关代码之外,其他代码可以复用。

简易版支付

中期

由于各种支付限制和业务的发展,需要接入更多的渠道。
实际上支付系统一般需要对接多个支付渠道,一是为了保证系统的可靠性,不能因为单一渠道的问题影响整个支付系统。二是为了提高支付能力,不同渠道提供支付能力不同。三是为了降低支付成本。
当系统中接入了多个渠道的时候,为了可以正确选择支付渠道支付,因此就需要设计渠道路由系统。
支付路由
从上图可以看到路由系统功能其实很简单,根据一定的规则分发支付请求到正确的渠道。

交易类型与支付渠道

支付方式与支付渠道的关系:
系统如果接入了多个渠道,那么对于一笔交易来说,将会有多个支付渠道可以扣款。
假设如下场景:在平台A下单购买一双鞋子200元,然后结算时在收银台中使用招行借记卡进行支付【已签约】。然后此请求最终提交到了支付系统扣款,对于路由系统来说,1⃣️首先需要获取到支持招行借记卡并且已经签约过的渠道列表,2⃣️然后从支持招行借记卡的渠道中挑选出来费率最低、成功率最高、限额范围内、并发量范围内的渠道,3⃣️最终如果还有多个渠道可以选择,就可以选择一个最近最近未使用过的,至此路由就完成了。最后向最终确定的渠道发起请求执行扣款。以上过程为简略版,省略了许多细节,不代表实际中就是这么简单。
通过上述的过程应该已经大概了解了路由的大致流程了吧。

路由层架构图

支付路由架构图

渠道

什么是渠道?

渠道是指可以进行账户操作的一些支付机构,包括但不限于银行,例如 银联、招行直连、快钱等等。

渠道的属性

编码:gh-kj-001
名称:工行协议支付
类型:协议,网银,打款
状态: 开启,关闭
所属银行: 工商银行
卡种:借记卡
其他

渠道属性的作用

渠道属性的一个关键用途就是路由选择的依据,路由的规则配置其实就是根据渠道属性去配置的,什么属性的渠道能用,什么类型的渠道属性不能用。

路由规则

路由规则就是支付请求来了筛选渠道的条件;比如那个银行的,什么卡等。路由最核心的是规则以及筛选模型。
路由规则主要分两类:

1. 分组规则

为了提升筛选效率,我们先对通道按照组合规则进行分组,分组规则需要的标识用户身份信息参数是上游请求方必填的,而关于卡片信息的一些参数是路由内部解析出来的。比如按照以下属性进行分组:

  • 交易类型:支付、打款、签约
  • 账户类型:对私、对公
  • 卡种:借记卡、贷记卡
  • 银行:工商银行、招商银行、北京银行等
2. 筛选规则

经过通道的分组筛选,最后确定了一个列表,然后再通过筛选规则筛选出需要的渠道道,比如以下筛选规则:

  • 已签约渠道:选择已经签约过的
  • 状态:开启
  • 成本最低优先:选择成本最低的
  • 成功率最高优先:选择最近成功率最高的
  • 响应时间最小优先:选择最近响应最快速的
  • 高权重优先:权重
  • 优先级
  • ……
路由分组规则

通过上述的分组规则和筛选规则,就可以得出筛选的规则树如下图:
渠道分组树
例如支付请求为:支付-对私-借记卡-工行,那么就可以快速定位到一个渠道组了:[银联,工行直连,快钱]。

路由筛选规则

在这里插入图片描述
经过一系列筛选规则后筛选出一个渠道。
如果在筛选过程中发现自由一个渠道可选择,那么就直接使用当前渠道。

例如:用户签约了快钱和工行直连渠道。支付请求上送了 支付-对私-借记卡-工行,1000元。那么就可以根据路由分组规则定位到[银联,工行直连,快钱]渠道,,根据状态路由过滤出[工行直连],然后根据签约表过滤出[银联,工行直连],根据成本路由过滤出[工行直连],此时自由一个通道可用,就直接短路使用工行直连渠道发起支付请求。反之,如果在筛选过程中发现快钱和工行直连渠道的状态都是不可用时,就需要返回对应的code码,引导用户重新签约其它支付渠道。

至此简略版已描述完毕。
以上就是个人对于支付路由的一些理解和描述,其中大部分都非常粗略,但是整体的流程就是这个样子。企业中会对其做各种更加深入的细化和调整,不尽相同,还需适时调整。
如果有错误或不足的地方,请多多留言指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM】PC程序计数器和PC寄存器

一、JVM体系结构 本文所讲内容主要是 JVM 体系结构图中 运行时数据区 中的 PC寄存器,如下图所示: 二、PC寄存器是什么? 这里引用别人的一句话: 首先这里的PC寄存器并非广义上所指的物理寄存器,或许将其翻译为PC计数…

antd Carousel 重写dot样式

antd的Carousel走马灯组件的dot也就是下面那个滑动的按钮非常的不起眼。 白色背景的时候完全看不到。 但是我们大部分时候又都是白色背景,于是来自己重写一下样式。 在控制台看了一下,应该是这个属性在控制dot的颜色,重写这个属性就可以了。…

Nginx源码解析 --红黑树

预读知识 红黑树是一种自平衡二叉树,不仅可以使用二分法快速查找,而且插入和删除操作的效率也很高,常用于构造关联数组(例如C标准库里的set和 map)。 在Nginx里红黑树主要用在事件机制里的定时器,检查连接超时&#…

Debian11之基于kubeadm安装K8S集群

官方安装教程 硬件要求 每台机器的内存要 2GB、CPU2 核心及以上 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以) 节点之中不可以有重复的主机名、MAC 地址或 product_uuid 开启机器上的某些端口 为了保证 kubelet 正常工作,必须…

FluentCRM 2.6.0:更多功能、集成改进等等!

FluentCRM 2.6.0最新版发布了,它是一个主要的更新版本,为您带来了更多的功能、改进的集成、升级和错误修复!让我们来看看 FluentCRM 2.6.0 提供了什么新功能! 目录 FluentCRM 2.6的更高级过滤条件 电子邮件活动条件 基于自动化…

STC32G 单片机EEPROM 操作实例

一 STC32G 单片机EEPROM简介 STC32G系列单片机内部集成了大量的EEPROM,特别是STC32G12K128集成多达128K EEPROM。 STC32G内部EEPROM可擦写10万次,分若干扇区,每个扇区512字节。EEPROM的写操作只能将1写为0。要将0写为1,必须擦除…

Hive之函数

Hive之函数 第九章 函数 9.1 系统内置函数 9.1.1 理论 查看内置函数: show functions; 显示函数的详细信息: desc function abs; 显示函数的扩展信息: desc function extended concat; 一、关系运算: 1. 等值比较: 2. 等值…

VSCode:使用CMakeLists.txt构建C++项目

vscode配置 插件: CMake插件主要功能是CMake语法高亮、自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具,比如生成CMake项目、构建CMake项目等CMake Tools Helper CMake工具本身还是要下载到本地,并且配置环境变量。 项目…

足球二三事 - 世界杯征文

征文活动链接: https://bbs.csdn.net/topics/609601920 从报纸上时候看 1982 年的世界杯,当时我们家里没有电视,晚上的时候听到马路对面的房子里传来惊呼声,也不知道为啥。 1983 年的春节前,家里要打扫房间&#xff…

UE4,UE5虚幻引擎源码版下载

1、进入Epic的GitHub仓库 https://github.com/EpicGames/Signup GitHub - EpicGames/Signup: Information about signing up for a free Epic Games account, and getting access to UnrealEngine source code. 2、加入EpicTeamAdmin 3、进入UnrealEngine仓库 4、找到需要下…

Linux系统中curl命令用法详解

在Linux系统中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。 curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client&#xff09…

(C语言)printf打印的字符串太长了,我想分两行!

本文来自于公众号&#xff1a;C语言编程技术分享 一、提问 有下述C程序&#xff1a; #include <stdio.h> #include <stdlib.h>int main() { printf("123456789012345678901234567890\n");system("pause");return 0; } printf函数要打印的字…

tomcat启动配置java_home,启动网址等,点击startup.bat直接启动

自己开发了一个网址&#xff08;基于angular&#xff09;&#xff0c;想共享给别人&#xff0c;直接点击运行&#xff0c;通过tomcat部署网站方式执行。 1、下载tomcat 从官网上下载tomcat&#xff0c;我下载的是tomcat9.0.36,下载完成后&#xff0c;解压&#xff1a; 双击b…

新知实验室

TUIRoom 是一个包含 UI 的开源音视频组件&#xff0c;通过集成 TUIRoom&#xff0c;可以在业务中快速上线音视频房间&#xff0c;屏幕分享&#xff0c;聊天等功能。 项目是开源的项目&#xff0c;根据自己 的需求设计项目。 创建步骤如下 &#xff1a; 一、 开通腾讯云实时…

被裁后一个offer都没有,测试人的问题出在哪里?

裁员潮涌&#xff0c;经济严冬。最近很多测试人过得并不好&#xff0c;行业缩水对测试岗位影响很直接干脆&#xff0c;究其原因还是测试门槛在IT行业较低&#xff0c;同质化测试人员比较多。但实际上成为一位好测试却有着较高的门槛&#xff0c;一名优秀的测试应当对产品的深层…

代码随想录65——额外题目【二叉树】:129求根节点到叶节点数字之和、1382将二叉搜索树变平衡、100相同的树、116填充每个节点的下一个右侧节点指针

文章目录1.129求根节点到叶节点数字之和1.1.题目1.2.解答2.1382将二叉搜索树变平衡2.1.题目2.2.解答3.100相同的树3.1.题目3.2.解答4.116填充每个节点的下一个右侧节点指针4.1.题目4.2.解答4.2.1.递归解法4.2.2.迭代方法1.129求根节点到叶节点数字之和 参考&#xff1a;代码随…

品优购项目详细分析

能够独立完成品优购首页制作哦 能够独立完成品优购列表页制作 能够独立完成品优购注册页制作 能够把品优购网站部署上线 网站制作流程&#xff1a; 初稿审核&#xff1a;网页美工会制作原型图和psd效果图 品优购项目规划&#xff1a; 1 品优购项目整体介绍 描述&#xff1…

【TS】函数重载--可选参数--默认参数

可选参数–默认参数 在ts中定义的数据类型&#xff0c;某些情况下只需要传入定义数据类型的一部分参数&#xff0c;比如&#xff1a;id 、name、age、address&#xff0c;此时需要修改用户的名称&#xff0c;那么只需要传入id、name就够了&#xff1b;某些情况下需要修改用户的…

.net-----集合和数据结构

集合和数据结构前言集合和数据结构的基本概念命名空间列表类集合列表类集合&#xff1a;数组列表列表类集合&#xff1a;列表List<T>双向链表LinkedList<T>字典类集合字典类集合类型哈希表Hashtable字典类集合&#xff1a;Dictionary<TKey, TValue >排序列表…

Vue3 Pinia 全局状态管理工具的使用

Pinia 是 Vue3 官方更推荐使用的全局状态管理工具。 Pinia 最初正是为了探索 Vuex 的下一个版本而开发的&#xff0c;因此整合了核心团队关于 Vuex 5 的许多想法。最终&#xff0c;我们意识到 Pinia 已经实现了我们想要在 Vuex 5 中提供的大部分内容&#xff0c;因此决定将其作…