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

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 加入项目实战

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

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

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

相关文章

Linux操作系统学习:day04

内容来自:Linux介绍 视频推荐:[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0422、通过文字设定法修改用户对文件的操作权限23、通过数字设定法修改文件的权限24、修改文件所有者和所属组25、tree—查看目录内…

Notes客户机开启事务日志

大家好,才是真的好。 了解过事务日志的人都知道——等等,你还不知道事务日志? 那我们先介绍一下,简单来说,Domino事务日志是捕获数据库更改并将其写入的记录,然后等服务器不繁忙或按计划更新到磁盘上的No…

虚拟机怎么额外搭建两个Redis节点,配置多个 Redis 实例

前提条件 在开始之前,请确保你已经具备以下条件: 一台已安装 Redis 的虚拟机。虚拟机上已安装基本的 Linux 工具(例如 FinalShell)。 步骤二:配置额外的 Redis 实例 接下来,我们将配置两个新的 Redis 实…

MYSQL无法启动的修复过程

记录一次MySQ无法启动的修复过程。 1. 错误表现 今天在用python操作数据库时可能有些错误(具体来说就是我尝试创建了一个已经存在的database),结果我发现MySQL中的那个database不存在了,我重启了一下电脑,结果mysql…

数模E题——信号干扰下的超宽带(UWB)精确定位问题

E 题——信号干扰下的超宽带(UWB)精确定位问题 思路:该题主要问题是对干扰进行识别和自适应消除,得到更加理想的定位的结果 代码下载 第一题问题思路与结果: 主要是对文件进行解析并对其中存在的数据丢失进行补偿&am…

网页右键不能审查元素解决办法

网页右键不能审查元素解决办法 1.问题复现2.解决方法 1.问题复现 有的网站右键不能审查元素 这时是javascript 中的onselectstart"return false" 被禁止右键了。 2.解决方法 隐私和安全--->网络设置 网络设置--->javascript 然后回到不能审查元素的网页 …

C++ 03 之 命名空间

game_kun.cpp #include "game_kun.h"void kun::atk() {cout << "吃鸡的攻击"<< endl; } game_lol.cpp #include "game_lol.h"void lol::atk() {cout << "lol的攻击"<< endl; } game_kun.h #include <…

【shell脚本速成】for 嵌套和和 if 高级用法

文章目录 一、for嵌套二、for与数组三、if高级用法3.1、条件符号使用双圆括号&#xff0c;可以在条件中植入数学表达式 if (())3.2、使用双方括号,可以在条件中使用通配符 四、简写if五、与文件存在与否的判断六、课后练习 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &…

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码SVE 软件和库支持SVE 编译参数配置-march=armv8-a+lse+profile+memtag+sve2-aes+sve2-bitperm+crypto+sve2+sve2-sha3+sve2-sm4SVE 汇编语法 在介绍 SVE 汇编指令语法之前,先介绍下如何判断自己所使用的芯片是否实现了SVE功能…

JY-156/1静态电压继电器 板前接线 约瑟JOSEF

JY-150系列电压继电器适用于继电保护线路中&#xff0c;作为过电压保护或低电压闭锁的动作元件。 该产品采用集成电路原理构成&#xff0c;它克服了原来电磁型电压继电器触点易抖动&#xff0c;工作时噪音大&#xff0c;动作值、返回值难调整及运输后动作值易变等缺点&#xff…

什么洗地机好用又实惠?四大口碑优品推荐,超级火爆

作为一个家电工作者&#xff0c;近年来测评了不少洗地机&#xff0c;相对于传统的清洁习惯&#xff0c;即先扫地&#xff0c;再拖地&#xff0c;洗地机能够在一拖一拉之间&#xff0c;便完成地面上的清洁&#xff0c;而且人们也不用低头弯腰的去清洁&#xff0c;可谓是省时省力…

【单片机毕业设计选题24013】-基于STM32的城市垃圾分类引导系统

系统功能: 1、系统具有语音识别功能&#xff0c;可以对厨余垃圾、其他垃圾、有害垃圾、可回收垃圾进行语音识别&#xff1b; 2、系统可根据语音识别结果直接开启对应类别的垃圾桶&#xff0c;引导分类投放&#xff1b; 3、系统具有语音播报功能&#xff0c;可以语音播报出识…

使用 swiper 轮播 echarts 图表,地图点击失效

问题 使用 swiper 轮播 echarts 图表&#xff0c;地图点击失效&#xff0c;伪代码如下 <Swiper><SwiperSlide>...</SwiperSlide>// 轮播中有地图<SwiperSlide><EchartsMap/></SwiperSlide><SwiperSlide>...</SwiperSlide> &…

同三维TT806-1 USB单路网络视频流/U盘采集卡

同三维TT806-1 USB单路网络视频流/U盘采集卡 (1路网络音视频信号或U盘直播推流器) 支持采集1路网络视频流或U盘音视频信号&#xff0c;USB输出到电脑 同时还可流推2个直播平台&#xff0c;可设置6组定时推流&#xff0c;有线网络 可录像到U盘&#xff0c;支持定时录像 一…

05 部署YUM软件仓库

5.1部署YUM软件仓库 5.1.1准备网络安装源 YUM软件仓库通常借助于HTTP或FTP协议来发布&#xff0c;这样可以面向网络中的所有客户机提供软件源服务。 1.准备软件仓库目录 在Center 7 系统的安装光盘中&#xff0c;已针对软件目录Packages建立好repodata数据&#xff0c;因此…

【向量检索】之向量数据库Milvus,Faiss详解及应用案例

Reference https://www.modb.pro/db/509268 笔记︱几款多模态向量检索引擎&#xff1a;Faiss 、milvus、Proxima、vearch、Jina等 - 知乎 (zhihu.com) 向量数据库入坑指南&#xff1a;聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss - 苏洋的文章 - 知乎 常用的三种索引方…

fastapi修改docs文档页面favicon.ico图标

如下图&#xff0c;文档页面默认使用的是tiangolo大神的Logo 如果打开的标签比较多&#xff0c;就不好区分了&#xff0c;想要修改这个logo&#xff0c;可以用fastapi-cdn-host一行代码搞定 fastapi_cdn_host.patch_docs(app, favicon_url/static/logo.png) 例如&#xff1a;…

react-2 jsx的学习

1.什么是JSX&#xff1f; 概念&#xff1a;JSX就是Javascript和XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在js代码中编写HTML模板结构&#xff0c;它是React中编写UI模板的方式&#xff0c;如下图就是jsx: 优势&#xff1a;1.HTML的声明式模板写法&#xff1b;…

铠侠全面复产:NAND价格还会涨吗?

近期&#xff0c;日本经济新闻&#xff08;Nikkei&#xff09;报道指出&#xff0c;经历长达20个月的产能削减后&#xff0c;全球第四大三维NAND闪存制造商铠侠已全面恢复生产。这一转变不仅标志着铠侠再次全力投入到市场份额的争夺中&#xff0c;也可能预示着闪存市场价格即将…

Unity URP下通过相机让部分Render不受后处理渲染

我们有时候不想某些对象受到后处理影响&#xff0c;找到了这样一个决绝办法&#xff0c;通过增加一个Overlay相机只照射这个模型来实现&#xff0c;下面看看如何实现。 第一步 首先我们拖一个测试场景&#xff0c;有如下一些元素 一个盒子&#xff0c;以后后处理&#xff0c…