当前位置: 首页 > news >正文

(微服务实战)聚合支付系统商户线上聚合收银台接口设计

1 概述

聚合支付收款分为线上和线下业务场景,本文中的商户收银台接口设计主要是指线上业务场景,线下业务场景聚合收款方式后续会进行单独设计和分析。

主流的线上支付渠道有微信支付,支付宝支付,云闪付。这三种支付渠道都有各自的线上收款产品APP支付、H5支付、小程序支付、扫码支付、公众号支付 。dtpay聚合支付系统商户收银台接口产品主要整合支付渠道不同的线上收款场景,让线上商户快速接入各渠道支付场景。
在这里插入图片描述

2 线上聚合收银台技术架构

系统采用SpringCloud,SpringCloudAalibaba微服务架构,系统采用容器化(Docker,K8S)部署,以下是技术架构使用的技术栈
在这里插入图片描述

3 商户线上聚合收银台接口

商户聚合收银台接口采用接口对接或SDK方式给到商户自助对接,收银台接口系统各参与方有商户系统、dtpay商户线上聚合收银台接口系统、支付渠道方。商户不需要对接各支付渠道的支付产品,通过聚合收银台快速完成收款方式的对接。
在这里插入图片描述

4 收银台接口设计

收银台接口主要涵盖以下接口统一下单支付接口、支付通知接口、支付查询接口

4.1 统一支付下单支付接口设计

4.1.1 请求方式

POST/JSON

4.1.2 请求参数
字段名称类型长度必输备注
mercOrderNo商户订单号String32商户自己生成的唯一的订单号,商户订单号+商户号唯一
subject订单名称String100订单名称、订单说明两者必填其一
body订单说明String200订单名称、订单说明两者必填其一
tradeType交易类型String201-支付 02-代付 03-提现
tradeAmt订单金额String12交易金额(单位元,带两位小数,例:1.23,最大整数16位)
feeType币种String默认是CNY:人民币,当前版本暂不支持其它币种。
tradeTime提交支付时间String14格式[yyyyMMddHHmmss] ;
orderPeriod订单有效时间String14订单有效期(单位分钟)
notifyUrl后台通知地址String200支付成功时,后台通知商户的地址,必须为http/https协议地址
returnUrl前台通知地址String200支付成功是,前台页面跳转的提示页面,为空不发前台通知,必须为http/https协议地址
refererUrl客户端地址String200重定向地址,可直接跳转到商户页面(不会附加参数返回)
termType终端接入类型String8固定值:wap,pc,app
paywayCode支付方式String20alipay-支付宝 wxpay-微信支付 unionpay-银联支付例如:当微信支付时传值 wxpay
sceneCode场景编号String20h5-H5支付app-APP支付scan-扫码支付jspay-公众号支付ebank-网银支付gateway-网关支付例如:当支付场景为H5支付时传值“h5”注:当支付方式选“ebank”即网银支付时,场景编号传送值为“ebank”;
ip客户端IP(外网IP)String32
merchantId商户编号String8
storeId门店编号String8
payeeId收银员编号String8
remark备注String100
attach附加信息String128
deviceInfo应用类型String16如果是应用于苹果app,应用里值为IOS_SDK;如果是应用于安卓app,应用里值为AND_SDK;如果是应用于手机网站,应用里值为WAP_SDK,微信h5必输
mchAppName应用名String256如果是用于苹果或安卓app应用中,传分别对应在AppStore和安卓分发市场中的应用名(如:王者荣耀)如果是用于手机网站,传对应的网站名(如:天猫官网)微信h5必输
mchAppId应用标识String128如是是用于苹果或安卓app应用中,苹果传IOS应用中唯一标识(如:com.tencent.wzryIOS),安卓传包名(如:com.tencent.tmgp.sgame)如果是用于手机网站,传网站首页URL地址,必须保证公网能正常访问(如:www.itbeien.cn)>微信h5必输
bankCode网银银行编码String20网银支付必传,见银行代码
payType支付卡类型String11 借记卡 2 贷记卡 3借/贷记卡均可使用。网银支付传此参数,不传默认为1,即 借记卡
quickPayAttach快捷支付参数String快捷支付直连时必输
4.1.3 同步响应参数
字段名称类型长度必输备注
mercOrderNo商户订单号String商户自己生成的唯一的订单号
tradeType交易类型String01-支付 11-充值 02-代付 03-提现
tradeAmt交易金额String交易金额
tradeTime支付提交时间String订单提交时间,格式[yyyyMMddHHmmss] ;
feeType币种String默认是CNY:人民币,当前版本暂不支持其它币种。
termType终端接入类型String固定值:wap,pc,app
orderId平台订单号String32平台订单号,可以理解成支付平台返回号
codeUrl二维码链接String128二维码链接 扫码必输
imgUrl二维码图片String128二维码图片
payInfo公众号支付信息String128公众号支付信息
mwebUrlH5支付地址String128H5支付地址
bankType付款银行String16银行类型
resultHtml支付formString网银支付返回必输,格式为form表单
4.1.4 响应报文实例
{"orderId":"2024061812582900001378","signature":"5974FF8536CC614F6C2XXXXXXXXXXXX","termType":"wap","mercOrderNo":"D20180315125826","tradeType":"01","codeUrl":"https://www.itbeien.cn/qr/5519dddb","respDesc":"处理成功","feeType":"CNY","mercNo":"ORG1520825458796","tradeTime":"20240618125826","interfaceCode":"pay","respCode":"000000"
}

