利用 Fraud Prevention 功能保护付款交易

本页面介绍如何使用 reCAPTCHA Enterprise Fraud Prevention 功能有效保护付款交易免受攻击,例如银行卡盗刷、付款方式盗窃欺诈和帐号盗用付款欺诈。

reCAPTCHA Enterprise Fraud Prevention 通过识别有针对性的人工攻击和规模化的欺诈尝试,帮助您保护付款交易。它会自动训练行为和交易模型,以识别可能具有欺诈性且在接受时可能导致争议或退款的事件。

作为这些模型的一部分,reCAPTCHA Enterprise Fraud Prevention 会检查交易信号以支持欺诈检测。例如,以低价进行一系列购买交易可能表示发生了银行卡攻击。在响应中,您会收到不同类型欺诈的风险得分,您可以使用该得分将交易送交人工审核,或者直接屏蔽足够可疑的交易。

如需设置 reCAPTCHA Enterprise Fraud Prevention,请完成以下步骤:

  1. 在付款前端安装 reCAPTCHA Enterprise

  2. 使用交易数据创建评估

  3. 使用交易事件为评估添加注解

  4. 解读回答,以便对潜在的欺诈行为采取行动。

准备工作

  1. 查看 reCAPTCHA Enterprise Fraud Prevention 的价格信息

  2. 为 reCAPTCHA Enterprise 准备好环境

  3. 创建基于得分的键

  4. 确认您的集成支持大于 8 KB 的令牌。reCAPTCHA Enterprise Fraud Prevention 可能会使用较大的令牌,因此,请确认这些令牌是通过 POST 请求(而非 GET)发送的,并且在正文中而不是标头中发送。

在付款前端安装 reCAPTCHA Enterprise

如需开始检测攻击,请在付款用户流中的每个页面上安装基于得分的密钥。其中包括用户查看购物车、选择付款方式并完成购买的界面。当用户在每一步作出选择后,调用 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 方法中的其他字段创建包含交易数据的评估。如果您要使用此功能,Google 必须为您的组织启用该功能。如需申请使用此功能,请与我们联系

最简单的集成包括交易 ID、付款方式、币种和交易价值。

{
  "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,
    }
  }
}

以下字段为选填字段,但我们建议您提供这些字段,以提高欺诈检测的质量。

{
  "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,
      "shipping_value": 7.99,
      "shipping_address": {
        "recipient": "name1 name2",
        "address": "123 Street Name",
        "address": "Apt 1",
        "locality": "Sunnyvale",
        "administrative_area": "CA",
        "region_code": "USA",
        "postal_code": "123456"
      },
      "billing_address": {
        "recipient": "name1 name2",
        "address": "123 Street Name",
        "address": "Apt 1",
        "locality": "Sunnyvale",
        "administrative_area": "CA",
        "region_code": "USA",
        "postal_code": "123456"
      },
      "user": {
        "account_id": "abcde12345",
        "creation_ms": 1650000000000,
        "email": "user@example.com",
        "email_verified": true,
        "phone_number": "+16502530000",
        "phone_verified" false
      },
      "merchant": {
        "account_id": "abcde12345",
        "creation_ms": 1650000000000,
        "email": "user@example.com",
        "email_verified": true,
        "phone_number": "+16502530000",
        "phone_verified": false
      },
      "items": {
        "name": "first item",
        "value": 19.99,
        "quantity": 1,
        "merchant_account_id": "abcde12345",
      },
      "items": {
        "name": "second item",
        "value": 19.99,
        "quantity": 1,
        "merchant_account_id": "abcde12345",
      },
      "gateway_info": {
        "name": "google",
        "gateway_response_code": "SUCCESS",
        "avs_response_code": "Y",
        "cvv_response_code": "Y",
      }
    }
  }
}

如需了解如何创建评估,请参阅为网站创建评估

使用交易事件为评估添加注解

为获得最佳性能,reCAPTCHA Enterprise Fraud Prevention 需要了解交易的付款生命周期事件。因此,您必须为使用事务数据创建的评估发送注释。例如,在以下情况下,您必须以事务事件的形式向 reCAPTCHA Enterprise Fraud Prevention 提供交易信息:

  • 付款服务机构接受或拒绝交易

  • 商家发放退款

  • 付款签发机构办理退款

如需详细了解如何发送注解,请参阅为评估添加注解

我们建议您在数据可用时(例如事务状态发生变化时),自动发出这些请求,作为系统中相应逻辑的一部分。

使用包含的交易数据创建评估后,reCAPTCHA Enterprise Fraud Prevention 会返回判定结果和 assessment_id。在付款生命周期的以下重要阶段,为评估添加交易事件注解:

事件类型 说明 原因示例 值示例
MERCHANT_APPROVE | MERCHANT_DENY 在您决定是否允许交易继续进行时。 IN_HOUSE 不适用
AUTHORIZATION | AUTHORIZATION_DECLINE 当您提交要处理的交易,并且发卡机构决定是否允许交易继续进行时。 82(表示 CVV 不正确的原因代码) 不适用
CHARGEBACK 当交易被退款时。 Card Reported Stolen 20 (表示 20 个货币单位的部分退款)

除了 CHARGEBACK 事件类型之外,还应使用 reason 字段添加发卡机构提供的退款原因代码。此外,如果交易被退回了部分款项,请在 value 字段中添加退回的金额。

在交易事件 reason 字段中,您可以添加澄清性字词以提供有关事件原因的更多背景信息,也可以提供直接从付款网络或发卡机构获取的原因代码。这些术语和代码因事件类型而异。

下表完整列出了交易事件类型:

