3DS 2.0

Uno de los mayores factores que afectan la reputación de un negocio es el nivel de seguridad que ofrecen a sus clientes. Por eso es necesario contar con un estándar de autenticación que aporte mayor seguridad y proteja los datos de los usuarios. A esto se le conoce como 3DS. A continuación te explicamos cómo implementarlo de manera segura y efectiva.

¿Qué es 3DS 2.0?

3DS 2.0 es un estándar técnico que agrega una capa de seguridad a las transacciones online pagadas con tarjeta de crédito o débito. 3D significa "tres dominios". El primero es el emisor de la tarjeta, el segundo el comerciante que recibe el pago, y el tercero es la infraestructura 3DS que actúa como intermediario seguro entre el consumidor y comerciante.

¿Cuál es la diferencia entre 3DS 1.0 y 3DS 2.0?

A diferencia de 3DS 1.0, 3DS 2.0 ofrece un nuevo enfoque de autenticación a través de una mayor obtención de datos. Es decir, la autenticación del usuario ocurre de manera silenciosa y en segundo plano usando los datos obtenidos del mismo, los cuales pueden ser encontrados dentro de la dirección de envío o facturación. A través de este mecanismo 3DS 2.0 aporta una mayor prevención de fraude, aunque su principal beneficio podría ser la reducción de compras abandonadas atribuidas a la fricción presentada en su versión anterior (3DS 1.0).

💡 NOTA: Es importante que se envíen los detalles de envío y facturación en cada orden y/o cargo creado para asegurar que una transacción pueda ser completada exitosamente. Para brindarte la mayor protección antifraude y darles a tus clientes una experiencia de compra superior, necesitamos que por lo menos sometas los detalles de facturación. Caso contrario, la transacción corre el riesgo de fallar si se activa el 3DS.

Diagrama 3DS 2.0

¿Cómo funciona 3DS 2.0?

Paso 1: Recolección de datos del cliente

El cliente ingresa su información de residencia y/o facturación en el proceso de checkout. Estos datos serán usados para la autenticación en segundo plano después de haber obtenido la información de su tarjeta de crédito o débito.

Si el banco determina que la información provista es suficiente para autenticar al cliente, su compra se completa sin fricción y se lo redirige a la página de confirmación de pago del comerciante. (Ver paso 6)

En caso de no ser suficientes o presentar alguna señal de no ser verdaderos, se le presentará al cliente el “challenge” de autenticación conocido en 3DS 1.0.

3D # 1

Paso 2: Recolección de la información de tarjeta

El titular de la tarjeta ingresa sus datos únicos de tarjeta de crédito o débito.

3D # 1

Paso 3: Redirección a página de proveedor 3DS

Si se confirma la necesidad de 3D secure, entonces el cliente es redirigido a una página 3DS proporcionada por el proveedor de la tarjeta.

3D # 1

Paso 4: Autenticación de seguridad adicional

En el sitio web del proveedor, se le pedirá al cliente ingresar su clave o un código de autenticación será enviado a su correo electrónico o teléfono asociado a su cuenta.

3D # 1

Paso 4: Redirección a página del comerciante

Si la autenticación del tarjetahabiente es exitosa entonces será redirigido de nuevo al sitio web del comerciante para la confirmación de pago.

3D # 1

Paso 5: Payment confirmation page

Una vez de regreso en el website del comerciante, se mostrará al cliente que su pago fue exitoso.

3D # 1

