基础向:从 0 开始学习支付系统架构

今天为大家带来 Ping++ 高级技术总监——叶波光老师的《支付系统架构详述》。本篇内容由五个部分组成。

1. 架构的定义:架构一定是基于业务功能来展开的,主要是制定技术规范、框架,指导系统落地,好的架构是需要不断演变和进化而来的。

2. 架构需要关注的基础核心点主要是:安全、稳定、可扩展。

3. 构建架构时需要关注的点:目标客户是谁、主要场景有哪些、流程是怎样的、模型、职责有哪些、边界在哪里以及设计。其中比较难以理解的点是困难及模型这两块。

4. 架构与业务需求的关系:架构的产生来自于业务需求,业务需求进一步抽象形成架构,架构指导后续研发,研发最终成果解决业务需求的问题。整体是一个正向循环的关系。

支付架构

支付流程分析

第一步,用户选择支付渠道,进入商户客户端;商户客户端发送支付要素,到商户服务端;第三步,商户服务端发起支付请求到渠道侧(个别渠道如支付宝是不需要此步骤);第四步渠道返回支付凭证到商户服务端;第五步商户服务端返回支付凭证到商户客户端;第六步,用户调用支付宝控件完成支付。

接下来是重点,第七步一般渠道是采用异步通知方法来通知商户,但是有些企业是在第六步支付完成之后,在C端会同步通知支付成功。如果以此结果来判断支付是否成功,其实是不严谨会出问题的,应当调用渠道的支付接口来进行核查,然后以渠道返回的结果为准。

在日常工作中,许多企业在选择第四方服务商或者渠道的时候,会着重关注「并发」这个点,认为并发量需要达到上万级才可以满足日常需求,但实际上这个量级非常大,其实并没有必要的。

若直接对接渠道可能会遇到的问题:

? 接口文档升级、变更能及时得到通知

? 有些业务没有异步通知

? 同一业务在不同渠道表现不一样

? 各种渠道的各自异常

商户的要求:

? 清晰的 API 、SDK 文档

? 安全

? 所有应用接口统一标准的异步通知

? 保证出口 IP 稳定(安全)

在系统架构设计时需要注意的一些要点:

1. 提供规范的 API、SDK

2. 安全(通讯安全、数据安全)

3. 稳定

4. 异步通知统一

5. 各渠道的异常

6. 及时了解渠道接口调整

支付核心逻辑

这里讲一下,支付成功之后,我们会把订单信息同步到财务系统,在账务系统里我们设计了诸如转账、汇款等功能,在前期设计时会设计好账务的生成规则,例如一笔支付的请求会生成多笔账务,对其字段进行区分,这样方便管理和维护。

支付网关

此处特指API网关,支付网关的功能:

限流最好不要放到业务流程中做,会影响用户的体验。

支付网关的内容:

? 唯一的请求入口

? 统一的身份认证、签名、加解密、流控

? API 调用计费

? API 的监控、报警分析

? API 发布管理

? 熔断

? API 聚合

? 协议转换

上述内容除了必要意外,其他不放在业务层做,也是为了更好的用户体验。

支付逻辑

主要是根据请求的参数进行静态检验和业务逻辑校验,避免系统异常

? 适配渠道的参数校验:长度、类型、格式

? 订单的支付状态:是否支付

? 订单的有效期等等

要点:

? 一般商户是不需要做支付路由,大部分都是指定了最终的某个支付渠道。

? 但也有些没有指定了某个最终的渠道,比如银行卡的支付可以选择哪个第三方支付来完成支付,还有微信线上线下的封装,这个时候就涉及到支付路由

? 规则配置

? 费率:单笔费率、总额费率、阶梯费率、

? 营销活动:固定时间单笔优惠、单笔满减、单笔这款、直接补贴

? 额度限制:单笔额度、时间范围内总额度

? 服务指标:失败率、平均响应时间、异常率、TPS

? 特殊配置:特殊要求(比如某渠道能快速结算)

支付网关的目的:

省钱

支付风控

要点:梳理清楚业务风险,分析风险原因,制定风险防范规则。

数据来源:

内部数据:

? 用(商)户信息

? 交易数据

? 账户数据

? 黑名单

? 设备、位置信息

? 日志数据

外部数据:

? 第三方购买

? 央行征信

? 芝麻信用

? …

? 合作数据

风控流程:

事前:

? 入网审核

? 风险评估

? 单笔限额设置

? 单日限额设置

? 频次设置

事中:

? 实时分析

? 多维度判断

? 拒绝

? 拦截 – 进一步验证

