> ## 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.

# 通过 SSN 验证

> 提交客户的法定姓名、地址、出生日期和 SSN 后四位，以获得即时的身份核验结果。

向 Fluz 传递 SSN 信息是两种 API 方法中更直接的一种。你从客户处收集一小组身份字段并提交，Fluz 会在同一响应中返回决策。

当你已经持有（或可以合理索取）客户的身份详情时，将其作为首选 API 尝试。如果被拒绝，升级为[请求 IDV URL](/verify-customers-by-documents)。

<Info>
  **先决条件**

  * 由 Fluz 在你的应用上启用 `VERIFY_KYC` scope。参见[所需 scope](/user-kyc-verification#required-scope)。
  * 为待验证客户生成的[用户访问令牌](/recipes/generate-user-access-token)，其 scopes 中包含 `VERIFY_KYC`。
  * 已注册的 webhook 端点。参见[验证客户](/user-kyc-verification#set-up-a-webhook)。
</Info>

## 工作原理

`verifyUserInformation` 变更是同步的。你提交客户信息，Fluz 会与在档身份数据进行比对，并在响应体中返回 `APPROVED`、`DECLINED`、`DUPLICATE` 或 `ERROR`。此流程无面向客户的步骤，客户无需完成任何操作。

Fluz 还会向你的 webhook 端点发送验证事件，因此单一处理器即可一致地处理所有验证方法的结果。

## 请求

被验证的客户由 `Authorization` 头中的用户访问令牌标识——你无需在输入中传递用户 ID。

| 字段            | 类型     | 必填 | 说明                     |
| :------------ | :----- | :- | :--------------------- |
| `firstName`   | String | 是  | 客户的法定名。                |
| `lastName`    | String | 是  | 客户的法定姓。                |
| `streetLine1` | String | 是  | 居住街道地址。                |
| `streetLine2` | String | 否  | 公寓、套房或单元号。不使用时传空字符串。   |
| `city`        | String | 是  | 城市。                    |
| `state`       | String | 是  | 州或地区。                  |
| `postalCode`  | String | 是  | 邮政编码。                  |
| `country`     | String | 是  | 国家。                    |
| `dateOfBirth` | String | 是  | 出生日期，格式为 `MM/DD/YYYY`。 |
| `ssnLast4`    | String | 是  | 客户 SSN 的后四位。           |

<Note>
  Fluz 接受完整 SSN 或仅后四位。建议仅提交后四位——可获得相同的决策，同时减少你需要收集和存储的数据。
</Note>

<Warning>
  提交客户的**居住**地址，而非账单或邮寄地址。邮政信箱将被拒绝。地址不匹配是假性拒绝的最常见原因——参见[地址格式要求](/concepts/address-formatting-requirements)。
</Warning>

## 示例

```javascript theme={null}
import { GraphQLClient, gql } from 'graphql-request';

const API_URL = 'https://transactional-graph.fluzapp.com/api/v1/graphql';

const VERIFY_USER_INFORMATION = gql`
  mutation verifyUserInformation($input: VerifyUserInformationInput!) {
    verifyUserInformation(input: $input) {
      status
      message
    }
  }
`;

const client = new GraphQLClient(API_URL, {
  headers: {
    Authorization: `Bearer <<USER_ACCESS_TOKEN>>`,
    'Content-Type': 'application/json',
  },
});

const response = await client.request(VERIFY_USER_INFORMATION, {
  input: {
    firstName: 'John',
    lastName: 'Smith',
    streetLine1: '123 Main St',
    streetLine2: '',
    city: 'Los Angeles',
    state: 'CA',
    postalCode: '91234',
    country: 'United States',
    dateOfBirth: '01/28/1975',
    ssnLast4: '1234',
  },
});

console.log(response);
```

```json Response theme={null}
{
  "data": {
    "verifyUserInformation": {
      "status": "APPROVED",
      "message": "User verification successful"
    }
  }
}
```

<Card title="打开示例配方" icon="code" horizontal href="/recipes/verify-user-kyc">
  可复制运行的示例版本，便于你根据集成进行改造。
</Card>

## 处理响应

| 状态          | 处理措施                                                                    |
| :---------- | :---------------------------------------------------------------------- |
| `APPROVED`  | 客户已通过验证。解锁相关功能。                                                         |
| `DECLINED`  | 升级为[证件验证](/verify-customers-by-documents)。不要重新提交相同信息。                   |
| `DUPLICATE` | 客户已通过验证，但其**SSN** 与另一位 Fluz 客户匹配。视为已验证，并在你方审查是否为重复账户。Fluz 不会披露匹配的是哪位客户。 |
| `ERROR`     | 检查 `message`。客户要么已验证过，要么已用尽尝试次数。                                        |

<Note>
  客户最多可进行 SSN 验证**3 次**。第三次之后，后续请求将返回 `ERROR` 且为 `Exceeded user verification limit`。请将客户转到证件验证，而非继续重试。
</Note>

## 测试

预发布环境的测试身份会返回特定、可预测的结果代码，因此你可以在不使用真实数据的情况下，演练如地址不匹配、死亡主体、薄档案、无效 SSN 等拒绝情形。参见[测试 KYC 流程](/test-kyc-flows)。

<Warning>
  请勿修改测试身份数据。任一字段未与预期测试值匹配时，将返回不匹配结果，而非你试图演练的结果代码。
</Warning>
