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

相关推荐
Best_Liu~2 小时前
策略模式 vs 适配器模式
java·spring boot·适配器模式·策略模式
板板正6 小时前
SpringAI——向量存储(vector store)
java·spring boot·ai
野生技术架构师6 小时前
Spring Boot 定时任务与 xxl-job 灵活切换方案
java·spring boot·后端
苹果醋37 小时前
Java并发编程-Java内存模型(JMM)
java·运维·spring boot·mysql·nginx
寒士obj8 小时前
SpringBoot中的条件注解
java·spring boot·后端
vvilkim9 小时前
深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
java·前端·spring boot
原来是好奇心10 小时前
用户登录Token缓存Redis实践:提升SpringBoot应用性能
spring boot·redis·缓存
喂完待续12 小时前
【序列晋升】12 Spring Boot 约定优于配置
java·spring boot·spring·架构·约定大于配置·序列晋升·tech arch
每天学习一丢丢15 小时前
SpringBoot + Vue实现批量导入导出功能的标准方案
vue.js·spring boot·后端
BillKu17 小时前
Spring Boot Controller 使用 @RequestBody + @ModelAttribute 接收请求
java·spring boot·后端