Protege las transacciones de pago con la prevención de fraudes

En esta página, se describe cómo proteger de forma eficaz las transacciones de pago contra ataques, como el uso de tarjetas, el fraude con instrumentos robados y el fraude en los pagos por apropiación de cuentas mediante la prevención de fraudes de reCAPTCHA Enterprise.

La prevención de fraudes de reCAPTCHA Enterprise te ayuda a proteger las transacciones de pago mediante la identificación de ataques manuales dirigidos y de intentos de fraude a gran escala. Entrena automáticamente modelos de transacciones y comportamientos para identificar eventos que probablemente sean fraudulentos y que puedan dar lugar a una disputa o una devolución del cargo si se aceptan.

Como parte de estos modelos, la prevención de fraudes de reCAPTCHA Enterprise examina los indicadores de transacción para habilitar la detección de fraudes. Por ejemplo, una serie de intentos de compra con precios bajos puede indicar un ataque de tarjetas. En la respuesta, recibirás puntuaciones de riesgo para diferentes tipos de fraude, que puedes usar a fin de enviar la transacción a una revisión manual o bloquear directamente transacciones lo suficientemente sospechosas.

Para configurar la prevención de fraudes de reCAPTCHA Enterprise, completa los siguientes pasos:

  1. Instala reCAPTCHA Enterprise en tu frontend de pago.

  2. Crea evaluaciones con datos de transacciones.

  3. Anota las evaluaciones con eventos de transacción.

  4. Interpretar las respuestas para tomar medidas ante posibles fraudes

Antes de comenzar

  1. Revisa la información de precios para la prevención de fraudes de reCAPTCHA Enterprise.

  2. Prepara tu entorno para reCAPTCHA Enterprise.

  3. Crea claves basadas en puntuaciones.

  4. Confirma que tu integración admita tokens de más de 8 KB. Es posible que la prevención de fraudes de reCAPTCHA Enterprise use tokens más grandes, así que confirma que se envíen en solicitudes POST en lugar de GET, y en el cuerpo, no en un encabezado.

Instala reCAPTCHA Enterprise en tu frontend de pagos

Para comenzar a detectar ataques, instala una clave basada en la puntuación en cada página de tu flujo de usuarios de pagos. Esto incluye la interfaz en la que un usuario revisa su carrito, selecciona su forma de pago y completa la compra. Después de que el usuario haga su selección en cada paso, llama a grecaptcha.enterprise.execute() para generar un token. Para aprender a instalar claves basadas en puntuaciones y llamar a execute(), consulta Cómo instalar claves basadas en puntuaciones.

En el siguiente ejemplo, se muestra cómo integrar una clave basada en puntuaciones en un evento de transacción con tarjeta de crédito.

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>

Puedes experimentar con este código en JSFiddle si haces clic en el icono <> en la esquina superior derecha de la ventana de código.

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

Crea una evaluación con datos de transacciones

Para habilitar los veredictos de fraude de pago, crea evaluaciones con datos de transacciones mediante los campos adicionales en el método projects.assessments.create. Para que puedas usar esta función, Google debe habilitarla en tu organización. Para solicitar acceso a esta función, comunícate con nosotros.

La integración más simple incluye el ID de transacción, la forma de pago, la moneda y el valor de la transacción.

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

Los siguientes campos son opcionales, pero recomendamos proporcionarlos para mejorar la calidad de la detección de fraudes.

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

Si deseas obtener información para crear evaluaciones, consulta Crea una evaluación para tu sitio web.

Anota evaluaciones con eventos de transacción

Para obtener el mejor rendimiento, la prevención de fraudes de reCAPTCHA Enterprise necesita visibilidad de los eventos del ciclo de vida de los pagos para las transacciones. Por lo tanto, debes enviar anotaciones para las evaluaciones que creaste con los datos de transacciones. Por ejemplo, debes proporcionar la información de la transacción a Prevención de fraudes de reCAPTCHA Enterprise como un evento de transacción en las siguientes situaciones:

  • El proveedor de pagos acepta o rechaza la transacción.

  • El comercio emite un reembolso.

  • La entidad emisora de pagos envía un reembolso

Para obtener más información sobre cómo enviar anotaciones, consulta Anota evaluaciones.

Te recomendamos que realices estas solicitudes automáticamente como parte de la lógica correspondiente en tu sistema cuando los datos estén disponibles, como cuando cambia el estado de una transacción.

