Generación del token de Culqi

Este método tokeniza los datos de la tarjeta para la generación del cargo, la cual se envía en el objeto del request en la generación del cargo con el key source_id.

const response = await Culqi3DS.generateToken();

if (response.token) {
    // El token se genero exitosamente
    // response.token -> {id: "tkn_live_xxxxxxxxxxxxxxxx", ...}
} else {
    // Ocurrió un problema en la generación del token
    // response.error -> {user_message: "Mensaje al cliente", ...}
}
ParámetroDescripción
token
object
Objeto de la generación del token que se realizó con éxito.
error
object
Objeto del error en la generación del token.

Puedes consultar la documentación de Culqi para poder saber más acerca de la generación del token en los siguientes enlaces Creación de token y Objeto de error.

Generación del deviceFingerPrintId

Este método genera un identificador único el cual sirve para enviar en el objeto antifraud_details para la generación del cargo con el key device_finger_print_id.

const devideFingerPrintId = await Culqi3DS.generateDevice();

if (devideFingerPrintId) {
    /* '8019959c-fab1-49eb-bbbe-b846d308d8df' */
} else {
    /* Error al generar el device */
}

A continuación se muestra un ejemplo del body que se manda al servicio de https://api.culqi.com/v2/charges para la generación de cargo añadiendo el tokenId y el deviceId.

{
    "amount": 1000,
    "currency_code": "PEN",
    "email": "example@yopmail.com",
+   "source_id": "tkn_live_xxxxxxxxxxxxxxxx",
    "installments": 3,
    "antifraud_details": {
        "first_name": "Fernando",
        "last_name": "Chullo Mamani",
        "phone_number": "956-944-598",
+       "device_finger_print_id": "8019959c-fab1-49eb-bbbe-b846d308d8df"
    }
}

Este servicio responderá diferentes HTTP StatusCode:

Status CodeDescripción
201 Se generó exitosamente el cargo.
200 La generación de cargo necesita pasar por una autenticación (Culqi3DS).
4xx - 5xx Ocurrió un error en la generación del cargo.

Iniciar autenticación 3DS

Este método inicia el proceso de autenticación 3DS, el cual consiste en que el usuario ingrese el código de autenticación dentro de un formulario que despliega la librería.

Al finalizar este flujo se obtienen algunos parámetros que se tienen que mandar para la generación de cargos. En caso exista algún error aparecerá un mensaje (ver la configuración si se quiere cambiar).

Existen 2 formas de iniciar la autenticación 3DS:

Sin pasar como parámetro un token

Esto se da cuando se utiliza la misma libreria Culqi3DS para generar el token y no Culqi Checkout

Culqi3DS.initAuthentication();
Pasando como parámetro un token generado sin utilizar culqi3DS

Esto se da cuando se utiliza Culqi Checkout para generar el token y es enviado para iniciar la autenticación 3DS.

Culqi3DS.initAuthentication("tkn_live_xxxxxxxxxxxxxxxx");

Te mostramos un ejemplo del body que se manda al servicio de https://api.culqi.com/v2/charges por segunda vez para generación del cargo después de pasar por la autenticación 3DS.

{
    "amount": 1000,
    "currency_code": "PEN",
    "email": "example@yopmail.com",
    "source_id": "tkn_live_xxxxxxxxxxxxxxxx",
    "installments": 3,
    "antifraud_details": {
        "first_name": "Fernando",
        "last_name": "Chullo Mamani",
        "phone_number": "956-944-598",
        "device_finger_print_id": "8019959c-fab1-49eb-bbbe-b846d308d8df"
    },
+   "authentication_3DS": {
+       "eci":"05",
+       "xid":"02010000755f8c81a4db4c848b8c23f6b0196cfd",
+       "cavv":"63617264696e616c636f6d6d6572636561757468",
+       "protocolVersion":"2.1.0",
+       "directoryServerTransactionId":"755f8c81-a4db-4c84-8b8c-23f6b0196cfd"
+   },
}

Tanto el campo device_finger_print_id como el source_id deben tener los mismos valores que se enviaron para la generación del cargo en la primera vez.

Reinicio de la sesión

Para cada generación de cargo se tiene que volver a configurar la librería. Esto para evitar volver a mandar la misma información. Es necesario borrar las instancias generadas para un nuevo uso, usando la función reset().

Culqi3DS.reset();

Esto elimina las siguientes instancias:

  • Culqi3DS.settings
  • El objeto token generado