# CloudPay.profitSharingFinish()

> 支持端：[云函数 2.0.2](/miniprogram/dev/wxcloudservice/wxcloud/reference/changelog-server-sdk)

完结分账

## 说明

应用场景
1、不需要进行分账的订单，可直接调用本接口将订单的金额全部解冻给特约商户
2、调用多次分账接口后，需要解冻剩余资金时，调用本接口将剩余的分账金额全部解冻给特约商户
3、已调用请求单次分账后，剩余待分账金额为零，不需要再调用此接口。
**接口说明**

此接口与微信支付原分账接口（[文档](https://pay.weixin.qq.com/doc/v2/partner/4011984879)）的不同点在于：
- 私有安全链路，免证书管理，免签名计算
- 商户号填入 sub_mch_id 字段，小程序/公众号 appid 填入 sub_appid 字段
- 免填写以下字段：mch_id、appid、sign、sign_type
- 接口入参和返回值都为 JSON 而不是 XML

接口限频：

1、单个分账接收方商户（分账完结） 60QPS，如果超过频率限制，会报错FREQUENCY_LIMITED，请降低频率请求。同时，建议拆分多个分账接收方商户号进行分账收款，避免集中分账到单个商户。

### 参数说明

| 字段名       | 变量名         | 必填 | 类型       | 示例值                                                           | 描述                                                                                                                                                            |
|--------------|----------------|------|------------|------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 子商户号     | sub_mch_id     | 是   | string(32) | 1900000109                                                       | 微信支付分配的子商户号                                                                                                                                          |
| 随机字符串   | nonce_str      | 是   | string(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS                                 | 随机字符串，不长于32位。推荐随机数生成算法                                                                                                                      |
| 微信订单号   | transaction_id | 是   | string(32) | 4208450740201411110007820472                                     | 微信支付订单号                                                                                                                                                  |
| 商户分账单号 | out_order_no   | 是   | string(64) | P20150806125346                                                  | 商户系统内部的分账单号，在商户系统内部唯一（单次分账、多次分账、完结分账应使用不同的商户分账单号），同一分账单号多次请求等同一次。只能是数字、大小写字母_-\|*@  |
| 分账完结描述 | description    | 是   | string(80) | 分账已完成                                                       | 分账完结的原因描述                                                                                                                                              |

### 返回值说明

| 字段名     | 变量名      | 必填 | 类型        | 示例值   | 描述                                                                             |
|------------|-------------|------|-------------|----------|----------------------------------------------------------------------------------|
| 返回状态码 | return_code | 是   | String(16)  | SUCCESS  | SUCCESS/FAIL  |
| 返回信息   | return_msg  | 否   | String(128) | 签名失败 | 返回信息，如非空，为错误原因。如 签名失败、参数格式校验错误                      |

以下字段在return_code为SUCCESS的时候有返回

| 名称             | 变量名       | 必填 | 类型        | 示例值                                       | 描述                                               |
|------------------|--------------|------|-------------|----------------------------------------------|----------------------------------------------------|
| 业务结果         | result_code  | 是   | string(32)  | SUCCESS                                      | SUCCESS：分账完结请求接收成功，结果通过分账查询接口查询
FAIL ：提交业务失败 |
| 错误代码         | err_code     | 否   | string(32)  | SYSTEMERROR                                  | 列表详见错误码列表                                 |
| 错误代码描述     | err_code_des | 否   | String(128) | 系统超时                                     | 结果信息描述                                       |
| 商户号           | mch_id       | 是   | string(32)  | 1900000100                                   | 调用接口时提供的商户号                             |
| 子商户号         | sub_mch_id   | 是   | string(32)  | 1900000109                                   | 微信支付分配特约商户的商户号                       |
| 公众账号ID       | appid        | 是   | string(32)  | wx8888888888888888                           | 调用接口提供的公众账号ID                           |
| 子商户公众账号ID | sub_appid    | 否   | string(32)  | wx8888888888888888                           | 微信分配的子商户公众账号ID                         |
| 分账接收方       | receiver     | 是   | String(128) | {"type":"MERCHANT_ID","account":"190001001"} | 分账接收方对象（不包含分账接收方全称），json格式   |
| 随机字符串       | nonce_str    | 是   | string(32)  | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS             | 微信返回的随机字符串                               |
| 签名             | sign         | 是   | string(64)  | ABC6DD4AA85C0EECA82C35595A69EFGH             | 微信返回的签名，详见签名算法                       |

以下字段在return_code 和result_code都为SUCCESS的时候有返回

| 字段名       | 变量名         | 必填 | 类型       | 示例值                       | 描述                                                                                                                                                            |
|--------------|----------------|------|------------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 微信订单号   | transaction_id | 是   | string(32) | 4208450740201411110007820472 | 微信支付订单号                                                                                                                                                  |
| 商户分账单号 | out_order_no   | 是   | string(64) | P20150806125346              | 商户系统内部的分账单号，在商户系统内部唯一（单次分账、多次分账、完结分账应使用不同的商户分账单号），同一分账单号多次请求等同一次。只能是数字、大小写字母_-\|*@  |
| 微信分账单号 | order_id       | 是   | string(64) | 3008450740201411110007820472 | 微信分账单号，微信系统返回的唯一标识                                                                                                                            |

### 错误码

| 名称                  | 描述                 | 原因                                 | 解决方案                                                                |
|-----------------------|----------------------|--------------------------------------|-------------------------------------------------------------------------|
| SYSTEMERROR           | 接口返回错误         | 系统超时                             | 请不要更换商户分账单号，请使用相同参数再次调用API。否则可能造成资金损失 |
| INVALID_TRANSACTIONID | 无效的微信支付订单号 | 请求参数未按指引进行填写             | 请求参数错误，检查原交易号是否存在或发起支付交易接口返回失败            |
| PARAM_ERROR           | 参数错误             | 请求参数未按指引进行填写             | 请求参数错误，请重新检查再调用分账完结接口                              |
| INVALID_REQUEST       | 请求不合法           | 参数中APPID或 MCHID不存在等          | 请检查请求参数                                                          |
| FREQUENCY_LIMITED     | 频率限制             | 请求过多被频率限制                   | 该笔请求未受理，请降低频率后原单重试，请勿更换商户分账单号              |
| ORDER_NOT_READY       | 订单处理中           | 订单处理中，暂时无法处理分账完结请求 | 订单处理中，暂时无法处理分账完结请求，请稍后再试                        |
| OPENID_MISMATCH       | openid错误           | openid与appid不匹配                  | 请检查openid是否正确                                                    |
| NOT_SHARE_ORDER       | 非分账订单           | 不是分账订单 无法分账                | 下单时请用分账的合适参数                                                |
| AMOUNT_OVERDUE        | 可分余额不足         | 订单剩余可分账金额为零               | 请检查请求参数                                                          |

## 代码示例

```js
// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

exports.main = async (event, context) => {
  const res = await cloud.cloudPay.profitSharingFinish({
    subMchId: '1900000109',
    transactionId: '4208450740201411110007820472',
    outOrderNo: 'P20150806125346',
    description: '分账已完成',
    nonceStr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS'
  })
  return res
}
```

如果是共享小程序调用，appid需要按如下方式传入`cloud.cloudPay({ appid: 'xxxxx' }).profitSharingFinish({其他参数...})`，详情参考[环境共享指引文档](/miniprogram/dev/wxcloudservice/wxcloud/guide/resource-sharing/index)
