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

# 测试 KYC 流程

Fluz 要求用户通过 KYC 验证后，才能执行某些交易或解锁更高的限额。在**预发布**环境中，你可以使用已知的测试身份运行完整的验证流程，并确认你的集成能处理每一种结果——而无需使用真实个人的信息。

有关完整的 mutation 合同与响应参考，请参阅[用户 KYC 验证](/user-kyc-verification)。

<Note>
  **仅限预发布**

  本页的身份仅存在于预发布端点（`https://transactional-graph.staging.fluzapp.com/api/v1/graphql`）。它们是合成数据，无法在生产环境通过验证。切勿在预发布环境提交真实人的姓名、地址、出生日期或 SSN。
</Note>

<Info>
  **开始之前，你需要：** 一个具有**开发者访问**权限且应用已激活的 Fluz 账户（[准备你的账户](/get-started/prepare-accounts)），以及要验证用户的**用户访问令牌**（[生成用户访问令牌](/recipes/generate-user-access-token)）。该令牌用于标识验证将应用到哪个预发布用户。
</Info>

## 步骤 1 — 创建测试用户（可选）

如果你还没有要验证的预发布用户，请使用 [`registerUser`](/user-registration) mutation 创建一个，然后为其生成用户访问令牌。

<Note>
  **受限访问**

  `registerUser` 需要 Fluz 的特殊权限。如果你的应用无法注册用户，请改用现有的预发布用户。联系你的客户经理或 [partnerships@fluz.app](mailto:partnerships@fluz.app) 以启用该功能。
</Note>

## 步骤 2 — 使用已批准的测试身份

以下身份在预发布环境中会返回 **APPROVED** 结果。请按如下内容原样提交。

| 字段   | 值                      |
| ---- | ---------------------- |
| 名    | John                   |
| 姓    | Smith                  |
| 街道地址 | 222333 Peachtree Place |
| 城市   | Atlanta                |
| 州    | GA                     |
| 邮编   | 30318                  |
| 出生日期 | 02/28/1975             |
| SSN  | 112-22-3333            |

<Note>
  API 只接收 SSN 的**后 4 位数字**（`ssnLast4`）。对于该身份为 `3333`。出生日期格式为 `MM/DD/YYYY`。
</Note>

## 步骤 3 — 运行验证

使用已批准的身份调用 `verifyUserInformation`。将 `<USER_ACCESS_TOKEN>` 替换为被验证用户的令牌。

<CodeGroup>
  ```curl cURL theme={null}
  curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <USER_ACCESS_TOKEN>" \
    -d '{
      "query": "mutation VerifyUserInformation { verifyUserInformation(input: { firstName: \"John\", lastName: \"Smith\", streetLine1: \"222333 Peachtree Place\", streetLine2: \"\", city: \"Atlanta\", state: \"GA\", postalCode: \"30318\", country: \"United States\", dateOfBirth: \"02/28/1975\", ssnLast4: \"3333\" }) { status message } }"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://transactional-graph.staging.fluzapp.com/api/v1/graphql",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${accessToken}`,
      },
      body: JSON.stringify({
        query: `
          mutation VerifyUserInformation($input: VerifyUserInformationInput!) {
            verifyUserInformation(input: $input) {
              status
              message
            }
          }
        `,
        variables: {
          input: {
            firstName: "John",
            lastName: "Smith",
            streetLine1: "222333 Peachtree Place",
            streetLine2: "",
            city: "Atlanta",
            state: "GA",
            postalCode: "30318",
            country: "United States",
            dateOfBirth: "02/28/1975",
            ssnLast4: "3333",
          },
        },
      }),
    }
  );

  const data = await response.json();
  console.log(data.data.verifyUserInformation);
  ```
</CodeGroup>

```json Approved response theme={null}
{
  "status": "APPROVED",
  "message": "User verification successful"
}
```

## 步骤 4 — 模拟其他结果

使用相同的 mutation 来测试你对每种验证状态的处理。

| 状态        | 在预发布环境如何触发                                |
| --------- | ----------------------------------------- |
| APPROVED  | 提交上面的已批准测试身份。                             |
| DECLINED  | 提交与已知的有效预发布记录不匹配的身份。测试值：`[TBD: confirm]`。 |
| DUPLICATE | 重新提交与某个已验证预发布用户匹配的身份数据。                   |
| ERROR     | 对同一用户提交第 4 次验证尝试——验证最多允许 3 次。             |

<Warning>
  在预发布环境中强制返回 `DECLINED` 结果的精确字段值尚未发布。在将其用于自动化测试套件之前，请与平台团队确认。
</Warning>

## 验证响应

| 状态        | 消息                               | 描述                       |
| --------- | -------------------------------- | ------------------------ |
| APPROVED  | User verification successful     | 用户已通过 KYC 验证             |
| DECLINED  | Verification declined            | 用户未通过 KYC 验证             |
| DUPLICATE | Duplicate user verification      | 用户已通过 KYC 验证，但数据与另一位用户匹配 |
| ERROR     | Exceeded user verification limit | 验证尝试次数超过最多 3 次           |

## 备注

* **三次尝试上限。** 同一用户最多可提交 3 次验证，否则将返回 `ERROR`。请规划你的测试，避免在仍需使用的用户上耗尽尝试次数。
* **令牌按用户区分。** 访问令牌决定验证将应用到哪个用户——请确保它属于你正在提交身份信息的测试用户。

## 后续步骤

<CardGroup cols={2}>
  <Card title="测试商户" icon="store" href="/test-merchants">
    具有可预测优惠、用于练习礼品卡购买的预发布商户。
  </Card>

  <Card title="用户 KYC 验证" icon="id-card" href="/user-kyc-verification">
    完整的 mutation 合同——文件验证链接、状态与响应。
  </Card>
</CardGroup>
