分账介绍
https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_1&index=1
- 还能分账给个人零钱账号
- 无分账手续费
- 实际分账时,服务商传入具体的分账接收方和分账金额进行订单分账。分账接口分为单次分账接口和多次分账接口。一笔订单最多可以分50次,每一次可以分给50个接收方。
- 服务商分账功能需要特约商户授权且设置允许服务商分账的最大比例
分账流程
- 预支付下单时,添加分账 profit_sharing 参数,标识这个订单需要分账
- 交易成功后,用户的钱进入商户账号,并被冻结 (此时已扣除微信支付手续费)
- 接口添加分账接收方
- 服务商判断满足条件后(例如用户点击收货),发起分账指令,这时资金解冻,并分发给多方。
- 查询接口,判断是否分账成功
测试
由于支持分账到个人零钱账号,可以用这个方式测试。
分账订单退款问题
- 订单分账之前的发生退款,退款资金是从分账冻结资金中出款,未退款的待分账资金可以继续分账;
- 订单分账之后发生退款,在接收方同意分账回退的情况下,资金先可以从接收方(仅限商户类型)的账户中回退至分账方账户,再进行退款 。
具体细节参考官方文档的常见问题。
分账时机
(建议1分钟后)或30天内调分账接口
所以这个分账时机很重要,尽量在不能退款的情况下进行分账。
开通分账功能
https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_2&index=2
- 实际操作界面跟这个引导有出入。在界面里搜索分账即可。
- 不需要在后台添加接收人,代码里操作就可以。
- 默认最多只能分 30%,再多就需要给腾讯发邮件才能开通。。。
统一下单
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1#
接口中有个参数,代表是否需要分账,profit_sharing
- Y-是,需要分账
- N-否,不分账
字母要求大写,不传默认不分账
golang 库支持
https://github.com/wleven/wxpay#v2-%E7%89%88%E6%9C%AC%E5%88%86%E8%B4%A6%E6%8E%A5%E5%8F%A3
相关接口的参数参考:
https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_3&index=4
需要注意的是:
- 部分接口需要双向证书,例如,请求分账接口。
- 订单表要保存微信订单号 transaction_id。因为如果还是继续只使用 out_order_no。发起分账会失败 err: 发起分账失败。transaction_id 未设置。
- 订单表,增加分账标识字段。方便定时任务扫表。同时,增加一个分账状态的字段。其实可以合并为一个字段,即分账状态字段:0 代表不需要分账,1 代表需要分账,但是还没发起,2 代表已发起分账,3 代表已分账。