> ## Documentation Index
> Fetch the complete documentation index at: https://opendocs.xft.xin/llms.txt
> Use this file to discover all available pages before exploring further.

# 审核异步通知

## 功能说明

进件审核进入**终态**（SUCCESS/REJECTED）时，平台主动以 HTTP POST 方式通知进件提交时上送的 `back_url`。**中间态（AUDITING/PROCESSING）不下发通知**，请通过[进件状态查询](../merchant/apply-query)获取。

## 通知时机

| 触发条件     | 说明                                          |
| -------- | ------------------------------------------- |
| SUCCESS  | 渠道进件完成、微信/支付宝子商户号（`sub_merchant_code`）就绪后下发 |
| REJECTED | 平台审核驳回后下发，`reject_reason` 非空                |

## 通知报文

**请求头**（平台 → 渠道商，与请求签名同一机制）：

| Header           | 说明                                    |
| ---------------- | ------------------------------------- |
| `Content-Type`   | `application/json`                    |
| `Client-Id`      | 平台侧 app\_key（与渠道商凭据配对）                |
| `Signature-Type` | 固定 `HmacSHA256`                       |
| `Timestamp`      | 通知时间，秒级时间戳                            |
| `Nonce-Str`      | 随机串                                   |
| `Signature`      | 通知签名，验签方式见[签名验签说明](../spec/signature) |

**请求体**：

| 字段                  | 是否必选 | 字段类型   | 字段说明                      |
| ------------------- | ---- | ------ | ------------------------- |
| `out_apply_no`      | 是    | String | 申请单号                      |
| `merchant_code`     | 否    | String | 平台商户号，通过后下发               |
| `sub_merchant_code` | 否    | String | 微信/支付宝子商户号，渠道进件成功后下发      |
| `apply_status`      | 是    | String | 终态：`SUCCESS` / `REJECTED` |
| `reject_reason`     | 否    | String | 驳回原因，驳回时非空（标注平台驳回/渠道驳回）   |
| `channel_ret_code`  | 否    | String | 渠道侧原始返回码，透传，可为空           |
| `timestamp`         | 是    | int64  | 通知时间，秒级时间戳                |

## 应答要求

| 项    | 约定                                                           |
| ---- | ------------------------------------------------------------ |
| 成功   | 返回 HTTP 2xx 即视为通知送达，body 任意                                  |
| 失败   | 非 2xx 或超时，平台按**指数退避**重试：1min → 5min → 30min → 2h → 6h，最多 5 次 |
| 最终失败 | 通知落库，渠道商可联系平台人工补发                                            |

**幂等**：平台可能重发通知（网络原因），渠道商按 `out_apply_no + apply_status` 去重，重复通知不重复处理。

## 示例

**通知请求（平台 → 渠道商）**

```json theme={null}
{
  "out_apply_no": "P20260815001",
  "merchant_code": "M202608150001",
  "sub_merchant_code": "1900000101",
  "apply_status": "SUCCESS",
  "reject_reason": "",
  "channel_ret_code": "",
  "timestamp": 1755320400
}
```

**通知请求（驳回）**

```json theme={null}
{
  "out_apply_no": "P20260815001",
  "merchant_code": "",
  "sub_merchant_code": "",
  "apply_status": "REJECTED",
  "reject_reason": "营业执照信息与工商登记不一致",
  "channel_ret_code": "",
  "timestamp": 1755312000
}
```

**渠道商应答**

```http theme={null}
HTTP/1.1 200 OK
```

<Note>
  通知地址 `back_url` 必须为 HTTPS 且长期可达；收到通知后建议先落库，再应答 2xx，避免处理失败导致平台重试产生重复业务。
</Note>