4.2 支付通知接口

商户回调接口使用HTTPS协议可以保证数据传输的安全性,所以建议商户提供的回调接口采用HTTPS协议。商户交易完成后,由聚合收银台异步推送至商户。商户接受处理成功后,需返回给平台success。

4.2.1 通知结果参数列表
字段名称类型长度必输备注
mercOrderNo商户订单号String商户自己生成的唯一的订单号
tradeType交易类型String01-支付 11-充值 02-代付 03-提现
tradeAmt交易金额String交易金额
tradeTime支付提交时间String订单提交时间,格式[yyyyMMddHHmmss] ;
feeType币种String默认是CNY:人民币,当前版本暂不支持其它币种。
termType终端接入类型String固定值:wap,pc,app
orderId平台订单号String32平台订单号,可以理解成支付平台返回号
tradeEndTime交易完成时间String支付平台保证精确的支付交易完成时间。
payStatus支付状态Stringp0001 :提交订单 p0002:支付中 p0000 :支付成功 p0004:支付失败 p0005:已取消 p0006:过期已作废
bankType付款银行String16银行类型
4.2.2 支付异步通知参数示例
{"tradeAmt":"0.01","charset":"UTF-8","orderId":"2024061812582900001378","signature":"0B5E5BAD0C447582A99618EEB0A35567","termType":"wap","mercOrderNo":"D20180315125826","feeType":"CNY","locale":"CN","tradeEndTime":"20240618125846","version":"1.0","mercNo":"ORG1520825458796","tradeTime":"20240618125828","signType":"MD5","payStatus":"p0000","tradeType":"01"
}
4.2.3 通知结果反馈

聚合收银台通过 notifyUrl 通知商户,商户做业务处理后,需要以字符串的形式反馈处理结果,内容如下:

返回结果结果说明
success处理成功
fail处理不成功
4.2.4 补单机制

注意:聚合收银台通知交互模式,如果聚合收银台收到商户的应答不是纯字符串success或超过5秒后返回时,聚合收银台认为通知失败,聚合收银台会通过一定的策略(通知频率为10/10/10/10/10,单位:秒)间接性重新发起通知,尽可能提高通知的成功率,但平台不保证通知最终能成功。由于存在重新发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。聚合收银台推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回纯字符串success。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重复插入数据造成的数据混乱。

5 加入项目实战

欢迎关注我的视频号,视频号有相关技术和业务视频可学习支付业务/文旅行业数字化。探讨技术(系统架构、微服务、容器化、云原生)
在这里插入图片描述

相关文章:

(微服务实战)聚合支付系统商户线上聚合收银台接口设计

1 概述 聚合支付收款分为线上和线下业务场景,本文中的商户收银台接口设计主要是指线上业务场景,线下业务场景聚合收款方式后续会进行单独设计和分析。 主流的线上支付渠道有微信支付,支付宝支付,云闪付。这三种支付渠道都有各自…...

【漏洞复现】CRMEB开源电商系统 /api/products SQL注入漏洞(CVE-2024-36837)

0x01 产品简介 CRMEB开源电商系统是一款由西安众邦网络科技有限公司打造的全栈式电商解决方案,旨在为开发者和商家提供高性能、智能化的电商平台服务。该系统集成了CRM(客户关系管理)、ERP(企业资源规划)和EB(电子商务)的功能,通过深度结合这些功能&…...

摄像头图像矫正的表格生成方法

1.设置单元格高宽 点击表格左上角 的 小三角 列宽: HOME -> Rows and Columns -> Column Width 5 CM 行高: HOME -> Rows and Columns -> Row Height 5 CM 2.设置 条件格式 HOME -> Conditional Formatting-> Manager Rules 点击 左上方 New Rule…...

