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

相关推荐
风象南4 分钟前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
写不出来就跑路1 小时前
暑期实习感悟与经验分享:从校园到职场的成长之路
java·开发语言·经验分享·spring boot
程序员张35 小时前
Maven编译和打包插件
java·spring boot·maven
灵犀学长7 小时前
EasyExcel之SheetWriteHandler:解锁Excel写入的高阶玩法
spring boot·excel
zwjapple7 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
DuelCode10 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社210 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理10 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码10 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
Code blocks12 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins