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

# 银行验证后备方案与无银行继续验证

> Didit 银行验证绝不会成为死胡同：可查看各国家/地区的其他验证方式、“无银行继续”选项、可自行选择的结果，以及结果如何报告该情况。

银行验证（Bank Verification）绝不会让用户卡住。当步骤等待用户操作时，他们随时可以选择 **Continue without your bank**，并且一旦其所在国家/地区或银行没有任何可用方式，该步骤就会立即显示此选项。随后，会话将遵循您为该情况选择的决策结果，默认进行人工审核。当一次失败的尝试耗尽了仍向其提供的每种方式的最后一次尝试机会（包括对账单上传）时，该步骤不会继续等待：它会自动结束并遵循 `bank_attempts_exhausted_action`（默认为已拒绝），除非先前的尝试已得出结论（例如姓名不匹配）。此时该结论仍然有效。

本页面介绍了每个国家/地区提供的其他验证方式、用户何时会看到 **Continue without your bank**、每种情况如何判定，以及如何在结果中读取相关信息。

## 验证方式

| 验证方式 | `method` | 在何处提供 |
| - | - | - |
| 银行登录 | `open_banking` | 有路由支持该国家/地区的地方。 |
| 账户核验 | `account_lookup` | 有路由支持该国家/地区的地方。 |
| 对账单上传 | `statement` | 任何国家/地区，只要该步骤启用了该功能（`bank_statement_enabled`）。 |
| 小额存款验证 | `microdeposits` | 仅在有路由发送存款的地方，在同一会话中进行过计费的银行登录或账户核验之后（`bank_microdeposits_enabled`）。 |
| Continue without your bank | `none` | 始终提供。无法关闭。 |