【Arc gis】Arc gis出现ERROR 999999问题的解决办法

地址:ArcGIS中ERROR 999999报错Configuration RasterCommander ImageServer can not be started解决_投影栅格失败error999999-CSDN博客...

优化 Flutter 应用开发:探索 ViewModel 的威力

介绍 1.1 什么是 ViewModel? ViewModel,顾名思义,就是视图的模型。在 Flutter 中,ViewModel 是一种用于管理视图状态和业务逻辑的重要概念。它承载了应用程序的核心功能,像是一个精心设计的控制中心,负责…...

Android开发系列(四)Jetpack Compose之Button

在Jetpack Compose中,Button是一个常用的用户界面组件,用于执行某些操作或触发某些事件。Button控件是可触摸的,并且通常会显示一个文本或图标来表示其功能。 要在Jetpack Compose中创建一个Button,可以使用Button()函数&#xf…...

Java17 --- RabbitMQ之插件使用

目录 一、Federation插件 1.1、运行两个rabbitmq实例 1.2、启用插件 1.3、在下游端点添加上游端点 1.4、创建策略 1.6、测试 二、联邦队列 2.1、创建策略 2.2、创建交换机与队列 2.2.1、创建52000的队列与交换机 2.2.2、创建62000的队列 三、Shovel 3.1、启…...

6.18总结

省赛排位赛2&#xff1a; 省赛排名赛2 - Virtual Judge 思路&#xff1a; 设两个方程直接解出来就行 代码&#xff1a; #include<bits/stdc.h> using namespace std; int n, m; int main() {int n, m;int ans1, ans2;cin >> n >> m;ans1 n - (-3 sqr…...

【ARM Cache 及 MMU 系列文章 1.4 -- 如何判断 L3 Cache 是否实现?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cluster Configuration Register代码实现什么是Single-Threaded Core?什么是PE(Processor Execution units)?Single-Threaded Core与PE的关系对比多线程(Multithreading)Cluster…...

打印mybatis的sql日志

1、application.xml: logging.level.com.xxx.xxx.daodebug2、log4j2.xml: <Logger name"com.xxx.xxx.dao" level"debug" additivity"true" />...

QT day4(对话框 事件机制)

1&#xff1a;思维导图 2&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->setupUi(this);//去除头部this->setWindowFlag(Qt::Frameles…...

序列化与反序列化漏洞实例

实验环境&#xff1a; 本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目&#xff0c;我使用phpstudy集成环境将其测试环境搭建在了本地&#xff0c;如下。涉及的几个页面php为&#xff1a; index.php function.php myclass.php index.php : <?php // inde…...

6、while循环 - 习题解析

目录 解析部分&#xff1a;分支练习1244. 请问一个正整数能够整除几次2问题描述解题思路代码实现代码解析 1062. 求落地次数问题描述解题思路代码实现代码解析 1254. 求车速问题描述解题思路代码实现代码解析 1261. 韩信点兵问题描述解题思路代码实现代码解析 解析部分&#xf…...

ReentrantLock可重入锁

可重⼊锁&#xff0c;这个锁可以被线程多次重复进⼊进⾏获取操作。 ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法&#xff0c;除了能完成synchronized所能完成的所有⼯作 外&#xff0c;还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。 在并发量…...

如何秒杀系统架构设计

原文路径:https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%…...

深度神经网络——什么是降维?

引言 什么是降维&#xff1f; 降维是用于降低数据集维度的过程&#xff0c;采用许多特征并将它们表示为更少的特征。 例如&#xff0c;降维可用于将二十个特征的数据集减少到仅有几个特征。 降维通常用于无监督学习任务 降维是一个用于降低数据集维度的过程&#xff0c;采用许…...

SpringMVC—RequestMapping注解

一、RequestMapping注解 RequestMapping注解&#xff1a;是Spring MVC框架中的一个控制器映射注解&#xff0c;用于将请求映射到相应的处理方法上&#xff0c;具体来说&#xff0c;他可以将指定URL的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 …...

Java线程池基本概念

全局和局部线程池 全局线程池 在Spring框架中&#xff0c;全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的&#xff0c;它们的生命周期由Spring容器管理。当Spring容器关闭时&#xff0c;这些线程池也会被适当地清理和关闭。因此&#xff0c;开发者通常不需要手…...

智能车联网安全发展形势、挑战

