资金结算给二级商户后,平台商根据与二级商户约定的分账比例,将资金分到分账接收方。一般用于平台向二级商户抽佣场景。支付宝、微信、在线支付分账系统开发技术交流,欢迎和李铁牛程序员交流。
分账发起方:发起分账的一方,这里指平台商;
分账支出方:分账资金的转出方。二级商户不需要签署分账协议即可分账。
分账接收方:接收分账资金的一方,平台商已被默认添加为接收方,二级商户可直接向平台商进行分账;其他接收方,平台商通过分账关系绑定接口,建立平台维度统一的 分账接收方列表,添加成功后,所有二级商户均可向其分账。分账接收方必须为实名认证的支付宝账户。
分账关系集:平台维度统一的 分账接收方列表,又称为 分账关系集。使用分账产品,需要将分账接收方维护在 分账关系集 内,否则分账会被拦截。可以通过分账关系维护接口来完成 分账关系集 的添加、删除和查询。
默认情况下为同步分账模式,调用分账接口后,支付宝实时进行分账处理,分账接口同步返回分账的最终结果。同步分账对请求频率、单次传入的分账收款方有限制。如果分账频率超过30tps,或者单次分账的收款方超过 5 个,建议接入异步分账。
支付宝分账接入模式:
分账接入模式 |
同步模式 |
异步模式 |
一笔订单最多可以发起多少次分账请求 |
50次 |
300 次 |
一笔分账请求最多可以传入多少个分账收款方 |
5 |
50 |
一笔分账请求传入多个分账收款方时,分账失败处理规则 |
一个收款方失败则全部失败,即只能全部成功或全部失败。 |
一个收款方失败,其他仍可成功,即可部分成功、部分失败。 |
分账结果获取方式 |
以分账同步返回结果为准。 |
以分账查询/异步通知结果为准。 |
单商户分账请求频率 |
最高 30tps/s。 |
最高 500tps/s。 |
模式特点 |
适用分账请求较少场景,技术集成简单。 |
适用分账请求较多,需要高分账性能保障的场景。 |
建议平台商在确认结算时,先进行资金冻结。保证分账时,二级商户支付宝余额的资金不被挪用。对于二级商户结算到卡场景,无需冻结,可以不传入分账冻结标识(结算到卡场景若上传冻结标识不生效)。
平台商作为分账收款方,不需要添加分账关系,可以直接从二级商户分账。如果需要分账给其他支付宝账号,需要通过 alipay.trade.royalty.relation.bind(分账关系绑定接口),将分账接收方添加到分账关系集中。分账关系集最多添加 20000 个。绑定分账关系时,不需要二级商户确认。
交易收款 后,平台商通过 资金结算 的 alipay.trade.settle.confirm(统一收单确认结算接口)确认结算时,如果传入冻结标识 royalty_freeze=true,资金结算到商家支付宝余额后,会先处于冻结状态,冻结在不可用余额中,直到平台商触发解冻或超时自动解冻(系统默认在冻结 30 天后自动解冻)。
若不需要冻结,不需要传入 royalty_freeze。
分账请求前,可以同步获取分账剩余金额结果。如有需求,可通过 alipay.trade.order.onsettle.query(分账剩余金额查询接口)查询分账剩余金额。
平台商通过 alipay.trade.settle.confirm(统一收单确认结算接口)确认结算后,通过 alipay.trade.order.settle(统一收单交易结算接口)发起分账请求,支持多次分账。分账收款方只支持实名认证的支付宝账号。在分账关系绑定后,如果分账收款方注销,则无法继续作为分账收款方。
前提条件:
确认结算时,如果传递了分账冻结标识,则需要对剩余冻结资金解冻。可在最后一笔分账请求时同时传入分账完结标识(royalty_finish=true),则本次分账成功后会自动将剩余资金解冻;也可通过调用分账接口,不传入分账条款,只传入分账完结标识完成剩余资金解冻。
分账场景,同时上送完结标识,将剩余资金解冻:
{ "biz_content": { "out_request_no": "settle201804120000", "trade_no": "2018040321001004090500070489", "royalty_parameters": [{ "trans_in_type": "loginName", "trans_in": "[email protected]", "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.order.settle.query(交易分账查询接口)查询分账状态。
alipay.trade.query(统一收单线下交易查询接口)上送query_options=trade_settle_info,响应参数 trade_settle_info 返回 trade_no 关联所有分账信息。
若已分账资金需要退回,通过 alipay.trade.refund(统一收单交易退款接口)申请分账资金退回。退款接口允许只退分账,具体传参可查看退款接口入参示例。
异步模式的接入方式:
分账关系维护接口:
接口英文名 |
接口中文名 |
备注 |
alipay.trade.royalty.relation.bind |
分账关系绑定 |
将分账收入方添加到分账关系集 |
alipay.trade.royalty.relation.unbind |
分账关系解绑 |
将分账收入方从分账关系集中移除 |
alipay.trade.royalty.relation.batchquery |
分账关系查询 |
查询分账收入方的绑定关系 |
分账请求接口:
接口英文名 |
接口中文名 |
备注 |
alipay.trade.order.settle |
统一收单交易结算接口 |
分账请求接口 |
分账查询接口:
接口英文名 |
接口中文名 |
备注 |
alipay.trade.order.settle.query |
交易分账查询接口 |
分账查询接口,查询一笔分账请求的分账结果 |
alipay.trade.royalty.rate.query |
分账比例查询 |
查询账户最高分账比例 |
alipay.trade.query |
统一收单线下交易查询 |
分账查询接口,可查看交易下的所有分账明细(同时也包含查询交易基本信息) |
alipay.trade.order.onsettle.query |
分账剩余金额查询接口 |
查询分账剩余金额信息 |
分账结果异步通知:
接口英文名 |
接口中文名 |
备注 |
alipay.trade.order.settle.notify |
交易分账结果通知 |
开发者平台订阅后可接收分账结果消息。异步模式时建议必须接入,及时获取最终分账结果。 |
退分账接口:
接口英文名 |
接口中文名 |
备注 |
alipay.trade.refund |
统一收单交易退款接口 |
用于卖家与第三方(如供应商或平台商)基于交易金额的退分佣信息。通过 refund_royalty_parameters 传递退分佣信息。 |
注意:
以 alipay.trade.order.settle 接口为例:
关键字段 |
描述 |
备注 |
royalty_mode |
分账模式 |
同步执行:sync。 异步执行:async。 不传默认同步执行。 |
royalty_parameters |
正向分账条款明细信息 |
复杂类型,需要指定资金处理类型 royalty_type 和目标账户 trans_in。 若冻结场景只想发起分账完结,不做分账,则分账参数不需要传入。 |
–royalty_type |
分账类型 |
分账为:transfer;可为空,为空时默认为分账。 |
–trans_out_type |
支出方账户类型 |
本场景不允许传入。 |
–trans_out |
支出方账户 |
本场景不允许传入。 |
–trans_in_type |
分账收入方账户类型 |
userId:表示是支付宝账号对应的支付宝唯一用户号。 loginName:表示是支付宝登录号。 |
–trans_in |
分账收入方账户 |
trans_in_type 传入 userId:本参数为收入方的支付宝账号对应的支付宝唯一用户号,以 2088 开头的纯 16 位数字。 trans_in_type 传入 loginName:本参数为收入方的支付宝登录号。 |
–amount |
分账金额 |
本次分账要分出的金额。 |
–desc |
分账描述 |
会在分账收入方/分账付款方支付宝账户 余额明细 备注字段中展示。 |
extend_params |
||
–royalty_finish |
分账完结标识 |
完结:true。 不完结:false。 |
详情可查看 订阅消息 指引。
注意:同步分账不触发 alipay.trade.order.settle.notify(交易分账结果通知)。