用户首先从银行登录或账户核验开始，顺序取决于您为其国家/地区设置的配置：请参阅[按国家/地区选择方式](https://docs.didit.me/zh/core-technology/bank-verification/verification-methods.md#按国家/地区选择方式)。对账单上传和小额存款验证是这两种方式之后的备用方案。**Continue without your bank** 排在最后。

某个国家/地区无法使用的方式绝不会向该国家/地区的用户提供。在控制台中，**国家/地区与方式**会针对该国家/地区将其显示为**不可用**。

### 无银行路由支持的国家/地区

如果某个国家/地区既没有银行登录路由也没有账户核验路由，该国家/地区仍会保留在步骤中。当该步骤提供对账单上传时，该国用户可以上传对账单，或者选择无需银行即可继续。

在保存配置时，如果省略 `methods` 或将其设置为 `null`，则会保留此类国家/地区。其 `methods` 不能列出任何方式，因为当地没有路由支持该方式：保存时会被拒绝，例如 `Account check is not available in VNM.`。与每个已启用的国家/地区一样，空列表也会被拒绝，提示 `Choose a method: bank sign-in, account check, or both.`。如果您的合同设定了独立定价且不包含对账单上传，那么在没有任何前置银行尝试的情况下提供对账单上传的保存操作也会拒绝此类国家/地区。

```json theme={null}
{
  "bank_statement_enabled": true,
  "bank_countries": {
    "GBR": { "enabled": true, "institutions": "all" },
    "VNM": { "enabled": true, "institutions": "all" }
  }
}
```

这里以越南代表没有银行路由支持的国家/地区。它没有设置 `methods`，因此保存时会予以保留，其用户会看到对账单上传和 **Continue without your bank**。

### 对账单上传

对账单上传要求提供最近 3 个月内的银行对账单，且需显示用户姓名、开户银行及账号。Didit 会读取该对账单，检查是否存在篡改，并以与银行验证时相同的方式比对账户持有人姓名。

启用 `bank_statement_enabled` 后，该步骤会在以下两种情况下提供该功能：

* **计费尝试之后：** 一旦在同一会话中银行登录或账户核验产生费用，对账单上传将作为备用方案提供，无需额外付费。
* **之前没有任何银行尝试：** 在任何国家/地区均可使用，包括没有银行路由支持的国家/地区。这需要开启 `bank_statement_standalone_enabled`（默认处于开启状态）。将其关闭后，仅在计费尝试之后才提供对账单上传。

对账单上传和小额存款验证各自会消耗该步骤的一次尝试次数（计入 `bank_max_attempts`），这与银行登录使用的尝试次数相同。一旦用户耗尽了所有次数，两者都不会再提供，即使在计费尝试之后也是如此。账户核验拥有独立的 `bank_account_check_max_attempts`，因此在账户核验是唯一方式的情况下，耗尽了所有账户核验次数的用户在步骤提供对账单上传时仍可上传对账单。当一次失败的尝试耗尽了仍向用户提供的每种方式的最后一次尝试机会（包括对账单上传）时，该步骤会自动结束：系统不会要求用户继续，结果中也不会记录继续状态。会话将遵循 `bank_attempts_exhausted_action`，除非先前的尝试已得出结论（例如姓名不匹配），此时该结论仍然有效。如需在银行登录失败后留出使用备用方案的余量，请将 `bank_max_attempts` 设置为 `2` 或更大。

## 用户何时会看到不使用银行继续

`bank_continue_without_bank` 用于设置该步骤何时显示**不使用银行继续**：

| 值 | 步骤显示该选项的时机 |
| - | - |
| `when_needed`（默认值） | 当用户所在国家/地区或银行没有任何可用验证方式、其银行当前无法连接且没有其他方式可对其进行验证，或者用户表示自己没有开通网银或其银行未在列表中时。 |
| `from_start` | 在第一个屏幕上也显示。 |

这两个值都不会关闭该选项：用户始终可以选择继续。在控制台中，可以在银行验证步骤的**用户无法验证**部分进行设置，对应**显示“不使用银行继续”**：**其他方式都不可用时**或**从一开始**。

```json theme={null}
{
  "bank_continue_without_bank": "when_needed"
}
```

### 用户看到的内容

* **所在国家/地区无可用路径：** 例如“我们目前尚无法连接越南的银行”，在**其他验证方式**下提供对账单上传选项，以及**不使用银行继续**。
* **无法在此使用的银行：** “此银行无法在此处使用”。在支持账户核查的国家/地区，用户可以输入其账户详细信息、上传对账单、选择其他银行，或不使用银行继续。
* **无网银或银行未列出：** “通过其他方式验证您的账户”，显示其所在国家/地区支持的方式，以及**不使用银行继续**。
* **当前无法连接的银行：** 用户可以重试。一旦其他验证方式（网银登录或账户核查）无法提供帮助（所在国家/地区不支持、已无剩余尝试次数，或其最后一次尝试同样无法连接到银行），屏幕上也会提供**不使用银行继续**选项。
* **继续操作后：** “感谢配合，您可以继续”。系统绝不会向用户显示失败页面，而是直接转到您工作流的下一步。

## 选择结果

当用户不使用银行继续时，Didit 会根据该步骤中发生的情况判断原因。系统绝不会从用户设备获取原因。每个记录为 `continuation.reason` 的原因都遵循各自的结果设置：

* `no_route`：没有支持其所在国家/地区的网银登录或账户核查路径。由 `bank_unsupported_action` 决定，默认为 `REVIEW`，原因代码为 `NOT_COVERED`。
* `institution_unsupported`：用户选择的银行无法在此步骤中使用。由 `bank_unsupported_action` 决定，默认为 `REVIEW`，原因代码为 `NOT_COVERED`。
* `attempts_exhausted`：在用户选择继续时，所有尝试次数均已用尽，且没有任何正在进行的尝试。由 `bank_attempts_exhausted_action` 决定，默认为 `DECLINE`。
* `person_choice`：存在可用的验证方式，但用户选择直接继续。这包括当前无法连接的银行：由于该银行属于覆盖范围，因此将用户自身的主动选择作为原因。由 `bank_skipped_action` 决定，默认为 `REVIEW`，原因代码为 `SKIPPED`。

`bank_skipped_action` 和 `bank_attempts_exhausted_action` 可接受 `REVIEW` 或 `DECLINE`。`bank_unsupported_action` 还可接受 `NO_ACTION`，该值会使该步骤通过，并仍记录 `NOT_COVERED`。

在控制台中，这些对应步骤**结果**选项卡中的**银行或国家不在覆盖范围内**、**不使用银行继续**和**尝试次数已用尽**行。

```json theme={null}
{
  "bank_continue_without_bank": "when_needed",
  "bank_unsupported_action": "REVIEW",
  "bank_skipped_action": "REVIEW",
  "bank_attempts_exhausted_action": "DECLINE"
}
```

> [!NOTE]
>
> 继续操作绝不会替换某次尝试已得出的判定结论。如果某次尝试已完成评估（例如银行或对账单返回的开户人与预期不符且用户仍有剩余尝试次数，或者出现了近似匹配但用户未进行确认），该步骤将保留该判定结论及其原因代码。此时上述列表中的任何结果设置均不适用，也不会添加 `NOT_COVERED` 或 `SKIPPED`。结果中仍会记录用户进行了继续操作：请参阅[在结果中查看](#在结果中读取)。

## 在结果中读取

### 决策与 Webhook

在[会话决策](https://docs.didit.me/zh/sessions-api/retrieve-session.md#银行验证)以及 [`status.updated` Webhook](https://docs.didit.me/zh/integration/webhooks#v3-复数形式的数组（重要）) 的 `decision` 对象中，`bank_verifications[]` 中该步骤对应的项会指明该用户未使用银行继续：

* `continued_without_bank` 为 `true`：用户通过 **不使用银行继续** 离开该步骤。
* 在用户继续前未评估任何尝试时，`method` 为 `none`。在评估过一次尝试后（例如持有人不匹配），`method` 会保留该尝试的方法，且其裁定依然有效。
* `continuation` 说明了用户是如何继续的：
  * `reason`：`no_route`、`institution_unsupported`、`attempts_exhausted` 或 `person_choice`。
  * `country`：用户进行验证时所在的国家/地区（ISO 3166-1 alpha-3），若在选择前继续则为 `null`。
  * `offered`：该国家/地区提供的其他验证方式，按提供顺序排列：先是 `statement`，然后是 `microdeposits`。若未提供则为空。
  * `institution_id` 与 `institution_name`：对于 `institution_unsupported`，表示用户无法使用的银行：即他们选择的银行，或最后一次尝试结束时所对应的银行。Didit 从自身银行列表中提取这两项信息，绝不会从用户的设备中提取，因此若该列表不包含某家银行，则两项均为 `null`。对于所有其他原因，两项均为 `null`。
  * `continued_at`：用户选择继续的时间。
* 当继续操作决定了该步骤的结果时，`reason_codes` 包含 `NOT_COVERED` 或 `SKIPPED`，如[选择结果](#选择结果)中所述。在评估过一次尝试后，它会保留该尝试的原因代码。
* 对于 `no_route` 和 `institution_unsupported`，`not_covered` 为 `true`。

```json theme={null}
{
  "bank_verifications": [
    {
      "node_id": "feature_bank_verification",
      "status": "In Review",
      "method": "none",
      "continued_without_bank": true,
      "continuation": {
        "reason": "institution_unsupported",
        "country": "ESP",
        "offered": ["statement"],
        "institution_id": "example_bank_es",
        "institution_name": "Example Bank",
        "continued_at": "2026-11-03T08:15:41.512870+00:00"
      },
      "not_covered": true,
      "ownership": null,
      "reason_codes": ["NOT_COVERED"]
    }
  ]
}
```

该示例仅展示了本页面讨论的字段。每个字段均可在 [API 参考](https://docs.didit.me/zh/sessions-api/retrieve-session.md)的 `BankVerificationResult` 模式中找到。

当工作流缩小返回的数据范围时，`continued_without_bank` 和 `continuation.reason` 仍会返回，因此您仍可区分同属 `NOT_COVERED` 的 `no_route` 与 `institution_unsupported`。此时 `continuation` 的所有其他键均为 `null`：国家/地区、银行、提供的选项以及时间。当用户未继续时，`continuation` 本身为 `null`。此时也不会返回 `method`，因此请读取 `continued_without_bank` 而非 `method`，以判断用户是否继续。

### 工作流规则

分支和自定义状态规则可读取：

* `bank.continued_without_bank`：`true` 或 `false`。
* `bank.continue_reason`：`no_route`、`institution_unsupported`、`attempts_exhausted` 或 `person_choice`。
* `bank.method`：在评估任何尝试前用户未使用银行而继续时为 `none`。在评估过尝试后，为该尝试的方法。

### 会话报告

当用户在评估任何尝试前未使用银行而继续时，会话 PDF 报告中的**验证方法**行显示为**未连接银行继续**。在评估过尝试后，它会列出该尝试的方法名称。

## 定价

* **不使用银行继续** 绝不收费。用户在继续前进行的尝试按常规计费。
* **此前无计费银行尝试的对账单上传**，Didit 读取并评估每份对账单收取 \$0.20。它在单独的用量明细项**银行验证 - 对账单上传**（`bank_statement_upload`）中计费，您的合同费率或特殊价格适用于该项，就像适用于任何附加组件一样。若您的合同自行设定价格且不包含此项，该步骤将不提供此功能。
* 在同一会话中，**在计费的银行登录或账户核验之后进行的对账单上传或微额存款**均已包含在内，无需额外付费。

## 在不使用银行继续之前保存的节点

`bank_allow_skip` 已废弃。使用该配置保存的节点现在以其所代表的值运行：

| `bank_allow_skip` | 节点运行采用的值 |
| - | - |
| `true` | `bank_continue_without_bank: "from_start"` |
| `false` 或未设置 | `bank_continue_without_bank: "when_needed"` |

过去不允许跳过的节点，在所有选项均无法使用时会导致用户无法继续。现在这些情况下会显示 **不使用银行继续**，并由 `bank_unsupported_action`、`bank_attempts_exhausted_action` 或 `bank_skipped_action` 决定会话结果。

在一个版本内，发送 `bank_allow_skip` 但未发送 `bank_continue_without_bank` 的保存操作仍会据此设置模式。每次保存都会回写 `bank_allow_skip`：对于 `from_start` 为 `true`，对于 `when_needed` 为 `false`。在新集成中请使用 `bank_continue_without_bank`。

## 在沙盒中测试

沙盒应用不收取任何费用，对账单上传和微额存款此前也无需先进行银行尝试。将 `bank_continue_without_bank` 设置为 `from_start` 即可在第一个屏幕上看到 **不使用银行继续**，选择它即可测试 `bank_skipped_action`。有关沙盒应用的常规工作原理，请参阅[沙盒测试](https://docs.didit.me/zh/integration/sandbox-testing.md)。

## 相关内容

* [银行验证方法](https://docs.didit.me/zh/core-technology/bank-verification/verification-methods.md)：按国家/地区划分的银行登录与账户核验。
* [账户核验](https://docs.didit.me/zh/core-technology/bank-verification/account-check.md)：账户格式、结果与沙盒值。
* [银行验证配置键](https://docs.didit.me/zh/management-api/workflows/feature-configs.md#银行验证)：该步骤的所有配置键。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.