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.

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

- Verificación de la Necesidad de 3DS:
- 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.
- Se debe evaluar el estado de la transacción y el código de respuesta 3DS (
- Redirección a la URL del ACS:
- Utiliza la URL
acsUrl
proporcionada en la respuesta para redirigir al usuario al servidor de control de acceso (ACS) para la autenticación.
- Utiliza la URL
- Llamada a la Función
canProceed
:- Implementa la función
canProceed
para evaluar si se puede proceder con la autenticación 3DS, utilizando los datos proporcionados.
- Implementa la función
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.