likes
comments
collection
share

Springboot 支付宝分账业务实践

作者站长头像
站长
· 阅读数 6

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

1 前言

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

Springboot 支付宝分账业务实践

2 分账API

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

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

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

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

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%。

Springboot 支付宝分账业务实践

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

4 分账实践

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

Springboot 支付宝分账业务实践

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

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

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

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

5 总结

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