支付系统设计概览

news2025/7/12 9:38:14

前言

就个人对支付的一些理解和经验,在此编辑出来和大家一起交流分享。请大佬多多指正。

  1. 在各种互联网场景中,牵扯到交易的情况,大多都需要支付系统的支持。
  2. 支付系统往往不是一蹴而就的,往往都是随着业务的不断扩展,进而不断演进。
  3. 项目初期阶段不要太过于追求大而全的系统建设,适应当前阶段系统的发展就好。
  4. 无论什么阶段的支付系统,在处理数据时都需要注意幂等和安全问题,避免资损
  5. 对于信息的验证一定不能少,注意临界值情况,注意信息的完整性。
  6. 该有的验签和加密流程切勿不能少,要抱着不能信任的态度去处理请求。
  7. 在支付过程中未明确得到响应的情况下,不要贸然凭借个人经验将订单修改为终态
  8. 针对渠道的请求一定要尽量多保留一些现场,方便后期随时排查。

支付演变

简易版支付系统

在以前接触到的一些简单项目中,由于这个阶段业务需求较简单,仅仅需要满足一个支付场景(例如使用支付宝支付或者微信支付),为了快速上线,设计方案就简单粗暴,对外直接暴露支付服务接口,由业务系统发起直接调用。如下图。
直接调用支付宝或者微信
这个阶段由于只有一个支付渠道,也不需要有路由系统,直接由业务系统调用支付服务接口发起支付。比较简单易用,但是这个设计方案存在很多问题:
- 业务系统与支付系统位于同一个系统,系统任何一次变更都会影响整个系统。
- 扩展性问题。接入新支付渠道,如微信,需要新暴露一个微信支付服务接口。业务系统需要改动代码。从另一方面讲,业务系统承担路由系统的功能。
- 复用性。新支付渠道,其实除了与支付渠道交互相关代码之外,其他代码可以复用。
因此针对以上问题,新的系统需要进行相应改造。

进化版支付系统

在随着业务规模的不断扩大,需要接入多个三方渠道为系统提供服务,应对限额和风控、限流、并发等等的问题。因此将支付系统与业务系统单独拆分出来,成为两套单独的系统。支付系统对外暴露一组通用接口。业务系统仅对接这组接口。业务系统若想指定支付渠道支付,接口参数传入渠道标识即可。这样就将耦合在业务系统中的支付功能下沉到支付系统统一的管理。整体的架构大概如下图:
支付系统架构概览

  1. 业务系统只需要将订单上送至订单中台,在订单中台中会进行进一步的处理,如扣手续费等;同时会根据购买产品策略将对应的订单进行拆分,(例如购买投顾产品,会按照策略中配置的购买比例进行拆分,然后针对不同的标的购买一定份额的产品),接下来就会将这些子订单发送给支付中台进行扣款。因此,订单与支付单的关系可能是1:N。
  2. 支付系统首先会收单,然后根据一定的路由规则或者业务方指定的支付渠道向渠道侧发起支付请求。其中支付单与渠道单的关系是1:N,主要是由于可能会因为各种各样的原因导致特定的渠道支付失败,而在这样的只有在明确失败的情况下情况下呢,需要换单支付,只要有一个渠道单支付成功,就可以视为当前的支付单是成功的。此处注意如果上一个渠道单在未明确失败的情况下不要重新发起支付,否则可能会重复支付。
    在这里插入图片描述
  3. 对账服务主要是在每个交易日结束后,渠道方会把资金对账文件上传到FTP服务器,同时支付系统也会生成对账文件并上传至FTP。最终有对账平台触发资金流比对。大概流程如图:
    对账总体流程
    以上是个人理解的支付系统总体上的概览,将会在后面的文章中针对各个部分详细进行说明。

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

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

相关文章

【python】面向对象程序设计(基础篇)

个人主页:天寒雨落的博客_CSDN博客-初学者入门C语言,python,数据库领域博主 💬 热门专栏:python_天寒雨落的博客-CSDN博客 ​每日赠语:没有窘迫的失败,就不会有自豪的成功;失败不可怕,只要能从失…

浅识vue的虚拟DOM和渲染器

虚拟DOM本质上是对DOM的抽象描述,就是一个普通的js对象。他身上的属性要比真实DOM的属性要少得多。 在一定情况下,使用虚拟DOM的性能要逊于直接使用真实DOM。 例如,在页面一开始的时候,Vue需要先通过生成虚拟DOM树,在…

【雷达通信】雷达探测项目仿真附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

《恋上数据结构与算法》第1季:链表原理实现(图文并茂)

数据结构与算法的学习笔记目录:《恋上数据结构与算法》的学习笔记 目录索引链表原理实现一、链表二、链表的设计三、链表的接口设计四、链表接口的实现1. 索引越界的判断2. 根据索引查找指定节点3. 添加数据4. 插入元素5. 删除元素6. 清空元素7. 修改元素8. 查找元素…

傻白入门芯片设计,RDL/Interposer/EMIB/TSV(三)

目录 一、再分配层(RDL) 二、硅中介层(Si Interposer):Active and Passive 三、嵌入式硅桥(EMIB) 四、硅通孔 TSV(Through Silicon Vias) 一、再分配层(R…

CCF CSP认证2022年6月 归一化处理、寻宝!大冒险!、光线追踪

这是我第一次参加了这次CSP考试,300分,写了124三题,模拟题到现在都没看过题面没看,笑,t4写成模拟加数据结构,200行,因为一个小错误调了1h,错失了大好机会。考试环境的VSC配置的字体太…

[一篇读懂]C语言十讲:单链表的新建、查找

[一篇读懂]C语言十讲:单链表的新建、查找1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 头插法新建链表实战3. 尾插法新建链表实战4. 按位置查找及按值查找实战5. 往第i个位置插入元素实战6. 链表的调试方法总结234561. 与408关联解析及本节内容介…

面对无法投入模型训练的object类型数据在头疼,快来使用我的丝滑小连招

面对无法投入模型训练的object类型数据在头疼,快来使用我的丝滑小连招 前言 丝滑小连招 tip1- get_dummies完美one-hot(str->int) tip2 - rename_dims解决重名问题! tip3 - insert且drop!​​​​​​​ 前言 我…

小爱同学控制美的美居中的家电热水器,空调等

背景 家里大多数家电都是支持接入米家App的,美的家电不能接入小米,电脑安装Home Assistant成功实现小爱语音控制美的燃气热水器。 实现步骤: 1. 安装docker 我的电脑是windows的,那就直接安装docker desktop https://desktop.…

【Linux】基础指令(三) —— 收尾篇

文章目录前言zip 和 unzip 指令tar 指令bc 指令uname 指令history关机热键补充ctrl c↑ && ↓ctrl rctrl d指令拓展结语前言 今天为大家带来的是最后一部分基础指令讲解。主要内容为 7个指令讲解、热键补充、简单提一下指令的拓展 。内容相对之前较少,更…

服务器密码以及用户名怎么修改

服务器密码以及用户名怎么修改 我是艾西,今天给大家说下服务器密码如何修改 windows2003系统: 1、右键我的电脑,点击“管理”: 2、在“本地用户和组”中打开“用户”,在右侧找到 Administrator 账户进行修改。 200…

【linux】linux实操篇之任务调度

目录前言crond 任务调度概述基本语法快速入门案例案例一:每隔一分钟将ls -l /etc/ 追加到 /tmp/to.txt 文件案例二:每隔一分钟执行python文件结语前言 我们常用linux做一些定时任务,最常见的就是在服务器领域,我们常常做一些定时…

高分辨率格式理论

一个核心概念:人工粘性 考虑经典的双曲守恒律方程 ∂u∂t∂f∂x0{{\partial u} \over {\partial t}} {{\partial f} \over {\partial x}} 0∂t∂u​∂x∂f​0 可以写成守恒形式的数值格式 uin1uin−λ(f^i1/2n−f^i1/2n)u_i^{n 1} u_i^n - \lambda \left( {\ha…

基于ssm+mysql+jsp学生成绩管理系统(含实训报告)

基于ssmmysqljsp学生成绩管理系统(实训报告)一、系统介绍二、功能展示1.学生信息查询2.学生信息添加3.学生信息修改4.学生信息删除四、获取源码一、系统介绍 系统主要功能:系统实现了学生信息查询、添加、修改、删除。 环境配置: Jdk1.8 M…

[附源码]java毕业设计智慧教学平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

储能辅助电力系统调峰的容量需求优化配置matlab/cplex

参考文献:储能辅助电力系统调峰的容量需求研究 摘要:建立了储能辅助电力系统调峰的容量需求优化配置模型,设置了含储能和不含储能两种仿真方案,将两个算例代入所提模型进行求解,得到最优的储能系统容量和功率配置&…

Flutter高仿微信-第52篇-群聊-清空聊天记录

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: //清空聊天记录对话框 void _cleanGroupChatDialog(){Lo…

【Python】数据类型 + 运算符 + 输入输出

文章目录一. 常量和表达式二. 变量和类型1. 什么是变量2. 变量的语法2.1 定义变量2.2 使用变量3. 变量的类型3.1 整数3.2 浮点数3.3 字符串3.4 布尔3.5 关于变量类型的几点补充三. 注释1. 什么是注释?2. 为什么要有注释?3. 如何写注释?3.1 注…

深度学习制作自己的数据集—为数据集打上标签保存为txt文件,并进行划分和加载数据集

目录 0 前言 1 为图片数据集打上标签并保存为txt文件 2 将txt文件中的图片标签数据集随机划分为训练集和测试集 3 加载txt文件中的图片标签数据集 0 前言 目前是被封控的第四天了,只能呆在宿舍不能出去,记得上次这样子还是一年前大四快毕业那时候了……

CyberController手机外挂番外篇:源代码的二次修改

文章目录前言调试过程中的疑问为什么一段时间不使用CyberController,翻译就无法触发了?为什么连接成功了,但却依然无法进行语音识别和翻译?多长时间TCP连接就会挂掉连接正常与断开连接有什么区别?不停进行翻译&#xf…