Efetivar o Pagamento com autenticação

Function esitefDoPayment#

Depois do cliente preencher todos os campos na tela da loja, ele deve clicar em um botão para finalizar o pagamento. No evento de onclick deve ser chamada uma function javascript que preenche a request com nit, payToken, merchantId, authenticate, function de callback onSuccess, onProcessing, onFailure, onInvalid e posteriormente chamará a function esitefDoPayment, passando a request como parâmetro. A function esitefDoPayment executa a autenticação 3DS, que pode exibir um desafio no qual pode ocorrer verificações de códigos de segurança, validação de tokens, aprovações no dispositivo móvel do comprador ou outros. Posteriormente a autenticação ocorre a autorização do pagamento na adquirente. É importante deixar claro que de acordo com a parametrização passado na criação da transação (campo authenticate), o comportamento da autorização da transação pode mudar:

  • Se a transação for passada com authenticate = 1, então a transação só será autorizada se a autenticação for aprovada.
  • Se a transação for passada com authenticate = 2, então a transação só será autorizada se a autenticação for aprovada, mas para bandeiras não suportadas pelo 3DS, não ocorrerá o passo da autenticação.
  • Se a transação for passada com authenticate = 3, então a transação passará pelo fluxo de autenticação, mas se houver um resultado negado, o fluxo segue para a autorização.

Chamando o script do Carat#

Quando o comprador preencher os dados do cartão e clicar em pagar, a página do lojista deve chamar a function javascript esitefDoPayment passando como argumento uma requisição com os seguintes campos:

ParâmetroDescriçãoFormatoObrigatório
nitIdentificador de transação no Carat. Campo nit recebido na etapa de criação da transação.= 64 ANSIM
payTokenCampo pay_token recebido na etapa de criação da transação. Este token só pode ser utilizado uma vez.= 66 ANSIM
merchantIdCódigo da loja no Carat. Os códigos de produção e certificação serão diferentes.< 15 NSIM
onSuccessFunction de callback que será chamada após um pagamento bem-sucedido no Carat. Esta function recebe como argumento a resposta do pagamento descrita em - Resposta dos callbacks de sucesso e fracasso.FSIM
onProcessingFunction de callback que será chamada após um desafio solicitado pelo emissor no fluxo de autenticação 3DS ou confirmação tardia.FSIM
onFailureFunction de callback que será chamada após um pagamento mal sucedido no Carat. Esta function recebe como argumento a resposta do pagamento descrita em - Resposta dos callbacks de sucesso e fracasso.FSIM
onInvalidFunction de callback que será chamada após um erro de validação JavaScript. Esta function recebe como argumento a lista de erros descrita em - Resposta do callback de erro de validação.FSIM
authenticateCampo boleano para informar que o pagamento javascript é com autenticação 3DS, passar 'true' caso o pagamento seja com 3DS= 4 ANSIM
challengeWindowSizeCampo que representa o tamanho para a apresentação do challenge: 01 - 250 x 400, 02 - 390 x 400, 03 - 500 x 600, caso não seja passado o javascript irá determinar um valor a ser utilizado= 2 ANNÃO

Resposta dos callbacks de sucesso e fracasso#

As functions de callback onSuccess e onFailure recebem como argumento um objeto contendo informações referentes ao pagamento. Abaixo estão as descrições desses campos:

ParâmetroDescriçãoFormato
codeCódigo de resposta do Carat. Qualquer código diferente de 0 (zero) significa falha. Para maiores informações, consulte os Códigos de Resposta.< 4 N
messageMensagem de resposta do Carat.< 500 AN
payment
authorizer_codeCódigo de resposta do autorizador.< 10 AN
authorizer_messageMensagem de resposta do autorizador.< 500 AN
statusStatus da transação de pagamento no Carat.= 3 AN
nitNúmero identificador da transação de pagamento no Carat.= 64 AN
order_idCódigo de pedido enviado pela loja na criação da transação.< 40 AN
customer_receiptCupom (via cliente).< 4000 AN
authorizer_idCódigo da autorizadora utilizada na transação.< 4 N

Resposta do callback de erro de validação#

A function de callback onInvalid recebe como argumento uma lista de objetos de erro de validação, contendo os campos abaixo:

ParâmetroDescriçãoFormato
fieldNome do campo com erro.< 30 AN
causeMensagem de erro.<100 AN

Exemplo#

Abaixo está um exemplo de uma função javascript chamando o 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;
}