注解原因 说明
MERCHANT_APPROVE 表示交易已获得商家批准。附带的原因可能包括 IN_HOUSEACCERTIFYCYBERSOURCEMANUAL_REVIEW 等术语。
MERCHANT_DENY 表示因商家检测到风险而拒绝并完成交易。附带的原因可能包括 IN_HOUSEACCERTIFYCYBERSOURCEMANUAL_REVIEW 等术语。
MANUAL_REVIEW 表示交易是由于怀疑或风险而由人工评估的。
AUTHORIZATION 表示发卡机构授权尝试成功。
AUTHORIZATION_DECLINE 表示向发卡机构进行授权尝试失败。随附的原因可能包括 Visa 的 54 表示银行卡已过期,或 82 表示 CVV 不正确。
PAYMENT_CAPTURE 表示交易已完成,因为相应资金已结算。
PAYMENT_CAPTURE_DECLINE 表示由于资金未结算,因此交易无法完成。
CANCEL 表示交易已取消。请说明取消原因。例如 INSUFFICIENT_INVENTORY
CHARGEBACK_INQUIRY 表示商家收到了因交易欺诈而收到的退款咨询,要求商家在正式发出欺诈退款并发送正式的退款通知之前提供更多信息。
CHARGEBACK_ALERT 表示商家由于交易欺诈而收到退款提醒。在不涉及付款网络的情况下解决争议的流程已开始。
FRAUD_NOTIFICATION 表示由于交易似乎具有欺诈性,因此付款方式的发卡银行针对交易发出了欺诈通知。对于此事件类型,我们建议在 reason 字段中包含 TC40SAFE 数据。对于部分退款,我们建议您在 value 字段中添加金额。
CHARGEBACK 表示付款网络通知商家,交易已因欺诈而进入退款流程。原因代码示例包括 Google 探索的 60056041。对于部分退款,我们建议您在 value 字段中添加金额。
CHARGEBACK_REPRESENTMENT 表示交易已由于欺诈而进入退款流程,并且商家已选择作为代理。原因示例包括 Google 探索的 60056041。对于部分退款,我们建议您在 value 字段中添加金额。
CHARGEBACK_REVERSE 表示交易存在不合法的欺诈退款,因此已撤回。对于部分退款,我们建议您在 value 字段中添加金额。
REFUND_REQUEST 表示商家已收到已完成交易的退款。对于部分退款,我们建议您在 value 字段中添加金额。原因示例:FRAUD
REFUND_DECLINE 表示商家已收到此交易的退款申请,但拒绝了。对于部分退款,我们建议您在 value 字段中添加金额。原因示例:FRAUD
REFUND 表示已完成的交易已由商家退款。对于部分退款,我们建议您在 value 字段中添加金额。原因示例:PROACTIVE_FRAUD
REFUND_REVERSE 表示已完成的交易已由商家退款,并且这笔退款已撤消。对于部分退款,我们建议您在 value 字段中添加金额。

以下示例展示了包含事务事件的示例注解载荷。如需了解详情,请参阅为评估添加注解

POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
{
  "transaction_event": {
    "event_type": "CHARGEBACK",
    "reason": "Card Reported Stolen",
    "value": 20
  }
}

解读评估

开始发送交易数据后,您会在 riskAnalysis 响应中看到 fraudPreventionAssessment 组件。

fraudPreventionAssessment 组件包括交易风险得分以及多个用于识别不同攻击类型的欺诈得分。reCAPTCHA Enterprise Fraud Prevention transactionRisk 得分介于 0.0 到 1.0 之间,总结了以下组件与此交易相关的风险。风险得分 0.0 表示风险较低且交易可能合法,风险得分 1.0 表示风险较高且互动可能是欺诈性的。

安装 reCAPTCHA Enterprise Fraud Prevention 并添加 TransactionData 组件后,您可以访问 cardTestingVerdict 值,该值检测使用您的网站测试被盗付款方式列表或暴力破解信息的攻击者。如果成功,则会给您的业务造成损失。

您还可以访问 behavioralTrustVerdict 值,该值根据您网站上和整个互联网的行为信号表示信任某个会话。如果您使用现有的欺诈引擎并希望减少假正例,此得分特别有用。由于此得分包含基于事务数据的传统检测的唯一正交信息,因此可有效提高某些存在风险或不中立事务的置信度。

发送包括退款信息的生命周期事件后,您可以访问 stolenInstrumentVerdict 值。借助 reCAPTCHA Enterprise 针对交易以及用户在数百万个网站中的行为进行分析的信号,该 API 可以检测即使规模非常小、可能具有欺诈性的攻击。

安全审核后,将启用对其他得分(付款方式被盗风险、卡测试风险)的访问权限。请与我们的销售团队联系,以启动安全审核。

以下代码块显示了包含 transactionRiskcardTestingVerdictstolenInstrumentVerdictbehavioralTrustVerdict 值的示例响应。

"riskAnalysis": {
    "score": "BOT_SCORE"
}
"fraudPreventionAssessment": {
    "transactionRisk": 0.9,
    "stolenInstrumentVerdict": {
        "risk": 0.7
    },
    "cardTestingVerdict": {
        "risk": 1.0
    }
    "behavioralTrustVerdict": {
        "trust": 0.0
    }
}

您要对根据评估所采取的行动负责。 对于最简单的集成,您可以在顶层 transactionRisk 设置阈值,该阈值有助于做出明智的决策。例如,它可能会导致邮件被送交人工审核,或者直接拒绝可能存在欺诈性的交易。您还可以在自己的欺诈工作流中使用这些得分,或将这些得分用作现有系统的规则的一部分。由于 reCAPTCHA Enterprise 检查不同的信号,并且对行为的了解也不同,因此即使使用已经成熟的检测引擎,您也可以期望获得更高的价值。

后续步骤