分账系统开发之支付宝分账接入操作方法
完成支付相关分账账户申请的接入准备后,商家/服务商可根据本文指引快速接入 商家分帐。支付分账系统开发欢迎和李铁牛交流:15889726201
说明:
- 商家分帐 仅支持自研商家/服务商通过 自研应用 或 第三方应用 代调用方式,调用 API 接入。
- 商家分帐 暂不支持沙箱调试。
支付宝分账系统开发之分账流程
支付宝分账系统开发之流程说明
- 分账前需先通过 alipay.trade.royalty.relation.bind(分账关系绑定接口),将分账收入方添加到分账关系集中,分账关系集最多添加 2 万个。
- 需要分账的订单,交易下单时,可在下单接口中传入冻结标识(
extend_params.royalty_freeze
),将交易资金预先冻结在商家支付宝余额中。 - 交易成功后,通过 alipay.trade.order.settle(统一收单交易结算接口)发起分账请求,一笔订单支持多次分账,总分账金额不能超过订单总金额(total_amont)的 30%。
- 分账请求提交后,支付宝会自动将冻结资金解冻后转出到收款方,并同步返回分账最终处理结果。若分账请求量较大,可选择异步模式接入。
- 最后一笔分账时,可同时传入分账完结标识,则本次分账完成后自动将剩余资金解冻。也可以分账结束后再次调用 alipay.trade.order.settle(统一收单交易结算接口)接口,不传入分账条款仅传入分账完结标识,完成剩余金额解冻。
- 可通过 alipay.trade.order.settle.query(交易分账查询接口)查询分账结果。
- 若已分账资金需要退回,通过 alipay.trade.refund(统一收单交易退款接口)申请分账资金退回。
支付宝分账系统开发之分账模式说明
若分账业务较多,可选择异步模式接入,同步/异步接入模式说明:
- 同步模式:调用分账接口后,支付宝实时进行分账处理,分账接口同步返回分账的最终结果。
- 异步模式:调用分账接口后,支付宝先受理分账请求,异步进行分账处理,分账处理结果请通过分账查询接口或者分账异步通知消息获取最终的分账结果。
同步模式及异步模式差异说明(其他业务规则、资金流、冻结模式处理两者完全一致):
分账接入模式 |
同步模式 |
异步模式 |
一笔订单最多可以发起多少次分账请求 |
50次 |
300次 |
一笔分账请求最多可以传入多少个分账收款方 |
10个 |
50个 |
一笔分账请求传入多个分账收款方时,分账失败处理规则 |
一个收款方失败则全部失败,即只能全部成功或全部失败 |
一个收款方失败,其他仍可成功,即可部分成功、部分失败 |
分账结果获取方式 |
以分账同步返回结果为准 |
以分账查询/异步通知结果为准 |
单商家分账请求频率 |
最高30tps/s |
最高500tps/s |
模式特点 |
适用分账请求较少场景,技术集成简单 |
适用分账请求较多,需要高分账性能保障的场景 |
支付宝分账系统开发之异步模式系统交互说明
分账系统开发之分账规则
- 分账成功后,资金实时转入分账收入方账号。
- 下单时可选是否使用冻结能力:
-
- 下单时传入分账冻结标识:资金结算到商家支付宝余额后,会先处于冻结状态,未分账资金需要通过分账接口传入分账完结标识解冻,若商家一直未发起解冻,系统默认在30天后自动将剩余资金解冻,解冻后仍可发起分账,支付宝余额账户有资金即可分账成功,若余额不足则分账失败。
- 下单时未传入分账冻结标识:资金结算到商家支付宝可用余额,可按需发起分账操作,账户余额充足即可分账成功,若余额不足则分账失败。
- 分账请求需明确分账的收入方,分账收入方只支持支付宝账户,可以为个人支付宝或企业支付宝账号。
- 分账请求必须传入具体的分账金额,按传入的分账金额进行分账处理,不支持按比率自动分账。
- 总分账金额不能超过 订单金额 * 分账比例(默认 30%)。
- 分账请求频率说明:
-
- 支付成功后建议 30s 后再发起分账。
- 基于同一笔订单的多次分账请求建议间隔 3s。
分账系统开发之退分账流程
开发者通过 alipay.trade.refund(统一收单交易退款接口)进行退款、退分账。
退分账规则:
- 当面付、预授权 产品只支持 按退款比例自动退分账。
示例:订单 100 元,分账 10 元,商家发起退款 10 元时,支付宝自动按照退款比例,等比例退分账 1 元,不需要商家单独传入退分账条款。 - 其他产品必须指定退分账。
示例:订单 100 元,分账 10 元,商家发起退款 10 元时,支付宝只处理退款 10 元,不会自动进行退分账。商家若需要退分账需要传入退款金额10元、退分账金额1元。 - 同一笔退分账请求中,有任意一笔退分账失败,则这次请求的全部退分账处理均会失败。
- 退分账默认从分账收入方账号退回,若分账收入方账号余额不足则退分账失败。
分账系统开发之接口入参示例
alipay.trade.order.settle
alipay.trade.order.settle(统一收单交易结算接口)重要入参说明
关键字段 |
描述 |
备注 |
royalty_mode |
分账模式 |
同步执行: 异步执行: 不传默认同步执行。 |
royalty_parameters |
正向分账明细信息 |
复杂类型,需要指定资金处理类型 royalty_type 和目标账户 trans_in。 |
–royalty_type |
分账类型 |
分账场景传入:transfer。可为空,为空时默认为分账。 |
–trans_out_type |
支出方账户类型 |
本场景不需要传入。 |
–trans_out |
支出方账户 |
本场景不需要传入。 |
–trans_in_type |
收入方账户类型 |
userId:表示是支付宝账号对应的支付宝唯一用户号。 loginName:表示是支付宝登录号。 |
–trans_in |
收入方账户 |
|
–amount |
分账金额 |
本次分账要分出的金额。 |
–desc |
分账描述 |
会在分账收入方支付宝账户 余额明细 备注字段中展示。 |
extend_params |
||
–royalty_finish |
分账完结标识 |
完结:true 不完结:false |
分账只能从交易的收款账户分出,因此不需要在分账接口中传入支出方账户。若传入系统会进行校验,传入账户与交易收款账户不一致会导致分账失败。
分账场景,同时上送完结标识,将剩余资金解冻。示例代码如下:
{ "biz_content": { "out_request_no": "settle201804120000", "trade_no": "2018040321001004090500070489", "royalty_parameters": [{ "trans_in_type": "loginName", "trans_in": "kaikai@126.com", "amount": 20, "desc": "1.1日物流服务费" }], "extend_params": { "royalty_finish": "true" } } }
不分账,单独发起完结请求,将剩余资金解冻。示例代码如下:
{ "biz_content": { "out_request_no": "settle201804120000", "trade_no": "2018040321001004090500070489", "extend_params": { "royalty_finish": "true" } } }
alipay.trade.refund
alipay.trade.refund(统一收单交易退款接口)重要入参说明
关键字段 |
描述 |
备注 |
refund_amount |
退款金额 |
退款金额为实际退回买家的金额。需要退款则传入具体退款金额,只退分账则退款金额传入 0 即可。 |
refund_royalty_parameters |
复杂类型 |
退分账信息 |
–royalty_type |
分账类型 |
传入:transfer |
–trans_out_type |
支出方账户类型 |
userId:表示是支付宝账号对应的支付宝唯一用户号。 loginName:表示是支付宝登录号。 |
–trans_out |
支出方账户 |
分账请求中,trans_in 填写的收款账号,即为本次退分账时的支出账号,填写到该字段。 |
–trans_in_type |
收入方账户类型 |
本场景不需要传入 |
–trans_in |
收入方账户 |
本场景不需要传入 |
–amount |
退分账金额 |
传入本次要退分账的金额 |
退分账默认退回到交易的收款账户,因此不需要在分账接口中传入退分账的收入账户。若传入系统会进行校验,传入账户与交易收款账户不一致会导致退分账失败。
{ "biz_content": { "trade_no": "2018040321001004090500070489", "refund_amount": 0, "out_request_no": "refundttss_201804120000001", "refund_royalty_parameters": [ { "royalty_type":"transfer", "trans_out_type": "loginName", "trans_out": "kaikai@126.com", "amount": 20, "desc": "1.1日服务费退回" } ] } }