一、技术演进加速车联网安全环境复杂变化 当前&#xff0c;5G、大数据、大算力、大模型等技术正加速在车联网领域实现融合应用。车联网的网络通信能力、感知计算水平以及创新业务应用都在快速发展&#xff0c;与此同时&#xff0c;车联网的网络安全环境也在随之演进变化&#…...

AWS概述

AWS概述EMR Serverless Aamzon Web Services提供了一系列全球范围的云产品&#xff0c;包括计算、存储、数据库、分析、网络、移动、开发工具、管理工具、IoT、安全和企业应用&#xff1a;按需交付、及时可用、采用随用随付的定价模式。你可以畅享200多种服务&#xff0c;从数据…...

playwright-skill解决Web自动化登录难题:从表单交互到会话持久化

playwright-skill解决Web自动化登录难题&#xff1a;从表单交互到会话持久化 【免费下载链接】playwright-skill Claude Code Skill for browser automation with Playwright. Model-invoked - Claude autonomously writes and executes custom automation for testing and val…...

AI智能二维码工坊 vs 传统方案:OpenCV+QRCode性能对比评测

AI智能二维码工坊 vs 传统方案&#xff1a;OpenCVQRCode性能对比评测 二维码&#xff0c;这个黑白相间的小方块&#xff0c;早已渗透进我们生活的方方面面。从扫码支付到添加好友&#xff0c;从产品溯源到活动签到&#xff0c;它无处不在。作为开发者&#xff0c;我们经常需要…...

洛谷-入门4-数组4

P5732 【深基5.习7】杨辉三角题目描述给出 n(1≤n≤20)&#xff0c;输出杨辉三角的前 n 行。如果你不知道什么是杨辉三角&#xff0c;可以观察样例找找规律。输入格式无输出格式无输入输出样例输入 #1复制6输出 #1复制1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1实现代码&…...

GLM-4V-9B Streamlit交互设计解析:侧边栏上传+实时渲染+历史回溯实现

GLM-4V-9B Streamlit交互设计解析&#xff1a;侧边栏上传实时渲染历史回溯实现 1. 引言 你有没有遇到过这样的情况&#xff1a;拿到一个功能强大的AI模型&#xff0c;官方给的示例代码却在自己的电脑上跑不起来&#xff0c;要么是显存不够&#xff0c;要么是各种奇怪的报错&a…...

Python算法优化:从理论到实践

Python算法优化&#xff1a;从理论到实践 1. 背景与意义 在数据科学和AI应用中&#xff0c;算法的效率直接影响系统性能。作为一名Python开发者&#xff0c;掌握算法优化技巧不仅能提升代码质量&#xff0c;还能显著提高应用性能。本文将深入探讨Python中常见算法的优化策略&…...

深入ProtoBuf编译:从Google.Protobuf.dll到Protoc.exe的完整实践指南

1. ProtoBuf基础与编译环境搭建 Protocol Buffers&#xff08;简称ProtoBuf&#xff09;是Google开发的一种高效数据序列化工具。我第一次接触ProtoBuf是在处理微服务通信时&#xff0c;当时被它比JSON快3-5倍的序列化速度震惊了。简单来说&#xff0c;ProtoBuf就像是个智能的数…...

FireRedASR-AED-L语音识别模型WebUI快速部署教程:Python环境一键配置

FireRedASR-AED-L语音识别模型WebUI快速部署教程&#xff1a;Python环境一键配置 语音识别技术正在快速融入我们的日常开发&#xff0c;无论是做智能客服、会议纪要&#xff0c;还是内容审核&#xff0c;一个好用的识别模型都能省下大量时间。但很多朋友在第一步——环境部署上…...

达摩院春联生成模型实战:输入两字祝福词,自动生成上下联和横批

达摩院春联生成模型实战&#xff1a;输入两字祝福词&#xff0c;自动生成上下联和横批 1. 春联生成模型简介 1.1 模型核心功能 达摩院AliceMind团队开发的春联生成模型是一款基于PALM大模型的专用AI工具&#xff0c;它能将简单的两字祝福词转化为完整的春联作品。这个模型特…...

SAM3镜像部署:一键启动,开箱即用的文本引导分割工具

SAM3镜像部署&#xff1a;一键启动&#xff0c;开箱即用的文本引导分割工具 1. 快速入门指南 1.1 镜像概述 本镜像基于Meta最新发布的SAM3&#xff08;Segment Anything Model 3&#xff09;算法构建&#xff0c;通过二次开发集成了直观的Gradio Web交互界面。无需任何编程基…...

Cursor试用限制如何解决?go-cursor-help工具三合一方案详解

Cursor试用限制如何解决&#xff1f;go-cursor-help工具三合一方案详解 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro…...