– 人工介入

? 延迟操作(例如用户大额提现,需要时间段进行复核)

事后:

? 数据分析

? 巡查、警告

? 降低评级

? 升级防范措施

? 逻辑完善

? 反馈至事前、事中规则中

账务系统

? 账务生成

? 内部对账

? 原始账单下载

? 生成标准账单

? 对账

? 差错处理

账务生成后首先进行内部对账,一直后进行原始账单下载,再生成标准账单,进行对账之后进行差错处理。

内部流程如图:

? 订阅交易信息

? 根据交易事件查询生成账务的规则

交易事件:支付、退款、转账等等

? 根据规则生成账务明细

? 将账务明细落地

对账流程(实现方式之一)

内部对账:

? 保证账务和交易信息配对

? 一条交易信息有多条账务信息

渠道账单下载:

? 下载

? 账单标准化(对账字段统一)

? 落地标准化账单

对账:

? 账务和标准账单对账

? 双向对账

? 差错处理

账单下载:

这里提一句,在做异常处理这部分工作时,有的研发朋友写代码时遇到过类似的问题,例如订单在周末下单,但账单周一才能查询;等到周一时发现查询不到,选择立即重试 + X 分钟后重试就结束了。这样是不行的,因为银行有的是 8 点之后可以查询到,有的是 9 点之后,所以要选择递增时间重试,然后标记人工处理。

对账:

对账部分:

  1. 获取核对文件
  2. 以账务系统为准来逐笔比对(以某个字段为准进行比对)
  3. 数据一致标记成功,数据不一致标记差错

反向操作:

  1. 以渠道账单为准来逐笔比对;
  2. 数据一致标记成功,数据不一致标记差错

差错处理

本地丢失:渠道账单的数据未在账务中查找到。

渠道丢失:账务中的数据未在渠道账单中查找到。

数据差错:账务与渠道某些对账字段未能对上。

此处需要注意的是

针对差错都需要向渠道查询每笔订单信息再次确认。

同时:有些渠道的交易成功时间本来就是有错误的。一般来说是件不会差错很大,一般出现在跨日交易中。例如当天交易无账单,先标记为差错,第二天再改正。

支付基础服务

? Webhook

? 公共推送服务

? 主动查询

? 补偿

? 链路监控

Webhook

公共推送服务

主动查询

异步延时调用

场景:

1、订单创建成功的时候会向服务推送主动查询信息,如果订单支付成功会通知服务取消后续的主动查询,否则在过期时间点向渠道主动查询订单是否支付目的是避免渠道异步通知服务的异常。

2、退款创建成功的时候会向服务推送主动查询信息,该服务会在一定的时间范围内多次查询渠道直到有明确的结果返回(有些渠道没有异步通知)。

3、转账也是类似的逻辑,但某些渠道只提供重试的功能,要注意幂等性。

……

补偿

? 协调保证各模块间数据的一致性

? 一般会跟重试、回滚、兜底来协调使用

? 使用条件

– 系统异常

– 业务异常

? 补偿失败报警人工干预

链路监控

展示信息:应用、URL、调用方、调用时间、调用次数、调用失败次数、本地平均耗时、总平均耗时、调用失败平均耗时 、错误率、依赖度

关注:Cache、SQL、HTTP、TCP

基本信息:

依赖度:

支付安全

数据安全:

– 防窃听    – 防越权

– 防抵赖    – 防破坏

– 防篡改    – 防重放

– 防泄漏

使用范围:网络、系统、应用、业务等

数据安全要点:

? 加密通讯(防窃听)

? 双向签名(防抵赖、防篡改)

? 敏感数据加密存储(防泄漏)

? 密钥管理(通过认证接口获取,只允许加载到内存,不允许直接写入配置文件)

? 权限控制(防越权-非法访问)

? 数据的完整性(放篡改- 数据被恶意修改、非法篡改)

其他

? 内部接口认证

? 避免内部代码未经审核发布到托管平台!!!

? 数据异常分析

? 安全机构合作

注意点

? 使用 HTTPS 加密传输

? 传输的数据使用签名

? 提交的数据是符合规则并且是不存在或者是未支付的

? 支付成功以服务端异步通知为准

原文地址:http://blog.51cto.com/13835746/2159779

时间: 2024-10-08 00:13:27

基础向:从 0 开始学习支付系统架构的相关文章

Android基础入门教程——1.1 背景相关与系统架构分析

