PayZuDocs

3-D Secure (3DS)

Confirma com o banco emissor que quem está comprando é mesmo o dono do cartão; autenticar reduz fraude e passa a responsabilidade por chargeback para o emissor ou a bandeira.

O 3DS confirma junto ao banco emissor que quem está comprando é o titular do cartão. Autenticar a transação reduz fraude e, quando a autenticação conclui com sucesso, transfere a responsabilidade por chargeback para o emissor ou a bandeira.

Durante o processo de autenticação 3DS, informações do comprador são compartilhadas com as bandeiras e o banco emissor, que avaliam o risco da transação e definem se é necessário um desafio (como um código por SMS ou autenticação no app do banco) para validar a identidade do portador.

Vantagens

  • Redução de fraudes
  • Shift de responsabilidade (liability shift) nas transações autenticadas: o emissor ou a bandeira assumem a responsabilidade em caso de chargeback
  • Integração simples via JavaScript
  • Suporte à autenticação sem fricção (sem desafio visível para o comprador), quando o risco da transação é considerado baixo

Fluxo de autenticação

Quando a transação é autorizada com as variáveis retornadas no evento success, a responsabilidade (liability) é transferida para o emissor do cartão. Nos demais cenários, a responsabilidade permanece com o estabelecimento.

Integração passo a passo

Inicializar o script

Inclua o seguinte script em sua página web para carregar o script responsável por realizar a comunicação com as bandeiras e os bancos emissores:

<script src="https://static.payzu.io/scripts/3ds20.min.js"></script>

Após carregar o script em sua página, será necessário inicializá-lo da seguinte maneira:

const config = {
  amount: 350,
  currency: 'BRL',
  options: {
    enabled: true,
    sandbox: true,
    debug: true,
    suppressChallenge: false
  }
};

payzu3DS.init(config);
ParâmetroDescriçãoTipo
amountValor total da transação em centavosinteiro
currencyCódigo da moedaFixo em "BRL"
options.enabledDefine se a transação será submetida ao processo de autenticação 3DSboolean
options.sandboxDefine se o ambiente de execução utilizado será o sandbox ou de produçãoboolean
options.debugQuando ativado, logs e relatórios serão emitidos no console do navegadorboolean
options.suppressChallengeDetermina se o desafio será suprimido. Caso o desafio seja ignorado e a transação autorizada, a responsabilidade (liability) permanece com o estabelecimentoboolean

Registrar os eventos de autenticação

Registre os listeners dos eventos para tratar cada resultado possível da autenticação:

payzu3DS.on("ready", function (e) {

});

ready

Este evento é acionado quando todos os procedimentos de carregamento do script foram concluídos com sucesso, incluindo a validação do token de acesso. Indica que o checkout está pronto para iniciar o processo de autenticação.

Resultados da autenticação

O liability shift ocorre somente quando a autenticação é concluída com sucesso: nesse caso, a responsabilidade por chargeback é transferida ao emissor ou à bandeira. Em todos os demais cenários, a responsabilidade permanece com o estabelecimento.

EventoCenário e retornoLiabilityAção recomendada
successCartão elegível e autenticação concluída com sucesso. Retorna Cavv, Xid e Eci.Transferida ao emissorInclua Cavv, Xid e Eci na requisição de autorização.
failureCartão elegível, mas a autenticação falhou. Retorna apenas Eci.Permanece com o estabelecimentoSe decidir prosseguir com a autorização, inclua Eci na requisição.
unenrolledCartão não elegível: o portador e/ou o emissor não participam do programa 3DS. Retorna apenas Eci.Permanece com o estabelecimentoOriente o comprador a verificar com o emissor se o cartão está habilitado para autenticação em e-commerce.
disabledEstabelecimento optou por não autenticar, com options.enabled como false.Permanece com o estabelecimento-
errorErro sistêmico no processo de autenticação.Permanece com o estabelecimento-

unsupportedBrand

Este evento é acionado quando a bandeira do cartão utilizado não é compatível com o protocolo 3DS. Nesse caso, a autenticação não é realizada.

Atributos retornados

