Como integrar 3DS com Checkout Bricks - Checkout Bricks - Mercado Pago Developers
O que você está buscando?

Não sabe como começar a integrar? 

Acesse os primeiros passos

Como integrar 3DS com Checkout Bricks

Nesta documentação você encontrará toda a informação necessária para realizar a integração com 3DS com Checkout Bricks. Para mais informações sobre como esse tipo de autenticação funciona, veja 3DS 2.0.

Importante
Para realizar a integração com 3DS, é preciso atender a determinados requisitos. Antes de avançar para os próximos passos, revise a seção Pré-requisitos e certifique-se de que todos sejam cumpridos.

Integrar com 3DS

A integração com 3DS resulta em um processo de autenticação que é executado através de dois fluxos: com ou sem Challenge, sendo Challenge as etapas adicionais que o comprador deve cumprir para garantir sua identidade.

Para transações de baixo risco, as informações enviadas na finalização da compra são suficientes, o fluxo segue de forma transparente e as etapas adicionais do Challenge não são necessárias. Porém, para casos de alto risco de fraude, o Challenge é necessário para verificar a identidade do comprador, o que aumenta a aprovação das transações com cartão.

A decisão de incluir ou não o Challenge depende do emissor do cartão e do perfil de risco da transação que está sendo realizada.

Abaixo estão as etapas para realizar uma integração com 3DS.

  1. Após gerar uma intenção de pagamento usando Card Payment Brick ou Payment Brick, é necessário enviar, a partir do seu backend, uma solicitação de pagamento ao Mercado Pago através das nossas APIs. A ativação do fluxo de 3DS 2.0 se dá pela adição do campo three_d_secure_mode: 'optional' nessa requisição.

javascript

var mercadopago = require('mercadopago');
mercadopago.configurations.setAccessToken("YOUR_ACCESS_TOKEN");

const paymentData = {
...req.body,
three_d_secure_mode: 'optional'
};

mercadopago.payment.save(paymentData)
  .then(function(response) {
    const { status, status_detail, id } = response.body;
    res.status(response.status).json({ status, status_detail, id });
  })
  .catch(function(error) {
    console.error(error);
  });

Caso não seja necessário utilizar o fluxo do Challenge, o campo status do pagamento terá valor approved e não será necessário exibi-lo, dessa forma, o fluxo de pagamento seguirá normalmente.

Para os casos em que o Challenge é necessário, o status mostrará o valor pending, e o status_detail será pending_challenge.

Visão geral simplificada da resposta:

javascript

{
   "payment_id":52044997115,
   "status":"pending",
   "status_detail":"pending_challenge",
   "three_ds_info":{
      "external_resource_url":"https://acs-public.tp.mastercard.com/api/v1/browser_Challenges",
      "creq":"eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImJmYTVhZjI0LTliMzAtNGY1Yi05MzQwLWJkZTc1ZjExMGM1MCIsImFjlOWYiLCJjW5kb3dTaXplIjoiMDQiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IS4wIn0"
   },
   "owner":null
}
Importante
O campo retornado three_ds_info contém as informações necessárias para continuar o processo de pagamento caso o status_detail seja pending_challenge.
  1. Para continuar o fluxo e exibir o Challenge de forma simplificada, é recomendado integrar com o Status Screen Brick, informando o ID do pagamento gerado, além do conteúdo do objeto three_ds_info, os quais foram retornados pela API de pagamentos.

Caso não deseje utilizar o Status Screen Brick nessa etapa, aconselhamos acessar a seção de Realizar implantação na documentação de Checkout Transparente, visto que serão necessários passos adicionais para, por exemplo, capturar o evento emitido quando o Challenge for finalizado.

javascript

const renderStatusScreenBrick = async (bricksBuilder) => {
 const settings = {
   initialization: {
     paymentId: "<PAYMENT_ID>", // id do pagamento a ser mostrado
     additionalInfo: {
       externalResourceURL: "<EXTERNAL_RESOURCE_URL>",
       creq: "<C_REQ>",
     },
   },
   callbacks: {
     onReady: () => {},
     onError: (error) => {
       console.error(error);
     },
   },
 };
 window.statusScreenBrickController = await bricksBuilder.create(
   "statusScreen",
   "statusScreenBrick_container",
   settings
 );
};
renderStatusScreenBrick(bricksBuilder);

O Status Screen Brick exibirá uma transição indicando redirecionamento e, logo em seguida, será exibido o Challenge do banco em questão.

how-to-integrate-3ds

O usuário deve responder ao Challenge para que a transição seja validada devidamente. Vale ressaltar que a experiência do Challenge é de responsabilidade exclusiva do banco encarregado.

Importante
Por questões de segurança, o pagamento será rejeitado caso o processo de Challenge não seja iniciado em até 30 segundos após a sua criação. Portanto, é importante que o Challenge se inicie exatamente após a sua geração.
  1. Após a resolução do Challenge, será exibido o resultado final do pagamento de acordo com a resposta emitida pelo banco ao finalizar o Challenge.

status-screen-Brick

Teste de integração

Antes de ir à produção, é possível testar a integração para garantir que o fluxo 3DS funcione corretamente e que os pagamentos sejam processados sem erros. Dessa forma, evita-se que os compradores abandonem a transação por não conseguirem concluí-la.

Para que seja possível validar pagamentos com 3DS, disponibilizamos um ambiente de testes do tipo sandbox que retorna resultados simulados apenas para simulação e validação da implementação. Para realizar testes de pagamento em um ambiente sandbox, é necessário utilizar suas credenciais de teste e cartões específicos que permitam testar a implementação do Challenge com os fluxos de sucesso e falha. A tabela a seguir apresenta os detalhes desses cartões:

FluxoNúmeroCódigo de segurançaData de vencimento
Challenge com sucesso5483 9281 6457 462312311/25
Challenge não autorizado5361 9568 0611 755712311/25
Os passos para gerar o pagamento são os mesmos exemplificados anteriormente nesta seção.

Challenge

Em ambos os fluxos (sucesso e falha), o Challenge, que é uma tela semelhante à exibida abaixo, deve ser exibido pelo Status Screen Brick.

bricks_sandbox

O código de verificação fornecido é apenas ilustrativo. Para concluir o fluxo de teste, basta clicar no botão Confirmar e o Status Screen irá exibir o estado final do pagamento.