Después de crear una evaluación con los datos de transacciones incluidos, la Prevención de fraudes de reCAPTCHA Enterprise muestra un veredicto y un assessment_id. Anota la evaluación con eventos de transacción en las siguientes etapas importantes del ciclo de vida de pago cuando se produzcan:

Tipo de evento Descripción Ejemplo del motivo Ejemplo de valor
MERCHANT_APPROVE | MERCHANT_DENY Cuando decidas si la transacción debe poder continuar. IN_HOUSE No disponible
AUTHORIZATION | AUTHORIZATION_DECLINE Cuando envías la transacción para que se procese, la entidad emisora de la tarjeta decide si permite que se realice. 82 (un código de motivo significa que el CVV era incorrecto) No disponible
CHARGEBACK Cuando se devuelven los cargos de la transacción. Card Reported Stolen 20 (que representa una devolución del cargo parcial de 20 unidades monetarias)

Junto con el tipo de evento CHARGEBACK, incluye el código del motivo de la devolución del cargo que proporciona la entidad emisora de la tarjeta mediante el campo reason. Además, incluye el importe monetario que se cobró en el campo value si la transacción se cobró de forma parcial.

En el campo reason del evento de transacción, incluye términos aclaratorios para proporcionar más contexto sobre el motivo del evento o proporciona códigos de motivo que se obtienen directamente de la red de pagos o la entidad emisora de la tarjeta. Estos términos y códigos difieren según el tipo de evento.

En la siguiente tabla, se especifica la lista completa de tipos de eventos de transacción:

Motivo de la anotación Descripción
MERCHANT_APPROVE Indica que el comercio aprobó la transacción. Los motivos correspondientes pueden incluir términos como IN_HOUSE, ACCERTIFY, CYBERSOURCE o MANUAL_REVIEW.
MERCHANT_DENY Indica que la transacción se rechazó y se concluyó debido a riesgos detectados por el comercio. Los motivos correspondientes pueden incluir términos como IN_HOUSE, ACCERTIFY, CYBERSOURCE o MANUAL_REVIEW.
MANUAL_REVIEW Indica que una persona está evaluando la transacción debido a sospechas o riesgos.
AUTHORIZATION Indica que se realizó correctamente el intento de autorización con la entidad emisora de la tarjeta.
AUTHORIZATION_DECLINE Indica que falló el intento de autorización con la entidad emisora de la tarjeta. Los motivos pueden ser el 54 de Visa, que indica que la tarjeta está vencida, o el 82, que indica que el CVV es incorrecto.
PAYMENT_CAPTURE Indica que la transacción se completó porque se liquidaron los fondos.
PAYMENT_CAPTURE_DECLINE Indica que no se pudo completar la transacción porque no se liquidaron los fondos.
CANCEL Indica que se canceló la transacción. Especifica el motivo de la cancelación. Por ejemplo, INSUFFICIENT_INVENTORY.
CHARGEBACK_INQUIRY Indica que el comercio recibió una consulta de devolución del cargo debido a un fraude por la transacción y que solicita información adicional antes de que se emita oficialmente una devolución del cargo por fraude y se envíe una notificación formal de devolución del cargo.
CHARGEBACK_ALERT Indica que el comercio recibió una alerta de devolución del cargo debido a un fraude por la transacción. Se inicia el proceso de resolución de la disputa sin involucrar a la red de pagos.
FRAUD_NOTIFICATION Indica que el banco emisor del instrumento de pago envía una notificación de fraude para la transacción porque parece que la transacción es fraudulenta. Recomendamos incluir datos de TC40 o SAFE en el campo reason para este tipo de evento. En el caso de las devoluciones de cargos parciales, te recomendamos que incluyas un importe en el campo value.
CHARGEBACK Indica que la red de pagos le informa al comercio que la transacción ingresó al proceso de devolución del cargo debido a un fraude. Los ejemplos de código de motivo incluyen 6005 y 6041 de Descubre. En el caso de las devoluciones de cargos parciales, te recomendamos que incluyas un importe en el campo value.
CHARGEBACK_REPRESENTMENT Indica que la transacción ingresó al proceso de devolución del cargo debido a un fraude y que el comercio eligió participar. Algunos ejemplos de motivos incluyen 6005 y 6041 de Descubre. En el caso de las devoluciones de cargos parciales, te recomendamos que incluyas un importe en el campo value.
CHARGEBACK_REVERSE Indica que la transacción tuvo una devolución del cargo por fraude que era ilegítima y, como resultado, se revirtió. En el caso de las devoluciones de cargos parciales, te recomendamos que incluyas un importe en el campo value.
REFUND_REQUEST Indica que el comercio recibió un reembolso por una transacción completada. En el caso de los reembolsos parciales, te recomendamos que incluyas un importe en el campo value. Ejemplo del motivo: FRAUD.
REFUND_DECLINE Indica que el comercio recibió una solicitud de reembolso por esta transacción, pero la rechazó. En el caso de los reembolsos parciales, te recomendamos que incluyas un importe en el campo value. Ejemplo del motivo: FRAUD.
REFUND Indica que el comercio reembolsó la transacción completada. En el caso de los reembolsos parciales, te recomendamos que incluyas un importe en el campo value. Ejemplo del motivo: PROACTIVE_FRAUD.
REFUND_REVERSE Indica que el comercio reembolsó la transacción completada y que se revirtió. En el caso de los reembolsos parciales, te recomendamos que incluyas un importe en el campo value.

