聚合支付系统设计方案
聚合支付系统设计方案 原创 于 2026-03-06 20:54:32 发布 · 268 阅读 标签 #后端 1. 引言 1.1 聚合支付定义 聚合支付(Aggregate Payment),又称“第四方支付”,是指通过一个平台整合多家第三方支付机构、银行、以及其他支付渠道的支付能力,为商户提供统一的支付接口和结算服务。商户无需逐个对接不同的支付渠道,只需接入聚合支付平台,即可实现微信支付、支付宝、银联云闪付、银行卡等多种支付方式的收单。 1.2 项目背景与目标 随着移动支付的普及,商户面临的支付渠道日益增多,对接多个渠道的研发成本、维护成本、对账成本居高不下。聚合支付系统旨在解决这一痛点,提供: 统一接口:一套API对接所有主流支付方式。 智能路由:根据费率、成功率、渠道稳定性等因素动态选择最优渠道。 统一对账:自动汇总各渠道交易,生成统一对账单。 资金结算:支持T+N结算到商户银行账户。 增值服务:如营销工具、会员管理、数据报表等。 1.3 适用范围 本设计方案适用于金融科技公司、SaaS服务商、电商平台等需要构建聚合支付能力的企业。系统设计需满足高并发、高可用、数据一致性和安全性要求。 2. 需求分析 2.1 功能性需求 商户接入:支持商户入驻、资质审核、费率配置、API密钥生成。 支付能力:涵盖公众号支付、APP支付、扫码支付、H5支付、小程序支付、刷脸支付等。 交易管理:订单查询、退款、关闭、撤销等操作。
原创 于 2026-03-06 20:54:32 发布 · 268 阅读
标签
#后端
1. 引言
1.1 聚合支付定义
聚合支付(Aggregate Payment),又称“第四方支付”,是指通过一个平台整合多家第三方支付机构、银行、以及其他支付渠道的支付能力,为商户提供统一的支付接口和结算服务。商户无需逐个对接不同的支付渠道,只需接入聚合支付平台,即可实现微信支付、支付宝、银联云闪付、银行卡等多种支付方式的收单。
1.2 项目背景与目标
随着移动支付的普及,商户面临的支付渠道日益增多,对接多个渠道的研发成本、维护成本、对账成本居高不下。聚合支付系统旨在解决这一痛点,提供:
统一接口:一套API对接所有主流支付方式。
智能路由:根据费率、成功率、渠道稳定性等因素动态选择最优渠道。
统一对账:自动汇总各渠道交易,生成统一对账单。
资金结算:支持T+N结算到商户银行账户。
增值服务:如营销工具、会员管理、数据报表等。
1.3 适用范围
本设计方案适用于金融科技公司、SaaS服务商、电商平台等需要构建聚合支付能力的企业。系统设计需满足高并发、高可用、数据一致性和安全性要求。
2. 需求分析
2.1 功能性需求
商户接入:支持商户入驻、资质审核、费率配置、API密钥生成。
支付能力:涵盖公众号支付、APP支付、扫码支付、H5支付、小程序支付、刷脸支付等。
交易管理:订单查询、退款、关闭、撤销等操作。
渠道路由:根据规则(金额、商户、渠道权重、成本)自动选择支付渠道。
对账清算:每日自动拉取渠道对账单,与系统交易记录进行勾兑,生成差异报表。
结算管理:计算商户应收净额,生成结算单,通过银行或第三方代付到商户银行卡。
风控管理:交易监控、黑名单、限频、限额、反洗钱筛查。
通知系统:向商户服务器发送支付结果、退款结果等异步通知。
报表统计:交易趋势、渠道分析、商户营收报表。
2.2 非功能性需求
高并发:峰值TPS > 5000,系统可水平扩展。
高可用:99.99%可用性,核心链路无单点故障。
数据一致性:支付状态最终一致,避免资金损失。
安全性:符合PCI DSS标准,数据传输加密,敏感信息脱敏。
可扩展性:支持快速接入新支付渠道。
可维护性:完善的日志、监控、链路追踪。
2.3 用户角色
商户:使用聚合支付服务的商家。
终端用户:实际付款的消费者。
运营人员:管理商户、渠道、风控规则。
财务人员:处理对账、结算、差错。
系统管理员:系统配置、监控、运维。
3. 总体架构设计
3.1 架构原则
微服务化:按业务域拆分服务,独立部署、独立扩展。
分层架构:接入层、业务层、核心层、基础设施层。
异步化:长耗时操作(如对账、结算)通过消息队列异步处理。
数据最终一致性:采用TCC、本地消息表等保证分布式事务。
开放封闭原则:对扩展开放,对修改封闭,渠道接入通过插件化实现。
3.2 逻辑架构图
text
+-------------------+ +-------------------+ +-------------------+
| 接入层 (API Gateway) | | 商户控制台 (Web) | | 运营后台 (Admin) |
+-------------------+ +-------------------+ +-------------------+
| | |
v v v
+-----------------------------------------------------------------------+
| 业务服务层 |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| | 商户服务 | | 订单服务 | | 支付服务 | | 路由服务 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| | 渠道适配器 | | 对账服务 | | 结算服务 | | 风控服务 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
+-----------------------------------------------------------------------+
| | |
v v v
+-----------------------------------------------------------------------+
| 核心服务层 |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| | 账户服务 | | 记账服务 | | 资金服务 | | 通知服务 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
+-----------------------------------------------------------------------+
| | |
v v v
+-----------------------------------------------------------------------+
| 基础设施层 |
| (MySQL, Redis, RocketMQ, Elasticsearch, MinIO, Prometheus, etc.) |
+-----------------------------------------------------------------------+
3.3 技术栈选择
开发语言:Java 11 (Spring Boot 2.x, Spring Cloud Alibaba)
服务注册与发现:Nacos
配置中心:Nacos
API网关:Spring Cloud Gateway + Sentinel
RPC框架:Dubbo / Spring Cloud OpenFeign
消息队列:RocketMQ (支持事务消息)
分布式事务:Seata (AT模式)
数据库:MySQL 8.0 (分库分表: ShardingSphere)
缓存:Redis 6.x (Cluster模式)
搜索引擎:Elasticsearch (用于日志和交易查询)
对象存储:MinIO (对账单文件存储)
监控:Prometheus + Grafana
链路追踪:SkyWalking
容器化:Docker + Kubernetes
CI/CD:GitLab CI + Jenkins
4. 核心模块详细设计
4.1 商户管理模块
功能:
商户入驻申请、资料提交(营业执照、法人信息、结算账户)。
资质审核(人工或自动)。
商户信息维护(费率、结算周期、API密钥、IP白名单)。
商户状态管理(启用、禁用、冻结)。
关键设计:
商户表 merchant :
id, merchant_no, name , contact , status, fee_rate , settle_cycle, api_key, secret_key, ip_whitelist, created_at, updated_at
采用雪花算法生成唯一商户号。
API密钥使用HS256或RSA,商户请求需签名,响应也需加密(可选)。
费率支持阶梯费率、按渠道定制费率,可配置在 merchant_channel_rate 表中。
4.2 渠道管理模块
功能:
维护支付渠道信息(微信、支付宝、银联等)。
渠道参数配置(AppID、商户号、API密钥、证书)。
渠道开关控制(上下线、维护状态)。
渠道权重、优先级配置(用于路由)。
关键设计:
渠道表 channel:id, channel_code, channel_name , status , weight , priority , fee_rate (渠道成本费率)
渠道参数表 channel_config:id , channel_id, param_key , param_value, encrypted (是否加密)
敏感信息(如证书、密钥)需加密存储,使用AES-256或HSM。
4.3 订单管理模块
功能:
接收商户下单请求,生成聚合订单。
订单状态流转:待支付 -> 支付中 -> 支付成功/失败 -> 已退款/部分退款。
提供订单查询接口。
关键设计:
订单表 payment_order :
order_no (聚合订单号), merchant_order_no (商户订单号), merchant_id
amount, currency , subject, body
status (0-待支付,1-支付成功,2-支付失败,3-已退款,4-关闭)
channel_code, channel_order_no (渠道订单号)
notify_url, return_url
expire_time, created_at, updated_at
订单号生成:使用雪花算法,保证全局唯一。
为防止订单号重复,需在数据库对 merchant_id + merchant_order_no 建立唯一索引。
订单超时处理:使用Redis延迟队列或RocketMQ定时消息,超时后自动关闭订单。
4.4 路由引擎模块
功能:
根据商户、金额、渠道状态、费率、成功率等动态选择最优渠道。
支持规则配置(如金额<100元优先使用微信,>100元优先使用银联)。
支持渠道降级(当主渠道失败时自动切换备用渠道)。
关键设计:
规则引擎可采用 Drools 或自研简单规则链。
路由因子:商户指定渠道(可选)、渠道状态(在线/离线)、渠道权重、渠道成本、历史成功率、时间段、金额区间、卡类型(借贷记)。
路由结果缓存,避免每次计算。
可配置渠道探针,定时检测渠道可用性,动态调整权重。
4.5 支付核心模块
功能:
调用渠道适配器发起支付请求。
处理同步响应(如二维码链接)和异步通知(支付结果)。
幂等处理(防止重复通知)。
记录支付流水。
关键设计:
支付流水表 payment_flow:
flow_no, order_no, channel_code , request_amount , response_amount
status (0-处理中,1-成功,2-失败), error_code, error_msg
request_time, response_time, notify_time
异步通知处理:当收到渠道异步通知时,更新订单状态,并触发商户通知。
幂等设计:使用Redis分布式锁,根据 channel_order_no 或 order_no 保证同一通知只处理一次。
支付结果需通过消息队列广播,供其他服务(如风控、积分)消费。
4.6 渠道适配器模块
功能:
封装各支付渠道的接口差异,提供统一调用方式。
每个渠道一个适配器,实现 ChannelAdapter 接口。
支持热插拔,新渠道只需新增适配器,无需修改核心代码。
关键设计:
接口定义:
java
public interface ChannelAdapter {
PayResponse pay(PayRequest request);
RefundResponse refund(RefundRequest request);
QueryResponse query(QueryRequest request);
CloseResponse close(CloseRequest request);
NotifyResult parseNotify(Map<String, String> params); // 解析异步通知
}
适配器内部实现HTTP请求、签名、验签、异常处理。
渠道返回的原始数据需完整保存至 channel_raw_data 表,用于对账和排查。
4.7 对账模块
功能:
定时拉取各渠道的对账单文件(通常为T+1)。
解析对账单,与系统交易流水进行逐笔勾对。
生成对账差异报告(长款、短款、金额不一致等)。
自动处理部分差异(如手续费差异),人工介入处理无法自动处理的。
关键设计:
对账任务调度:使用XXL-JOB或Quartz。
对账单文件存储:MinIO,按日期/渠道组织。
对账流程:
下载渠道对账单。
解析为内部对账记录。
将系统交易流水(昨日成功订单)与对账记录进行匹配。
匹配字段:订单号、金额、时间、状态。
生成差异记录表 reconciliation_diff。
自动调账:例如手续费差异,生成调账流水;长款/短款需人工审核。
对账完成后,更新订单的对账状态。
4.8 结算模块
功能:
根据商户的结算周期(T+1、D+1、D+0)生成结算单。
计算商户应收金额(交易金额 - 手续费 - 其他费用)。
通过银行或第三方代付接口打款至商户结算账户。
生成结算记录,供商户查询。
关键设计:
结算表 settlement:
settle_no, merchant_id, start_date, end_date
total_amount, fee_amount, net_amount, status (0-待结算,1-结算中,2-已结算,3-失败)
bank_card_no, bank_name, settle_time , fail_reason
结算任务:每日定时汇总商户昨日成功交易(已对账一致),生成结算单。
结算打款通过对接银行代付接口,需考虑重试、幂等。
结算失败需告警,人工介入。
4.9 风控模块
功能:
实时风控:交易前检查(黑名单、限频、限额、IP风险)。
事后风控:交易监控(大额交易、频繁交易)、反洗钱规则。
黑白名单管理。
风险交易拦截或人工审核。
关键设计:
风控规则引擎:可使用EasyRules或自研,支持动态配置。
实时风控点:下单前、支付前、退款前。
风控因子:商户历史交易、用户设备指纹、IP地理位置、交易金额、时间。
风控结果记录表 risk_check_result。
与支付核心集成:支付核心调用风控服务,若风控拒绝,则返回失败。
4.10 用户中心(终端用户)
功能:
管理终端用户信息(可选,用于绑定支付方式、查询订单等)。
提供用户支付记录查询。
关键设计:
如果聚合支付需要用户体系,可设计用户表 user,与商户订单关联。
通常聚合支付不存储用户敏感信息,只保留openid等渠道用户标识。
4.11 通知模块
功能:
向商户服务器发送异步通知(支付结果、退款结果)。
支持重试机制(最多重试N次,间隔递增)。
记录通知日志。
关键设计:
通知表 notify_task :
id, order_no, merchant_id , notify_url, content (通知内容), status (0-待通知,1-成功,2-失败)
retry_count, next_retry_time, last_error
通知服务定时扫描待通知任务,发送HTTP POST请求。
商户需返回“SUCCESS”字符串表示接收成功,否则重试。
支持手动触发补发通知。
5. 数据模型设计
5.1 核心表结构
以下列出关键表及其字段:
merchant (商户表)
id bigint PK
merchant_no varchar(32) UK
name varchar(100)
contact_name varchar(50)
contact_phone varchar(20)
email varchar(50)
status tinyint (0-待审核,1-正常,2-冻结,3-注销)
fee_rate decimal(10,4) (默认费率,百分数)
settle_cycle varchar(10) (T+1, D+1, D+0)
api_key varchar(64)
secret_key varchar(128)
ip_whitelist text (JSON数组)
created_at datetime
updated_at datetime
merchant_channel_rate (商户渠道费率)
id bigint PK
merchant_id bigint
channel_code varchar(20)
fee_rate decimal(10,4) (该渠道的商户费率,可为空表示使用默认)
status tinyint (0-关闭,1-开启)
created_at datetime
channel (渠道表)
id int PK
channel_code varchar(20) UK
channel_name varchar(50)
status tinyint (0-下线,1-上线)
weight int (路由权重,越大越优先)
priority int (优先级,数字小优先)
cost_rate decimal(10,4) (渠道成本费率)
created_at datetime
channel_config (渠道配置)
id bigint PK
channel_code varchar(20)
param_key varchar(50)
param_value text
encrypted tinyint (0-明文,1-加密)
created_at datetime
payment_order (支付订单)
id bigint PK
order_no varchar(32) UK
merchant_id bigint
merchant_order_no varchar(64)
amount bigint (单位分)
currency varchar(3) default 'CNY'
subject varchar(200)
body text
status tinyint (0-待支付,1-支付成功,2-支付失败,3-已退款,4-关闭)
channel_code varchar(20)
channel_order_no varchar(64)
pay_time datetime
expire_time datetime
notify_url varchar(200)
return_url varchar(200)
client_ip varchar(45)
device_info varchar(100)
created_at datetime
updated_at datetime
index (merchant_id, merchant_order_no) UK
payment_flow (支付流水)
id bigint PK
flow_no varchar(32) UK
order_no varchar(32)
channel_code varchar(20)
request_amount bigint
response_amount bigint
status tinyint (0-处理中,1-成功,2-失败)
error_code varchar(50)
error_msg varchar(200)
request_time datetime
response_time datetime
notify_time datetime
raw_data text (渠道返回原始数据)
created_at datetime
refund_order (退款订单)
id bigint PK
refund_no varchar(32) UK
order_no varchar(32)
merchant_refund_no varchar(64)
amount bigint
reason varchar(200)
status tinyint (0-待退款,1-退款成功,2-退款失败)
channel_refund_no varchar(64)
refund_time datetime
created_at datetime
index (merchant_id, merchant_refund_no) UK
reconciliation_record (对账记录)
id bigint PK
channel_code varchar(20)
bill_date date
order_no varchar(32)
channel_order_no varchar(64)
trade_amount bigint
fee_amount bigint
trade_time datetime
status varchar(20) (match, mismatch, long, short) 匹配状态
created_at datetime
settlement (结算单)
id bigint PK
settle_no varchar(32) UK
merchant_id bigint
start_date date
end_date date
total_amount bigint
fee_amount bigint
net_amount bigint
status tinyint (0-待结算,1-结算中,2-已结算,3-失败)
bank_card_no varchar(30)
bank_name varchar(100)
settle_time datetime
fail_reason varchar(200)
created_at datetime
notify_task (通知任务)
id bigint PK
order_no varchar(32)
merchant_id bigint
notify_url varchar(200)
content text
sta...
福铁科技
专注支付行业 16 年
分享此资讯给好友,自动附带您的名片信息