使用欺诈防范功能保护付款交易

本页面介绍了如何使用 reCAPTCHA 欺诈防范功能有效保护支付交易免受攻击,例如卡、支付方式盗窃欺诈和账号盗用支付欺诈。

reCAPTCHA 欺诈防范功能可帮助您识别有针对性的人为攻击和规模化的欺诈尝试,从而保护付款交易。它会自动训练行为和交易模型,以识别可能存在欺诈行为的事件,如果接受这些事件,可能会导致争议或退款。

作为这些模型的一部分,reCAPTCHA 欺诈防范会检查交易信号,以便检测欺诈行为。例如,一系列低价购买尝试可能表明存在盗卡攻击。在响应中,您会收到不同类型的欺诈风险得分,您可以根据这些得分将交易送交人工审核,或直接阻止可疑程度足够高的交易。

如需设置 reCAPTCHA 欺诈防范,您需要完成以下步骤:

  1. 准备环境

  2. 为您的 Google Cloud 项目启用 reCAPTCHA 欺诈防范

  3. 选择前端集成可自动纳入来自前端设备的信号,如果您不想在前端集成,请选择 API 集成(仅限)

    当 JavaScript 执行时,reCAPTCHA 会为每个用户会话生成唯一的 reCAPTCHA 令牌,并收集用户行为数据以评估用户。

    仅限 API 的集成仅使用必需的交易数据返回判决,不需要此令牌。

  4. 使用之前选择的前端集成仅限 API 的集成,通过后端提交包含交易数据的 create assessment API 请求。

    create assessment API 请求的响应中,reCAPTCHA 会提供交易风险评分和额外的可解释性原因(例如 HIGH_TRANSACTION_VELOCITY,如果适用)。

  5. 根据得分确定用户的后续操作

    您可以选择允许交易、要求进行额外验证、转送人工审核或阻止交易。

准备工作

  1. 如果您刚接触 reCAPTCHA,请执行以下操作:

    1. 在 Google Cloud 项目中配置 reCAPTCHA。

    2. 创建基于得分的 reCAPTCHA 密钥

  2. 如果您计划进行前端集成,请验证您的环境是否支持大于 8 kB 的令牌,因为 reCAPTCHA 欺诈防范功能可能会使用更大的令牌。

启用 reCAPTCHA 欺诈防范

  1. 在 Google Cloud 控制台中,前往 reCAPTCHA 页面。

    前往 reCAPTCHA

  2. 验证项目名称是否显示在资源选择器中。

    如果您没有看到项目名称,请点击资源选择器,然后选择您的项目。

  3. 点击 设置

  4. 欺诈防范窗格中,点击配置

  5. 点击启用切换开关,然后点击保存

前端集成 - 在您的网站上安装 reCAPTCHA

将欺诈防范与 reCAPTCHA 前端集成搭配使用有助于防范卡攻击和欺诈性交易。如需开始检测攻击,请在付款用户体验流程的每个页面上安装基于得分的 reCAPTCHA 密钥。这包括用户查看购物车、选择付款方式并完成购买的界面。 用户在每个步骤中做出选择后,调用 grecaptcha.enterprise.execute() 生成令牌。如需了解如何安装基于得分的密钥并调用 execute(),请参阅安装基于得分的密钥

以下示例展示了如何在信用卡交易事件中集成基于得分的密钥:

function submitForm() {
  grecaptcha.enterprise.ready(function() {
    grecaptcha.enterprise.execute(
      'reCAPTCHA_site_key', {action: 'purchase'}).then(function(token) {
       document.getElementById("token").value = token;
       document.getElementByID("paymentForm").submit();
    });
  });
}
<form id="paymentForm" action="?" method="POST">
  Total: $1.99
  Credit Card Number: <input name="cc-number" id="cc-number" autocomplete="cc-number"><br/>
  <input type="hidden" id="token" name="recaptcha_token"/>
  <button onclick="submitForm()">Purchase</button>
</form>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>

您可以通过单击代码窗口右上角的 <> 图标,在 JSFiddle 中尝试此代码。

<html>
  <head>
    <title>Protected Payment</title>
    <script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
    <script>
    function submitForm() {
      grecaptcha.enterprise.ready(function() {
        grecaptcha.enterprise.execute(
          'reCAPTCHA_site_key', {action: 'purchase'}).then(function(token) {
           document.getElementById("token").value = token;
           document.getElementByID("paymentForm").submit();
        });
      });
    }
    </script>
  </head>
  <body>
    <form id="paymentForm" action="?" method="POST">
      Total: $1.99
      Credit Card Number: <input name="cc-number" id="cc-number" autocomplete="cc-number"><br/>
      <input type="hidden" id="token" name="recaptcha_token"/>
      <button onclick="submitForm()">Purchase</button>
    </form>
  </body>
