1 交易系统技术架构
预付卡支付交易系统采用Dubbo3作为底层框架,支付交易系统分为账户系统、清结算系统、支付网关、核心支付系统等模块。系统整体采用微服务架构,容器化部署。
2 消费业务流程设计
预付卡系统消费场景分为线上和线下,线下可以使用实体卡和电子卡进行消费。线上消费场景依托预付卡小程序和APP,互联网用户可以通过小程序和APP在支持预付卡的商户进行消费
2.1 消费业务流程
消费业务流程主要涵盖了线下交易和线上交易,本文主要分析线下POS消费交易流程,参与的系统主要包含了POS终端、卡系统-支付交易系统、授权系统。以下是业务流程图
2.2 消费接口设计
2.2.1 通信协议
HTTP/JSON
2.2.2 接口定义
交易码:
交易码名称 | 操作码说明 |
---|---|
VOUCHER-PAY | 卡消费 |
参数名 | 必/可选 | 类型 | 长度 | 参数说明 | 约束 |
---|---|---|---|---|---|
voucherId | 必选 | 字符 | 32 | 卡/劵号 | 多张劵号以,分割 |
channel | 必选 | 字符 | 1 | 消费来源 | 1:旅游 2:生活服务 |
checkPwd | 必选 | 字符 | 1 | 是否校验密码 | 0:不校验 1:校验密码 |
payType | 必选 | 字符 | 1 | 消费类型 | 1:现金卡2:点卡 |
password | 可选 | 字符 | 6 | 密码 | checkPwd=1必选 |
payJournal | 必选 | 字符 | 16 | 统一支付流水号 | 统一支付保证流水唯一 |
payTime | 必选 | 字符 | 32 | 消费时间 | yyyyMMddHHmmss |
payAmount | 必选 | 数字 | 10 | 消费金额 | |
settleAmount | 必选 | 数字 | 10 | 结算金额 | 结算金额 |
extendInfo | 可选 | 字符 | 1024 | 接口扩展字段 |
响应信息定义:
参数名 | 必/可选 | 类型 | 长度 | 参数说明 | 约束 |
---|---|---|---|---|---|
respCode | 必选 | 字符 | 返回代码 | ||
respMess | 必选 | 字符 | 返回消息 | ||
tradeJournal | 必选 | 字符 | 交易流水 | ||
balance | 可选 | 字符 | 卡余额 | 卡消费必选 |
2.2.3 消息样例
请求消息
{"VoucherPay": {"voucherId": "","channel": "","checkPwd": "","payType": "","password": "","payJournal": "","payTime": "","payAmount": "","settleAmount": "","extendInfo": ""}
}
响应消息
{"VoucherPayResp": {"respCode": "0","respMess": "成功","tradeJournal": "20240617191100","balance": "198.25"}
}
3 消费撤销业务流程设计
3.1 消费撤销业务流程
消费撤销业务流程主要涵盖了线下交易和线上交易,参与的系统主要包含了POS终端、卡系统-支付交易系统、授权系统。消费撤销流程和上图的消费流程基本一致,本文只对消费撤销接口设计进行分析
3.2 消费撤销接口设计
3.2.1 通信协议
HTTP/JSON
3.2.2 接口定义
交易码:
交易码名称 | 操作码说明 |
---|---|
PAY-ROLLBACK | 消费撤销 |
请求信息定义如下:
参数名 | 必/可选 | 类型 | 长度 | 参数说明 | 约束 |
---|---|---|---|---|---|
voucherId | 必选 | 字符 | 32 | 卡/劵号 | 多张劵号以,分割 |
channel | 必选 | 字符 | 1 | 消费来源 | 1:旅游 2:生活服务 |
serviceType | 必选 | 字符 | 1 | 业务类型 | 2:冲正(POS机自动发起)3:撤销(操作员发起)4:退货(订单部分退) |
payType | 必选 | 字符 | 1 | 消费类型 | 1:现金卡2:点卡 |
payJournal | 必选 | 字符 | 32 | 统一支付流水号 | 统一支付保证流水唯一 |
retJournal | 必选 | 字符 | 32 | 原支付流水号 | 统一支付保证流水唯一 |
payTime | 必选 | 字符 | 32 | 消费撤销时间 | yyyyMMddHHmmss |
payAmount | 可选 | 数字 | 10 | 消费金额 | |
settleAmount | 可选 | 数字 | 10 | 结算金额 | 结算金额 |
extendInfo | 可选 | 字符 | 1024 | 接口扩展字段信息 |
响应信息定义:
参数名 | 必/可选 | 类型 | 长度 | 参数说明 | 约束 |
---|---|---|---|---|---|
respCode | 必选 | 字符 | 返回代码 | ||
respMess | 必选 | 字符 | 返回消息 | ||
tradeJournal | 必选 | 字符 | 交易流水 | ||
balance | 必选 | 字符 | 卡余额 |
3.2.3 消息样例
请求消息
{"PayRollback": {"voucherId": "","channel": "","serviceType": "","payType": "","payJournal": "","retJournal": "","payTime": "","payAmount": "","settleAmount": "","extendInfo": ""}
}
响应消息
{"PayRollbackResp": {"respCode": "0","respMess": "成功","tradeJournal": "20240617191100","balance": "98.25"}
}
4 加入项目实战
欢迎关注我的视频号,视频号有相关技术和业务视频可学习支付业务/文旅行业数字化。探讨技术(系统架构、微服务、容器化、云原生),支付系统项目实战请加入我的付费社群。商务合作备注业务咨询