AtributoDescriçãoTipoObrigatório?
CavvDado que representa assinatura da autenticaçãostringSim
XidIdentificador da transação de autenticaçãostringNão
EciCódigo que representa o resultado da autenticaçãoTabela ECISim
VersionVersão do protocolo 3DS utilizadastringSim
ReferenceIdIdentificador da requisição de autenticaçãostringSim
ReturnCodeCódigo de retorno da autenticaçãoCódigos de retorno 3DSSim
ReturnMessageMensagem de retorno da autenticaçãoCódigos de retorno 3DSSim

Solicitar o desafio

Instancie o objeto paymentObject, observando os campos que são expressamente obrigatórios na tabela abaixo. Ao executar o checkout, o processo de autenticação será iniciado e seu resultado será retornado através dos eventos.

const paymentObject = {
  installments: '01',
  cardnumber: '4000000000001091',
  cardexpirationmonth: '01',
  cardexpirationyear: '2027',
  cardalias: 'JOAO SOUZA',
  paymentmethod: 'Credit'
}

payzu3DS.checkout(paymentObject)

Caso a autenticação seja concluída com sucesso, o evento success será acionado. Nesse caso, as variáveis Cavv, Xid e Eci serão retornadas: elas devem ser enviadas ao seu backend e posteriormente incluídas na requisição no momento da autorização. Neste caso, o liability shift é transferido ao emissor.

Utilizar o resultado na cobrança

Para criar uma cobrança utilizando o 3DS, é necessário definir o campo authenticate como true, além de informar o campo externalAuthentication dentro de creditCardPayment:

{
  "creditCardPayment": {
    "authenticate": true,
    "externalAuthentication": {
      "cavv": "Ag5zZ2ElCIUbLFj6gS0J9gByv//rRg5qGTqWqf8vTjt5",
      "xid": "198b924ea7db1014b64c8b426a0e6f1e",
      "eci": "05",
      "version": "2.2",
      "referenceId": "abcd1234-efgh-5678-ijkl-9012mnopqrst"
    }
  }
}

Consulte Criar cobrança para os demais campos da requisição.

Códigos de retorno e ECI

Códigos de retorno 3DS

Códigos retornados no fluxo de autenticação 3DS.

Código 3DSDescriçãoAção possível
100Transação realizada com sucesso.-
101Está faltando um ou mais campos obrigatórios na requisição.Confira os campos missingField_0 até missingField_N na resposta. Envie a requisição novamente.
102Um ou mais campos da requisição contêm dados inválidos.Confira os campos invalidField_0 até invalidField_N na resposta. Reenvie a requisição.
150Erro: falha geral no sistema.Aguarde alguns minutos e envie a requisição novamente.
151Erro: a requisição foi recebida, mas houve time-out do servidor.Aguarde alguns minutos e envie a requisição novamente.
152Erro: a requisição foi recebida, mas houve time-out de serviço.Aguarde alguns minutos e envie a requisição novamente.
234Há um problema na sua configuração de merchant.Não envie a requisição novamente. Entre em contato com o suporte.
475O cliente está registrado na autenticação do pagante.Faça a autenticação do portador do cartão antes de prosseguir com a transação.
476O cliente não pode ser autenticado.Revise o pedido do cliente.
MPI901Erro inesperado.-
MPI902Resposta inesperada da autenticação.-
MPI900Ocorreu um erro.-
MPI601Desafio omitido.-
MPI600Bandeira não suporta a autenticação.-

Tabela ECI

A tabela ECI indica, por bandeira, o resultado da autenticação e quem assume o risco de chargeback:

MastercardVisaEloAmexResultado da autenticaçãoA transação foi autenticada?
02050505Autenticada pelo emissor: risco de chargeback passa a ser do emissor.Sim
01060606Autenticada pela bandeira: risco de chargeback passa a ser do emissor.Sim
Diferente de 01, 02 e 04Diferente de 05 e 06Diferente de 05 e 06Diferente de 05 e 06Não autenticada: risco de chargeback permanece com o estabelecimento.Não
047--Não autenticada, transação caracterizada como Data Only: risco de chargeback permanece com o estabelecimento.Não

Quando a transação não é autenticada, o risco de chargeback permanece com o estabelecimento. Consulte os valores de ECI da tabela acima antes de decidir prosseguir com a cobrança.

Referências

  • Cartões para simular os cenários de autenticação 3DS no sandbox: Cartões de teste

Nesta página