</html>

前端集成 - 使用交易数据创建评估

如需接收支付欺诈判定结果,请使用 projects.assessments.create 方法中的其他字段,通过 Transaction Data 创建评估。

集成至少需要 payment_methodcard_bincard_last_four 字段。为提高检测质量,建议添加选填字段,例如 emailphone_numberbilling_address

如需通过前端集成接收欺诈防范评估,您需要满足以下条件之一:

{
  "event": {
    "token": "YOUR_TOKEN",
    "site_key": "KEY_ID",
    "expected_action": "YOUR_CHECKOUT_ACTION_NAME",
    "transaction_data": {
            "transaction_id": "txid-1234567890",
            "payment_method": "credit-card",
            "card_bin": "411111",
            "card_last_four": "1234",
            "currency_code": "USD",
            "value": 39.98,
            "user": {
                "email": "someEmailAddress@example.com"
            },
            "billing_address": {
                "recipient": "name1 name2",
                "address": [
                    "123 Street Name",
                    "Apt 1"
                ],
                "locality": "Sunnyvale",
                "administrative_area": "CA",
                "region_code": "USA",
                "postal_code": "123456"
            }
        }
    }
}

为了提高分数质量,我们建议您还发送其他信号

如需了解如何创建评估,请参阅为您的网站创建评估。reCAPTCHA 欺诈防范功能可能会使用较大的令牌,因此请验证请求是否以 POST 请求而非 GET 请求的形式发送;并且在正文中发送,而不是在标头中发送。

仅限 API 的集成 - 使用交易数据创建评估

如需接收支付欺诈判定结果,请使用 projects.assessments.create 方法中的其他字段,通过 Transaction Data 创建评估。

由于 reCAPTCHA 仅限 API 的集成仅使用您提供的交易数据生成欺诈防范评估,因此您必须至少提供以下数据:

  1. 账单邮寄地址 regionCodepostalCode
  2. 交易数据 paymentMethod
  3. 下列其中一项:
{
  "event": {
    "site_key": "KEY_ID",
    "expected_action": "YOUR_CHECKOUT_ACTION_NAME",
    "transaction_data": {
            "transaction_id": "txid-1234567890",
            "payment_method": "credit-card",
            "card_bin": "411111",
            "card_last_four": "1234",
            "currency_code": "USD",
            "value": 39.98,
            "user": {
                "account_id": "abcde12345",
                "email": "someEmailAddress@example.com",
                "phone_number": "+18005550175",
            },
            "billing_address": {
                "recipient": "name1 name2",
                "address": [
                    "123 Street Name",
                    "Apt 1"
                ],
                "locality": "Sunnyvale",
                "administrative_area": "CA",
                "region_code": "USA",
                "postal_code": "123456"
            }
        }
    }
}

为了提高得分质量,我们建议您尽可能多地提供输入内容,并发送其他信号

解读评估

开始发送交易数据后,您会收到评估结果,以 JSON 响应的形式呈现,其中包含 riskAnalysis 中的 fraudPreventionAssessment 组件。

以下示例是一个示例回答:

{
  "event": {....
  ....
  }
  .....
  ....
  ....
"fraudPreventionAssessment": {
    "transactionRisk": 0.9,
    "riskReasons": HIGH_TRANSACTION_VELOCITY
}
}

您收到的响应中包含分数和原因代码(如果适用)。 分数越高,交易欺诈风险可能越大;分数越低,交易合法性可能越高。例如,0.9 分表示交易欺诈风险可能较高,而 0.1 分表示交易合法性可能较高。

您需要为根据评估结果采取的行动负责。 对于最简单的集成,您可以设置 transactionRisk 的阈值来帮助您做出决策。例如,它可以帮助将交易送交人工审核,或直接拒绝可能存在欺诈的交易。 您还可以在自己的欺诈工作流程中使用该得分,或者将其用作现有系统中的规则的一部分。由于 reCAPTCHA 会检查独特的信号,并且对整个互联网的行为具有独特的可见性,因此即使您已经拥有成熟的欺诈检测引擎,也可以期待获得增量价值。

每个得分段都经过校准,以达到最高假正例率,该比率表示可能会遇到额外摩擦的合法用户的最大比例。您需要选择的阈值取决于您的业务需求。以下是一些示例,展示了如何使用 transactionRisk 分数:

风险容忍度 建议的阈值 假正例率上限 用法示例
0.5 5% 在接受交易之前,需要进行额外的验证,例如 2FA
0.7 1% 将交易送至人工审核流程
0.9 0.1% 拒绝交易

后续步骤