# 特约商户进件 · 后台接口文档（结算修改 / 商户注销）

> **模块**：business-pay  
> **基础路径**：`/manager/business/pay/paySubMerchantApplyment/v1`  
> **说明**：结算修改与商户注销挂在进件 Controller 下，与进件主流程独立，不修改进件草稿。  
> **更新日期**：2026-06-15

---

## 一、接口规范

| 项目 | 规范 |
|------|------|
| Content-Type | `application/json;charset=UTF-8` |
| Authorization | `Bearer {token}` |
| 响应结构 | `{ code, msg, data, requestId }` |

---

## 二、修改结算账户

微信文档：[修改结算账户](https://pay.weixin.qq.com/doc/v3/partner/4012711988)

### 2.1 查询当前结算账户

- **URL**：`GET .../settlement/current?applymentId={进件主键}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:settlementCurrent`

### 2.2 提交修改结算账户

- **URL**：`POST .../settlement/modify`
- **权限**：`manager:business:pay:paySubMerchantApplyment:settlementModify`

**请求体**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| applymentId | String | 是 | 进件主表 ID |
| accountType | String | 是 | `ACCOUNT_TYPE_BUSINESS` / `ACCOUNT_TYPE_PRIVATE` |
| accountBank | String | 是 | 开户银行 |
| accountNumber | String | 是 | 银行账号（明文，服务端加密提交微信） |
| accountName | String | 是 | 开户名称 |
| bankBranchId | String | 否 | 联行号（其他银行时与 bankName 至少填一项） |
| bankName | String | 否 | 开户银行全称 |
| bankAddressCode | String | 否 | 开户银行省市编码 |

**业务规则**：须已有 `subMchId`；商户已注销（`SUB_MCH_CANCELLED`）不可提交；每日每进件最多 5 次；不可存在审核中申请。

### 2.3 同步修改审核状态

- **URL**：`GET .../settlement/modify/syncStatus?modifyId={记录ID}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:settlementSync`

### 2.4 修改历史列表

- **URL**：`GET .../settlement/modify/list?applymentId={进件主键}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:settlementList`

---

## 三、商户注销

微信文档：[商户注销](https://pay.weixin.qq.com/doc/v3/partner/4012711989)（apply-cancel-withdraw）

### 3.1 注销资格校验

- **URL**：`GET .../cancel/validate?applymentId={进件主键}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:cancelValidate`

**响应 data 主要字段**：

| 字段 | 说明 |
|------|------|
| subMchId | 特约商户号 |
| merchantState | `NORMAL` / `HAS_BEEN_CANCELLED` |
| validateResult | `ALLOW_CANCEL_WITHDRAW` / `NOT_ALLOW_CANCEL_WITHDRAW` |
| blockReasons | 不可注销原因列表（type、description） |
| accountInfo | 账户余额（outAccountType、amount，单位分） |

### 3.2 提交商户注销

- **URL**：`POST .../cancel/submit`
- **权限**：`manager:business:pay:paySubMerchantApplyment:cancelSubmit`

**请求体**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| applymentId | String | 是 | 进件主表 ID |
| withdraw | String | 是 | `NOT_APPLY_WITHDRAW` 仅注销；`APPLY_WITHDRAW` 注销并提现 |
| accountType | String | 提现时必填 | 同结算修改 |
| accountBank | String | 提现时必填 | 开户银行 |
| accountNumber | String | 提现时必填 | 银行账号 |
| accountName | String | 提现时必填 | 开户名称 |
| bankBranchId / bankName | String | 否 | 其他银行规则同结算修改 |

**业务规则**：提交前自动调用资格校验；不可存在进行中注销单；不可重复注销（进件状态已为 `SUB_MCH_CANCELLED`）。

### 3.3 同步注销状态

- **URL**：`GET .../cancel/syncStatus?cancelId={注销记录ID}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:cancelSync`

当微信 `cancel_state=FINISH` 时，服务端回写进件主表 `apply_status=SUB_MCH_CANCELLED`。

### 3.4 平台代商户确认注销

- **URL**：`POST .../cancel/confirm`
- **权限**：`manager:business:pay:paySubMerchantApplyment:cancelConfirm`

**请求体**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| cancelId | String | 是 | 本地注销记录 ID |
| cancelContractVersion | String | 是 | 注销协议版本，如 `V20241213` |

仅 `cancel_state=WAITING_MERCHANT_CONFIRM` 时可调用。

### 3.5 注销历史列表

- **URL**：`GET .../cancel/list?applymentId={进件主键}`
- **权限**：`manager:business:pay:paySubMerchantApplyment:cancelList`

---

## 四、枚举速查

### 4.1 注销方式 withdraw

| 值 | 说明 |
|----|------|
| NOT_APPLY_WITHDRAW | 仅注销，不提现 |
| APPLY_WITHDRAW | 注销并提取余额 |

### 4.2 注销状态 cancel_state

| 值 | 说明 |
|----|------|
| ACCEPTED | 已受理 |
| REVIEWING | 审核中 |
| REJECTED | 审批驳回（终态，可重新发起） |
| WAITING_MERCHANT_CONFIRM | 待商户确认 |
| CANCELED | 已注销（流程中） |
| FINISH | 注销完成（终态，回写进件为 SUB_MCH_CANCELLED） |

### 4.3 注销资格校验 validate_result

对应 Java：`PaySubMerchantCancelValidateResultEnum`；前端：`cancelOptions.ts` → `CANCEL_VALIDATE_RESULT`。

| 值 | 说明 |
|----|------|
| ALLOW_CANCEL_WITHDRAW | 可发起注销 |
| NOT_ALLOW_CANCEL_WITHDRAW | 不可发起注销 |

### 4.4 进件状态（注销相关）

| 值 | 说明 |
|----|------|
| SUB_MCH_CANCELLED | 商户已注销（注销 FINISH 后回写） |

---

## 五、权限标识汇总

```
manager:business:pay:paySubMerchantApplyment:settlementCurrent
manager:business:pay:paySubMerchantApplyment:settlementModify
manager:business:pay:paySubMerchantApplyment:settlementSync
manager:business:pay:paySubMerchantApplyment:settlementList
manager:business:pay:paySubMerchantApplyment:cancelValidate
manager:business:pay:paySubMerchantApplyment:cancelSubmit
manager:business:pay:paySubMerchantApplyment:cancelSync
manager:business:pay:paySubMerchantApplyment:cancelConfirm
manager:business:pay:paySubMerchantApplyment:cancelList
```

菜单 SQL：`doc/sql/business-pay/pay_admin_menu.sql` 或增量 `pay_sub_merchant_*_permissions.sql`。

---

## 六、更新日志

| 版本 | 日期 | 说明 |
|------|------|------|
| 1.0 | 2026-06-15 | 新增修改结算账户、商户注销接口文档 |