En el siguiente ejemplo, se muestra una carga útil de anotación que contiene un evento de transacción. Para obtener más detalles, consulta Anota evaluaciones.

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

Interpreta las evaluaciones

Después de comenzar a enviar los datos de la transacción, verás el componente fraudPreventionAssessment en la respuesta riskAnalysis.

El componente fraudPreventionAssessment incluye una puntuación de riesgo de la transacción y varias puntuaciones de fraude que identifican diferentes tipos de ataques. La puntuación transactionRisk de Prevención de fraudes de reCAPTCHA Enterprise varía de 0.0 a 1.0, lo que resume el riesgo asociado con esta transacción de los siguientes componentes. La puntuación de riesgo de 0.0 indica que el riesgo es bajo y que la transacción es probable que sea legítima, y 1.0 indica que el riesgo es alto y que la interacción es probablemente fraudulenta.

Si instalas la prevención de fraudes de reCAPTCHA Enterprise y agregas el componente TransactionData, obtendrás acceso al valor cardTestingVerdict, que detecta adversarios mediante el uso de tu sitio web para probar listas de instrumentos robados o información de fuerza bruta. Cuando tienen éxito, esto genera pérdidas para tu empresa.

También obtienes acceso al valor behavioralTrustVerdict, que indica la confianza de una sesión en función de los indicadores de comportamiento en tu sitio y en Internet. Esta puntuación es particularmente útil si usas un motor de fraude existente y deseas reducir los falsos positivos. Dado que esta puntuación incluye información única y ortogonal en la detección convencional basada en datos de transacciones, es eficaz para agregar confianza en ciertas transacciones neutrales o que de otra manera serían riesgosas.

Después de enviar eventos de ciclo de vida, incluida la información de devolución del cargo, obtienes acceso al valor stolenInstrumentVerdict. Esto detecta ataques, incluso a muy baja escala, que probablemente sean fraudulentos, según las señales que reCAPTCHA Enterprise analiza en la transacción y el comportamiento del usuario en la red de millones de sitios web.

El acceso a las puntuaciones adicionales (riesgo de instrumento robado, riesgo de prueba de tarjetas) se habilita después de una revisión de seguridad. Comunícate con nuestro equipo de ventas para iniciar la revisión de seguridad.

En el siguiente bloque, se muestra un ejemplo de respuesta con los valores transactionRisk, cardTestingVerdict, stolenInstrumentVerdict y behavioralTrustVerdict.

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

Tú eres responsable de las acciones que realices en función de la evaluación. Para la integración más simple, puedes establecer umbrales en el nivel superior transactionRisk para contribuir a tu decisión. Por ejemplo, puede contribuir al envío de una revisión manual o a rechazar directamente las posibles transacciones fraudulentas. También puedes usar estas puntuaciones en tus propios flujos de trabajo de fraude o como parte de las reglas con tu sistema existente. Debido a que reCAPTCHA Enterprise examina diferentes indicadores y tiene una visibilidad de comportamiento distinta, puedes esperar un valor incremental incluso con un motor de detección ya maduro.

¿Qué sigue?