0%

第三方支付系统架构思路

各种系统中会经常用到支付功能,需要对接各种第三方支付系统(微信、支付宝、网银等),这种系统模块如何架构呢,我这里提供一种架构思路。

起源

参考微信支付流程时序图

talkabout-pay-dev-20194101529

如上图所示,支付系统有两个重要的环节:预支付和支付

  1. 预支付
    1. 预支付的时候,系统有订单信息,并且生成好了支付信息,返回客户支付
  2. 支付
    1. 用户收到预支付信息 提交支付,并且知道支付状态

参考支付宝支付也是大致这个支付流程

设计

数据库关系

订单-支付记录:一对多的关系
talkabout-pay-dev-2019412155958

支付商家后台设计

sequenceDiagram
    participant 服务接口
    participant 支付平台
    participant 数据库
    服务接口->数据库: 调用生成Order接口:新增订单,得到OrderID
    数据库->服务接口: 返回终端订单标志:OrderId
    服务接口->支付平台:调用PrePay接口:通过OrderId生成预支付信息
    支付平台->数据库:写入PayRecord,得到支付记录
    数据库->服务接口:返回给支付终端,进行支付
    服务接口->支付平台:调用订单详情接口:获取支付平台最新支付状态信息
    支付平台->数据库:修改,PayRecord和Order订单状态
    数据库->服务接口:返回给终端,进行展示支付信息
    服务接口->支付平台:主动接收支付平台推送支付记录信息
    支付平台->数据库:修改,PayRecord和Order订单状态
    Note right of 数据库: 数据库要使用事务锁

对账

为了保证支付过程,支付的金额和订单信息都能对应起来,需要结合各个第三方平台给出来的历史支付记录进行对账

微信对账单接口

支付宝对账单接口

对账算法:将历史订单导入各自的支付平台账单表中,和商家Order表、PayRecord表关联,计算归档期内总正常支付金额是否相等