Realizar el pago con autenticación

Función esitefDoPayment#

Después de que el cliente complete todos los campos en la pantalla de la tienda, debe hacer clic en un botón para finalizar el pago. En el evento onclick, se debe llamar a una función de JavaScript que complete la solicitud con nit, payToken, merchantId, authenticate, la función de devolución de llamada onSuccess, onProcessing, onFailure, onInvalid y posteriormente llame a la función esitefDoPayment, pasando la solicitud como parámetro. La función esitefDoPayment realiza la autenticación 3DS, que puede mostrar un desafío en el que pueden ocurrir verificaciones de códigos de seguridad, validación de tokens, aprobaciones en el dispositivo móvil del comprador u otros. Posteriormente a la autenticación, se lleva a cabo la autorización del pago en la entidad adquirente. Es importante dejar claro que según la parametrización proporcionada durante la creación de la transacción (campo authenticate), el comportamiento de la autorización de la transacción puede cambiar:

  • Si la transacción se envía con authenticate = 1, entonces la transacción solo se autorizará si la autenticación es aprobada.
  • Si la transacción se envía con authenticate = 2, entonces la transacción solo se autorizará si la autenticación es aprobada, pero para marcas no admitidas por 3DS, no se realizará el paso de autenticación.
  • Si la transacción se envía con authenticate = 3, entonces la transacción seguirá el flujo de autenticación, pero si hay un resultado negativo, el flujo continuará hacia la autorización.

Llamando al script de Carat#

Cuando el comprador complete los datos de la tarjeta y haga clic en pagar, la página del comerciante debe llamar a la función de JavaScript esitefDoPayment, pasando como argumento una solicitud con los siguientes campos:

ParámetroDescripciónFormatoObligatorio
nitIdentificador de transacción en Carat. Campo nit recibido en la etapa de creación de la transacción.= 64 AN
payTokenCampo pay_token recibido en la etapa de creación de la transacción. Este token solo puede ser utilizado una vez.= 66 AN
merchantIdCódigo de la tienda en Carat. Los códigos de producción y certificación serán diferentes.< 15 N
onSuccessFunción de devolución de llamada que se llamará después de un pago exitoso en Carat. Esta función recibe como argumento la respuesta del pago descrita en - Respuesta de las devoluciones de llamada de éxito y fracaso.F
onProcessingFunción de devolución de llamada que se llamará después de un desafío solicitado por el emisor en el flujo de autenticación 3DS o confirmación tardía.F
onFailureFunción de devolución de llamada que se llamará después de un pago fallido en Carat. Esta función recibe como argumento la respuesta del pago descrita en - Respuesta de las devoluciones de llamada de éxito y fracaso.F
onInvalidFunción de devolución de llamada que se llamará después de un error de validación de JavaScript. Esta función recibe como argumento la lista de errores descrita en - Respuesta de la devolución de llamada de error de validación.F
authenticateCampo booleano para indicar que el pago con JavaScript incluye autenticación 3DS, pasar 'true' si el pago es con 3DS.= 4 AN
challengeWindowSizeCampo que representa el tamaño para la presentación del desafío: 01 - 250 x 400, 02 - 390 x 400, 03 - 500 x 600. Si no se proporciona, JavaScript determinará un valor a utilizar.= 2 ANNO

Respuesta de las devoluciones de llamada de éxito y fracaso#

Las funciones de devolución de llamada onSuccess y onFailure reciben como argumento un objeto que contiene información sobre el pago. A continuación se describen estos campos:

ParámetroDescripciónFormato
codeCódigo de respuesta de Carat. Cualquier código diferente de 0 (cero) indica un fallo. Para obtener más información, consulte los Códigos de Respuesta.< 4 N
messageMensaje de respuesta de Carat.< 500 AN
payment
authorizer_codeCódigo de respuesta del autorizador.< 10 AN
authorizer_messageMensaje de respuesta del autorizador.< 500 AN
statusEstado de la transacción de pago en Carat.= 3 AN
nitNúmero identificador de la transacción de pago en Carat.= 64 AN
order_idCódigo de pedido enviado por la tienda al crear la transacción.< 40 AN
customer_receiptCupón (a través del cliente).< 4000 AN
authorizer_idCódigo del autorizador utilizado en la transacción.< 4 N

Respuesta de la devolución de llamada de error de validación#

La función de devolución de llamada onInvalid recibe como argumento una lista de objetos de error de validación, que contienen los campos a continuación:

ParámetroDescripciónFormato
fieldNombre del campo con error.< 30 AN
causeMensaje de error.<100 AN

Ejemplo#

A continuación, se muestra un ejemplo de una función de JavaScript llamando a esitefDoPayment:

function myPay() {
var request = {
onSuccess: function(response) {
var responseValue = JSON.stringify(response);
localStorage.setItem('resultSuccess', responseValue);
if (response.payment.status == 'PPC') {
window.location = 'loja-pag-pendente-3ds-mpi.html?nit='+ findGetParameter('nit');
} else {
window.location = 'loja-sucesso-3ds-mpi.html';
}
},
onProcessing: function() {
window.location = 'loja-pag-pendente-3ds-mpi.html?nit='+ findGetParameter('nit');
},
onFailure: function(response) {
var responseValue = JSON.stringify(response);
localStorage.setItem('resultFailure', responseValue);
window.location = 'loja-fracasso-js.html';
},
onInvalid: function(response) {
var message = response[0].field + ' ' + response[0].cause;
for (var i = 1; i < response.length; i++) {
message += ', ' + response[i].field + ' ' + response[i].cause;
}
document.getElementById('resultInvalid').innerHTML = message;
},
nit: findGetParameter('nit'),
payToken: findGetParameter('payToken'),
merchantId: findGetParameter('merchantId'),
authenticate: 'true'
};
esitefDoPayment(request);
}
function findGetParameter(parameterName) {
var result = null,
tmp = [];
var items = location.search.substr(1).split("&");
for (var index = 0; index < items.length; index++) {
tmp = items[index].split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
}
return result;
}