¿Cómo implementar 3DS 2.0?

  1. Ingresa al Merchant portal con tus credenciales.
  2. Desde el menú, navega y selecciona el menú de desarrollador.
  3. Introduce el URL al que tu cliente será redireccionado cuando el 3DS 2.0 esté terminado. La URL de redireccionamiento de 3DS 2.0 aparecerá en la siguiente lista, recuerda que puedes modificarlo en cualquier momento.
  4. Ahora puedes crear un cargo usando el endpoint de la transacción. Para que 3DS 2.0 pueda validar la identidad de un usuario exitosamente, primero necesitas añadir información como el nombre del cliente, teléfono, email y detalles de envío y facturación. EL 3DS solo detonará el “challenge” de verificación en caso de que se necesite cualquier información adicional para verificar la identidad del usuario. Asegúrate que tus clientes tengan una experiencia de verificación de identidad sin fricción enviando estos datos (nombre del cliente, teléfono, email, detalles de envío y facturación). En caso de no contar con la dirección de envío Hola Cash usará la dirección de facturación en su lugar.
  5. Nota: Las transacciones que no cuenten con toda la información requerida corren el riesgo de ser rechazadas por Hola Cash en caso de necesitar detonar el 3DS.

    1. Puedes añadir la información de envío y facturación al crear una orden o crear un cargo. Los campos del API son billing_details y shipping_details.
    2. Cada detalle de billing_details o shipping_details tiene un campo address, contact, yname. Para que tus transacciones puedan ser aprobadas por 3DS 2.0 es necesario que añadas por lo menos la siguiente información a tus datos datos de billing_details y shipping_details
      • address.address_line_1
      • address.country_code
      • address.locality
      • address.postal_code
      • address.region_name_or_code
      • contact.phone_1
      • contact.email
      • name.first_name
      • name.first_last_name

  6. Si se requiere que el cliente complete el “challenge” de verificación 3DS 2.0, vas a obtener una respuesta 400 con el status pendiente y el detalle “detail.code” indicando la acción requerida a realizar action_required. El detail.additional_details.action estará configurado a 3ds_authenticate indicando que el cliente necesita ser autenticado a través del 3DS y detail.additional_details.redirect_url apuntará a la URL a la que se deberá redireccionar al cliente para completar su autenticación.
  7. Al completarse la autenticación, el cliente será redireccionado al URL en el paso 3. El Hola Cash_transaction_id es también entregado como parámetro.
  8. Puedes utilizar el ID de transacción para verificar el status de la transacción utilizando los detalles de transacción.Cuando la verificación 3DS 2.0 sea exitosa, un webhook con cargo "succesful" será enviado al URL definido para webhooks (para más información revisar tutorial de Webhooks, si la autenticación 3DS 2.0 falla, entonces el webhook con el cargo "failed" será enviado. Puedes utilizar estos webhooks para ejecutar flujos de trabajo específicos en tu aplicación.

¿Cómo puedo simular una transacciones de 3DS 2.0?

    Dentro del flujo de desarrollo es importante pasar por una etapa de pruebas previamente al lanzamiento de una funcionalidad. Para habilitar esta posibilidad contamos con el entorno de pruebas Sandbox para el uso del widget y API de Hola Cash. Para acceder a este, únicamente necesitas utilizar tus Api Keys de Sandbox al momento de invocar el widget o al realizar tus peticiones HTTP. En el caso de las transacciones de 3DS en el ambiente de Sandbox hay algunas particularidades. Antes de comenzar, en esta otra sección de nuestra documentación puedes encontrar tarjetas de prueba para este procedimiento.

    Si nos remontamos al paso 6 de la implementación de 3DS, podemos ver que junto con el error se devuelve una URL a la cual se le redireccionará al usuario para realizar su validación de identidad. En el caso del ambiente de Sandbox el ingresar a esta liga te redigirá a un sitio de pruebas de 3DS, donde podrás seleccionar de manera visual el flujo que deseas que siga la transacción. Tras dar click en cualquiera de los dos botones se generaran las redirecciones configuradas en tu portal Hola Cash y se dispararán los eventos como notificación webhook a la URL que tengas configurada.

    Recuerda que para detonar la autenticación 3DS tienes que utilizar el monto especifíco mencionado en el listado de tarjetas de prueba.

    Si deseas realizar una prueba rápida para visualizar el comportamiento puedes utilizar las siguientes peticiones vía cURL, únicamente necesitas reemplazar tus llaves.

    Cómo crear un token

    curl --location --request POST 'https://sandbox.api.holacash.mx/v2/tokenization/payment_token' --header 'X-Api-Client-Key: <PASTE YOUR SECRET API KEY>' --header 'X-Cash-Anti-Fraud-Metadata: ewogICAgImlwX2FkZHJlc3MiOiIxMjMuMTIzLjEyMy4xMjMiLAogICAgImRldmljZV9pZCIgOiAiMTIzNDU2MTIzNDU2IiwKICAgICJ1c2VyX3RpbWV6b25lIiA6IiswMzozNCIsCiAgICAidXJsX2RvbWFpbl9uYW1lIiA6ImhvbGFjYXNoLm14IiwKICAgICJicm93c2VyX3ZlcnNpb24iIDoiMTIzIiwKICAgICJicm93c2VyX25hbWUiIDoiTW96aWxsYSIsCiAgICAiYnJvd3Nlcl90aW1lem9uZSIgOiJQU1QiLAogICAgInNjcmVlbl9yZXNvbHV0aW9uX3dpZHRoIiA6IjEyMyIsCiAgICAic2NyZWVuX3Jlc29sdXRpb25faGVpZ2h0IiA6IjEyMyIsCiAgICAid2luZG93X3Bvc2l0aW9uX3giIDoiMTIzIiwKICAgICJ3aW5kb3dfcG9zaXRpb25feSIgOiIxMjMiLAogICAgImNvbG9yX2RlcHRoIiA6IjEyMyIKfQ==' --header 'Content-Type: application/json' --data-raw '{ "credential": { "payment_method": { "method": "credit_or_debit_card" }, "credit_or_debit_card": { "card_number": "4000000000003063", "expiration_month": "12", "expiration_year": "2034", "card_validation_code": "123" } }, "consumer_details": { "contact": { "email": "richa@abc.com" }, "name": { "first_name": "Test", "second_first_name": "Hola", "first_last_name": "Cash", "second_last_name": "User" } } }'

    Creación de cargo (reemplaza payment_token)

    curl --location --request POST 'https://live.api.play.holacash.mx/v2/transaction/charge' --header 'X-Api-Client-Key: <PASTE YOUR PUBLIC API KEY>' --header 'X-Cash-Anti-Fraud-Metadata: ewogICAgImlwX2FkZHJlc3MiOiIxMjMuMTIzLjEyMy4xMjMiLAogICAgImRldmljZV9pZCIgOiAiMTIzNDU2IiwKICAgICJ1c2VyX3RpbWV6b25lIiA6IiswMzozNCIsCiAgICAidXJsX2RvbWFpbl9uYW1lIiA6ImhvbGFjYXNoLm14IiwKICAgICJicm93c2VyX3ZlcnNpb24iIDoiMTIzIiwKICAgICJicm93c2VyX25hbWUiIDoiTW96aWxsYSIsCiAgICAiYnJvd3Nlcl90aW1lem9uZSIgOiJQU1QiLAogICAgInNjcmVlbl9yZXNvbHV0aW9uX3dpZHRoIiA6IjEyMyIsCiAgICAic2NyZWVuX3Jlc29sdXRpb25faGVpZ2h0IiA6IjEyMyIsCiAgICAid2luZG93X3Bvc2l0aW9uX3giIDoiMTIzIiwKICAgICJ3aW5kb3dfcG9zaXRpb25feSIgOiIxMjMiLAogICAgImNvbG9yX2RlcHRoIiA6IjEyMyIKfQ====' --header 'Content-Type: application/json' --data-raw '{ "description": "This is a test description", "amount_details": { "amount": 3071, "currency_code": "MXN" }, "payment_detail": { "credentials": { "payment_method": { "method": "pay_with_holacash_payment_token" }, "holacash_payment_token": { "payment_token": "<PASTE YOUR PREVIOUSLY CREATED TOKEN>" } } }, "consumer_details": { "external_consumer_id": "your_consumer_id", "contact": { "id": "1234", "email": "test_abc@abc.com" }, "name": { "first_name": "Snoop", "second_first_name": "the", "first_last_name": "Doggy", "second_last_name": "Dog" } }, "billing_details" : { "contact": { "email": "test_user@example.com" }, "name": { "first_name": "Test", "second_first_name": "Hola", "first_last_name": "Cash", "second_last_name": "User" }, "address" : { "address_line_1" : "First line of address", "address_line_2" : "Unit number", "locality" : "CDMX", "region_name_or_code" : "CX", "postal_code" : "11503", "country_code" : "MEX" } }, "shipping_details" : { "contact": { "email": "test_user@example.com" }, "name": { "first_name": "Test", "second_first_name": "Hola", "first_last_name": "Cash", "second_last_name": "User" }, "address" : { "address_line_1" : "First line of address", "address_line_2" : "Unit number", "locality" : "CDMX", "region_name_or_code" : "CX", "postal_code" : "11503", "country_code" : "MEX" } }, "processing_instructions": { "auto_capture": false } }'

    En el Checkout Widget

    Revisa la sección “Crea una orden” en la Guía de Inicio Rápido del Checkout Widget.