Android基础入门教程--1.1 背景相关与系统架构分析 1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了:最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google I/O大会上推出的Android M,有趣的是Android系统的命名都是以点心来命名的,下述表是15个Android版本名称,对应API号以及发布时间! 系统版本名称 API版本号 发布时间 Android 1.5:Cupcake:纸杯

每秒处理10万高并发订单的乐视集团支付系统架构分享

随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作为商品购买的最后一环,保证用户快速稳定的完成支付尤为重要.所以在15年11月,我们对整个支付系统进行了全面的架构升级,使之具备了每秒稳定处理10万订单的能力.为乐视生态各种形式的抢购秒杀活动提供了强有力的支撑. 一.库分表 在redis,memcached等缓存系统盛行的互联网时代,构建一个支撑每秒十万只读的系统并不复杂,无非是通过一致性哈希扩展缓存节点,水平扩展web服务器等.支付系统要处理每秒十万笔订单,需要的是每秒

聚合四方支付系统架构及所需配置

聚合支付介于第三方支付和商户之间,不进行资金清算,但能够根据商户的需求进行个性化定制,形成支付通道资源优势互补,具有中立性.灵活性.便捷性等特点. 聚合支付系统,可以将市面上主流的支付渠道整合为一个付款渠道接口,发放给下级商户用户使用.商户(各类型站点或者线下商店以及各种付款场景使用者)只向平台申请一次就可以接入全部的主流支付 ,不用再去一个个的申请,节约站点支付开发的时间,解决收款混乱以及网站支付问题. 工具/原料 独立服务器一台 备案域名一个 需windows系统2003 32位或者2008

thinkPHP5.0的学习研究【架构】

2017年6月19日18:51:53 架构:1.ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织.2.MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V).控制器(C),它们各自处理自己的任务.3.传统的访问方法:http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/参数/值-4.入口文件用户请求的PHP文件,负责处理一个请求(注意,不一定是URL请求)的

支付系统架构--简易版支付系统介绍

  工程结构 pay-common-parent      项目的Maven父配置工程 pay-common             公共工程,所有项目均可引用 pay-common-config      公共配置工程 pay-common-core        公共核心工程,service工程共用 pay-common-web         公共web工程,web工程共用 pay-api-merchant       商户API工程,商户对接支付平台时使用(如:模拟商城pay-web-s

互联网支付系统整体架构详解(转)

在互联网产品运营中,有很多小伙伴或许会遇到这样的困扰:产品好不容易推出来了,流量成本节节攀升,用户的活跃度.留存度却持续下降. 因此在瞬息万变的互联网产品环境中,需要研发接入支付系统来加入商业行为的闭环,支付系统能够帮助企业更好地实现商业化,利用那些为用户而生的支付体系产品,实现用户积累.商业变现. 对于支付系统,有针对不同行业的支付系统,有支付宝,微信支付,paypal的通用网关支付,也有聚合了不同网关的聚合系统. 不论你是对支付行业感兴趣,亦或自己研发支付系统,本篇内容会对你有价值. 从产品

0. 视频监控系统架构设计

0.视频监控系统架构设计 0.1.功能指标 (1)搭建共享文件夹 (2)实现Ubuntu的NAT上网和桥接上网 (3)搭建局域网 (4)搭建nfs服务器.tftp服务器 (5)将uboot.kernel.rootfs镜像文件下载到开发板中 (6)移植MPP,ORTP库和WiFi库 (7)编写应用程序实现RTP/RTCP传输视频流,实现有线传输和无线传输 0.2.架构搭建 该系统中主控 CPU 采用HI3518EV200作为核心,通过在HI3518E芯片上运行linux,构建嵌入式平台, 接收来自

秒杀系统架构分析与实战

0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1)低廉价格:(2)大幅推广:(3)瞬时售空:(4)一般是定时上架:(5)时间短.瞬时并发量高: 2 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有: 对现有网站业务造成冲击 秒杀活动只是网站营销的一个附加活动,

秒杀系统架构分析与实战(参考、转载)

目录[-] 0 系列目录 1 秒杀业务分析 2 秒杀技术挑战 3 秒杀架构原则 4 秒杀架构设计 4.1 前端层设计 4.2 站点层设计 4.3 服务层设计 4.4 数据库设计 4.4.1 基本概念 4.4.2 设计思路 5 大并发带来的挑战 5.1 请求接口的合理设计 5.2 高并发的挑战:一定要“快” 5.3 重启与过载保护 6 作弊的手段:进攻与防守 6.1 同一个账号,一次性发出多个请求 6.2 多个账号,一次性发送多个请求 6.3 多个账号,不同IP发送不同请求 7 高并发下的数据安全