El 3DS 2.0 es un protocolo de seguridad crucial en las transacciones en línea, diseñado para autenticar de forma más robusta al titular de una tarjeta.

Cybersource 3DS Netpay

3DS 2.0 (también conocido como EMV 3DS) es la evolución del protocolo 3DS, ofreciendo una experiencia de usuario más fluida y una mayor seguridad en las transacciones con tarjeta. Este protocolo involucra a tres partes principales:

  • El comerciante: La entidad que recibe el pago.
  • El adquirente: La entidad que procesa la transacción para el comerciante.
  • El emisor: La entidad que emite la tarjeta al consumidor.

Cuando realizas una compra en línea y utilizas tu tarjeta de crédito, se activa un proceso de seguridad llamado 3DS 2.0 para verificar tu identidad y prevenir fraudes. Aquí es donde entra en juego Cybersource.

Estatus REVIEW

Cuando una transacción regresa con el estado review, se requiere una validación a través del protocolo 3D Secure (3DS) para garantizar pagos seguros. A continuación, se describen los pasos y los datos necesarios para completar este proceso con éxito.

Estructura del Objeto JSON de Respuesta

La respuesta de la API contiene un objeto JSON con información adicional, esencial para proceder con la autenticación 3DS. Los campos relevantes que debes extraer y manejar son los que vienen dentro de la sección del JSON que contiene el threeDSecureResponse:

  • status: Estado de la transacción (en este caso, "PROCEED_TO_VALIDATE_AUTHENTICATION").
  • responseCode: Código de respuesta para la autenticación 3DS.
  • acsUrl: URL del Access Control Server (ACS) para redirigir al usuario.
  • paReq: Payload de autenticación requerida para la autenticación 3DS.
  • authenticationTransactionID: Identificador de la transacción de autenticación.
{
  "source": "token_q8L5Bf-2XCzmybLpkOiRShJnwhYVo",
  "amount": 500.0,
  "description": "Pago de Inscripción del Jugador Jdnxn Dhsb de la categoría Hormigas",
  "status": "review",
  "transactionTokenId": "b895a3de-596f-4be9-880a-54bfa04d5b0a",
  "returnUrl": "https://gateway-154.netpaydev.com/gateway-ecommerce/v1/three-d-secure/paymenth-auth-enroll/b895a3de-596f-4be9-880a-54bfa04d5b0a?webHook=http://example.com/",
  "paymentMethod": "card",
  "currency": "MXN",
  "createdAt": "2022-11-17T23:10:39.465+0000",
  "threeDSecureResponse": {
    "responseCode": 475,
        "status": "PROCEED_TO_VALIDATE_AUTHENTICATION",
        "redirect": true,
        "authUrl": "https://gateway-154.netpaydev.com/gateway-ecommerce/v1/three-d-secure/paymenth-auth-enroll/b895a3de-596f-4be9-880a-54bfa04d5b0a",
        "jwt": null,
        "acsUrl": "https://merchantacsstag.cardinalcommerce.com/MerchantACSWeb/pareq.jsp?vaa=b&gold=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
        "paReq": "eNpVUstuwjAQvPsrItSzXyRA0dZS2orCAQSlRe0xdVYkVUnAcYDw9bUD9HHb2Yd3ZtbwkhnExyXq2qCCKVZVssYgT+86ejCyVqzeunvxLMay4nLBOwrm8TPuFOzRVHlZKEE5lcCukLgnjM6SwipI9O5+MlNh71aKHrALJLBBM3lUQnbDqNcHdoYEimSDaoY2mCdNsKQxDVIMHuiKAmtLBHRZF9Y0KhyEwK6AQG2+VGbtthoydjgcqG4+HJuyNhqpLjcMmO8gwH6pzWsfVU7xMU/V+yl7SseL4+prfUo/R8vp67rRp7h5fYnvgPkOAmliUUkupRCiH8juUPBh6IS3eQLJxtNRN0HEOeXcqT0nCGz9qviMXNHX/qacqtoYLPRV1hURwOO2LND1uDU/sZPxS/5h7F3W1vnXE9FAyIG3ucXteO78kREP2/m8NYv5GXY5Irvc20X//sE3T7qrSw==",
        "apiIdentifier": "5cf8a7aa0e423d0f7cf284d5",
        "apiKey": "f259a31f-fbba-4c21-9066-f1ad2db840ed",
        "orgUnitId": "5cf88ffbe0919f07acac88b6",
        "specificationVersion": "1.0.2",
        "eci": null,
        "eciRaw": null,
        "authenticationTransactionID": "c8Ftt1VX3v1R1H2s02Q0",
        "continueTransaction": true,
        "frictionLess": null,
        "xid": "YzhGdHQxVlgzdjFSMUgyczAyUTA=",
        "paresStatus": null
  }
}

Proceso de Autenticación


  1. Verificación de la Necesidad de 3DS:
    1. Se debe evaluar el estado de la transacción y el código de respuesta 3DS (responseCode) para determinar si es necesario proceder con la autenticación.
  2. Redirección a la URL del ACS:
    1. Utiliza la URL acsUrl proporcionada en la respuesta para redirigir al usuario al servidor de control de acceso (ACS) para la autenticación.
  3. Llamada a la Función canProceed:
    1. Implementa la función canProceed para evaluar si se puede proceder con la autenticación 3DS, utilizando los datos proporcionados.

📘

Acceso a las funciones de 3DS

Primero tenemos que agregar el siguiente CDN para poder acceder a las funciones de 3Ds 2.0

Sandbox:https://cdn.netpay.mx/js/dev/netpay3ds.js

Live: https://cdn.netpay.mx/js/latest/netpay3ds.js

Si tienes problemas de conflicto con jquery, puedes utilizar la siguiente versión

Sandbox: https://cdn.netpay.mx/js/dev/netpay3ds-noConflict.js

Live: https://cdn.netpay.mx/js/latest/netpay3ds-noConflict.js

let canProceed = netpay3ds.canProceed(data.status, data.threeDSecureResponse.responseCode, data.threeDSecureResponse.acsUrl);

if (canProceed) {
  const callbackProceed = function(_this, processorTransactionId, status) {
    if (status === 'success') {
      confirm(data.transactionTokenId, processorTransactionId);
    } else {
      console.log('Error: Transacción rechazada.');
    }
  };

  netpay3ds.proceed(_this, data.threeDSecureResponse.acsUrl, data.threeDSecureResponse.paReq, data.threeDSecureResponse.authenticationTransactionID, callbackProceed);
} else {
  console.log("Realizamos confirmación sin 3DS");
  confirm(data.transactionTokenId, null);
}

En este ejemplo:

  • netpay3ds.canProceed verifica si es posible proceder con la autenticación 3DS.
  • netpay3ds.proceed inicia el proceso de autenticación redirigiendo al usuario a la URL de ACS y manejando la respuesta a través del callbackProceed.
  • confirm es una función para confirmar la transacción tras la autenticación exitosa.

El método canProceed nos devolverá dos datos importantes: transactionTokenId y processorTransactionId. Estos datos son necesarios para ejecutar el endpoint de confirmación, el cual iniciará el envío de la transacción al banco emisor para proceder con el cobro.

🚧

¡Importante!

Debes tener en cuenta que, incluso en este punto, el banco podría rechazar la transacción, aunque la validación por 3DS haya sido correcta. Esto podría ocurrir, por ejemplo, debido a fondos insuficientes, ya que antes del 3DS y la confirmación aún no se manda ningún cobro a la tarjeta ante el banco emisor.