# 反欺诈 (/zh/docs/cartao/antifraud)

<QuickLinks>
  <QuickLink href="/docs/cartao/endpoints/charges/post_charges" title="创建收款" method="POST" path="/charges" />

  <QuickLink href="/docs/cartao/mdds" title="MDD 字段表" />

  <QuickLink href="/docs/cartao/international" title="跨境收款" />

  <QuickLink href="/docs/cartao/three-d-secure" title="3-D Secure" />
</QuickLinks>

携带 `fraudAnalysis` 对象的收款会在授权前实时经过 **PayZu 反欺诈引擎**筛查。您可以按收款控制是否执行分析，以及如何处理分析结果。

反欺诈分析可以:

* 自动**批准**交易
* 因涉嫌欺诈而**拒绝**交易
* 根据预先定义的规则**转入人工审核**

<Callout type="warn">
  在跨境收款中,`fraudAnalysis` 为**必填**。请参阅[跨境收款](/docs/cartao/international)。
</Callout>

## 工作原理 [#工作原理]

当收款携带 `fraudAnalysis` 对象创建时，该操作会进入风险评估，评估基于多种标准，例如客户数据、购买行为和订单特征。

要使用反欺诈,只需在创建交易请求的 `creditCardPayment` 内包含 `fraudAnalysis` 对象。该对象携带设备标识(`fingerPrintId`)、浏览器数据(`browser`)和 MDD 字段(`definedFields`)。

```json
{
  "creditCardPayment": {
    "fraudAnalysis": {
      "fingerPrintId": "xyz123fingerprint",
      "browser": {
        "cookiesAccepted": true,
        "email": "joao.silva@example.com",
        "hostName": "host.example.com",
        "ipAddress": "192.168.0.1",
        "type": "Chrome"
      },
      "definedFields": [
        {
          "id": 1,
          "value": "Guest"
        }
      ]
    }
  }
}
```

`definedFields` 中可传入的取值列表请参阅 [MDD 字段表](/docs/cartao/mdds)。

响应中没有独立的反欺诈字段。分析结果通过 `creditCardPayment.status`、`reasonCode`
和 `reasonMessage` 返回:

| 分析结果    | 响应中的字段                                                           |
| ------- | ---------------------------------------------------------------- |
| 通过      | 收款进入授权流程,`status` 为 `1`(`Authorized`)或 `2`(`PaymentConfirmed`)   |
| 因涉嫌欺诈被拒 | `status` 为 `13`(`Aborted`),`reasonCode` 为 `16`(`AbortedByFraud`) |
| 未完成     | `reasonCode` 为 `17`(`CouldNotAntifraud`)                         |

完整取值见[交易状态与原因](/docs/cartao/transaction-status)。

## 获取 fingerPrintId [#获取-fingerprintid]

`fingerPrintId` 是由客户端自行生成的随机会话 id,应在支付请求中使用。每个 fingerprint 都是唯一的,有效期为 48 小时。

<Steps>
  <Step>
    ### 加载脚本 [#加载脚本]

    要获取 fingerprint,您需要在 HTML 页面中加载以下脚本:

    ```html
    <script src="https://static.payzu.io/scripts/antifraud.min.js"></script>
    ```
  </Step>

  <Step>
    ### 生成 id 并激活 fingerprint [#生成-id-并激活-fingerprint]

    之后,您需要生成一个随机 id 作为您的 fingerprint,并使用我们的脚本激活它。

    完整示例:

    ```html
    <head>
      <script src="https://static.payzu.io/scripts/antifraud.min.js"></script>
    </head>
    <script>
      // 将用作 fingerprint 的随机 id
      const uuid = self.crypto.randomUUID();

      // 生产环境
      payzuAntiFraud.init({
        identifier: uuid,
      });

      ...

      // sandbox 环境
      payzuAntiFraud.init({
        identifier: uuid,
        sandbox: true,
      });

      ...
    </script>
    ```

    `init` 函数的参数:

    | 参数           | 默认值   | 是否必填 |
    | ------------ | ----- | ---- |
    | `identifier` | \*    | 是    |
    | `sandbox`    | false | 否    |

    <Callout type="info">
      激活后,即可在 `fraudAnalysis` 字段中使用您的 fingerprint 来创建支付请求。
    </Callout>
  </Step>

  <Step>
    ### 在收款中发送 fraudAnalysis [#在收款中发送-fraudanalysis]

    要使用反欺诈创建收款,需要在 `creditCardPayment` 中提供 `fraudAnalysis` 字段。在 `browser` 中,`cookiesAccepted` 和 `ipAddress` 字段为必填。

    ```json
    {
      "customer": {
        "name": "João Silva",
        "identity": "12345678900",
        "identityType": "CPF",
        "email": "joao.silva@example.com",
        "phone": "5511912345678",
        "address": {
          "street": "Rua das Flores",
          "number": "123",
          "zipCode": "01234567",
          "city": "São Paulo",
          "state": "SP",
          "country": "Brasil",
          "district": "Centro"
        }
      },
      "creditCardPayment": {
        "fraudAnalysis": {
          "fingerPrintId": "xyz123fingerprint",
          "browser": {
            "cookiesAccepted": true,
            "email": "joao.silva@example.com",
            "hostName": "host.example.com",
            "ipAddress": "192.168.0.1",
            "type": "Chrome"
          },
          "definedFields": [
            {
              "id": 1,
              "value": "Guest"
            }
          ]
        }
      }
    }
    ```

    <Callout type="warn">
      schema 中 `customer` 只要求 `name`。请求中带 `fraudAnalysis` 时,反欺诈还要求 `identity`、`identityType`、`email`、`phone` 和 `address`;`address` 中只有 `complement` 可选。`birthdate` 仍为可选。
    </Callout>
  </Step>
</Steps>

## 后续步骤 [#后续步骤]

<QuickLinks>
  <QuickLink href="/docs/cartao/endpoints/charges/post_charges" title="创建收款" method="POST" path="/charges" />

  <QuickLink href="/docs/cartao/mdds" title="MDD 字段表" />

  <QuickLink href="/docs/cartao/international" title="跨境收款" />
</QuickLinks>