Springboot 支付宝分账业务实践

千门万户曈曈日,总把新桃换旧符。

1 前言

在前文中已经讲述了支付宝的支付业务内容,在本文中将介绍商户分账的业务。通常情况下在支付业务完成后会进行分账和分佣业务,如下图所示,当用户进行一笔支付后,可以由商户发起分账操作(给渠道方和物流方进行分账)。支付的分账涉及到分账账户的绑定以及分账比例的设置,在支付完成后的分账只是最后分账的执行操作而已。

2 分账API

分账的操作涉及分账的关系维护、解绑和查询,交易分账结算,分账查询接口。以下是支付宝分账相关的业务概念:

bash 复制代码
出账支出方:资金账户的转出方,即交易商户账户,分账时要保障分账资金充足。
分账收入方:分账的收入方账户,一般是服务商或者供货商,也可以是个人账户。
服务商:即商户账户,一般就是卖家账户。
分账关系:就是分账收入方和支出方的关系,即商户交易后需要分账的账户集,每个商户能分到一部分的资金。

这里需要说明是的单个商户的分账比例一般不超过30%,如果需要超过比例,需要在商户后台设置。
# 支付宝分账产品文档
https://opendocs.alipay.com/open/20190308105425129272/intro

支付宝关于商家分账的API主要有以下内容:

bash 复制代码
1 分账关系维护
# 绑定分账关系,用户维护分账关系alipay.trade.royalty.relation.bind
# 分账关系解绑,alipay.trade.royalty.relation.unbind
# 查询商户已经绑定的关系 alipay.trade.royalty.relation.batchquery

2 分账请求
# 用户交易完成后进行交易分账 alipay.trade.order.settle

3 分账查询
# 根据分账单查询分账单的比例 alipay.trade.royalty.rate.query
# 根据商户交易号查询剩余分账金额 alipay.trade.order.onsettle.query
# 查询用户分账结果信息 alipay.trade.order.settle.query

3 业务操作

关于分账的业务,如下图所示。系统的每个商户都会绑定几个分账账户,并且配置每个账户的分账比例。每当客户确认一笔交易时,商户会收到一笔交易款,需要按照商户之前配置的分账比例进行分账的操作,这个操作的时机需要根据商户的业务来确定。这里需要说明的是,所有商户的分账比例之和不能大于 100%。

这里只是展示了订单和交易的内容,一笔交易订单会对应一笔交易支付记录,每条交易支付记录会对应多条交易分账明细。

4 分账实践

绑定分账关系,每次请求需要设置请求单号,绑定关系实体需要设置支付宝用户的姓名和支付宝用户的Id,关系类型是 userId, 还要设置绑定关系的描述信息。如果绑定关系设置成功,需要将分账绑定关系保存到数据库中,用户分账时进行查询分账规则。

解绑分账关系,和分账绑定关系请求参数类似,需要将解绑的关系同步到数据库中,这里在绑定关系表中设置状态参数,用于标识绑定关系的禁用和启用。

分账绑定关系查询列表,这里采用的是分页查询,每次需要设置查询的请求号,返回的结果是已经绑定的分账关系。

下图是分账交易的参数,需要传入的是交易单号和分账请求号,分账业务参数需要从分账关系中获取,设置分账入账账号信息,以及分账金额。当分账请求成功后需要记录分账结果的分账单号以及分账结果。

对于分账结果,需要根据分账单号进行查询,所以在实际分账时需要根据单号进行查询,看是否已经存在或者处理成功,这样可以保证接口的幂等性。

5 总结

在本文中主要介绍了支付宝分账的业务内容,以及对应的代码实践,分账是一个交易完成后的业务,需要按照分账绑定关系和商户信息进行综合计算分账金额,整个过程涉及用户金额,需要严格设计,保证接口的幂等性。本文中所涉及的代码均已上传至 git 仓库,欢迎大家 stars, 项目 github 地址 springboot-auth

相关推荐
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
ChaHae-In10 小时前
SpringBoot统一功能处理
java·spring boot·后端
今天的砖头有点烫手啊17 小时前
接口太慢?Spring Boot 缓存体系 @Cacheable 全链路拆解
spring boot·后端·缓存
zzzll111119 小时前
Spring Boot 入门指南:从零开始构建微服务
spring boot·后端·微服务
用户31268748772019 小时前
你的定时任务真的靠谱吗?Spring Boot @Scheduled 全链路拆解
spring boot
你住过的屋檐20 小时前
【Java】Argon2实现密码加密以及在springboot中使用教程
java·开发语言·spring boot·安全
程序员天天困21 小时前
Spring Boot i18n 国际化实战:从资源文件到多语言接口完整指南
spring boot·后端·编程语言
孫治AllenSun1 天前
【SpringBoot】计算机网络
spring boot·后端·计算机网络
Flittly2 天前
【雕虫大技】Agent 动态 Skill 供应链安全加固(二):执行隔离沙箱实战
java·spring boot·spring
代码什么用2 天前
Spring Task AND WebSocket
java·spring boot