Recursos para IA

Tokenizar meio de pagamento

Após configurar o ambiente de desenvolvimento, para integrar Pagamentos Automáticos é necessário capturar os dados do pagador de forma segura e tokenizar o cartão que será utilizado para cobranças sem CVV.

Para isso, adicione no frontend um formulário de pagamento usando uma destas opções: Card Payment Brick, que coleta automaticamente os dados necessários, ou Core Methods, que permitem definir como essas informações serão capturadas. Core Methods está disponível para websites e aplicativos móveis Android e iOS.

Todos esses métodos são úteis tanto para integrações com primeiro pagamento, onde uma primeira cobrança é realizada utilizando o CVV do cartão para então tokenizá-lo, quanto para registros e tokenização de cartões que serão utilizados em cobranças posteriores. Escolha o que melhor se adapta às suas necessidades e siga os passos correspondentes.

Na integração via Card Payment Brick para websites, a biblioteca MercadoPago.js, incluída no seu projeto durante a configuração do ambiente de desenvolvimento, é responsável por obter as informações necessárias para a geração de um pagamento. Ou seja, ela realiza uma busca pelos tipos de documentos disponíveis para o país correspondente e, conforme os dados do cartão são inseridos, também busca as informações relativas ao emissor e às parcelas disponíveis.

Toda a informação envolvida no processamento da transação é armazenada no backend, em conformidade com os padrões de segurança PCI.

Além disso, o componente oferece a possibilidade de orientar o usuário com alertas sobre campos incompletos ou possíveis erros ao preencher os dados, otimizando o processo de compra.

Com isso, a implementação do fluxo é transparente para quem realiza a integração, conforme mostra o diagrama abaixo.

  sequenceDiagram
    participant Navegador as Navegador do comprador
    participant Frontend as Front-end do integrador
    participant MPjs as MercadoPago.js
    participant Backend as Back-end do integrador
    participant API as API Mercado Pago

    Navegador->>Frontend: 1. O comprador acessa a tela de pagamento.
    Frontend->>MPjs: 2. O front-end do integrador baixa e inicializa o SDK JS do Mercado Pago.
    Frontend->>Navegador: 3. O front-end do integrador exibe o formulário de pagamento.
    Navegador->>Frontend: 4. O comprador preenche o formulário e finaliza o pagamento.
    Frontend->>MPjs: 5. O front-end do integrador usa o SDK JS para criar o _token_ que conterá os dados do cartão de forma segura.
    Frontend->>Backend: 6.O front-end do integrador envia o _token_ do cartão e os dados de pagamento para seu back-end.
    Backend->>API: 7. Do back-end, são chamados os serviços do Mercado Pago para criar o pagamento.
    API->>Navegador: 8. O front-end do integrador exibe ao comprador o resultado da operação.
    API->>Backend: 9. O Mercado Pago pode enviar notificações via Webhook com atualizações do status do pagamento.
    Backend->>Navegador: 10. Se aplicável, o comprador é notificado sobre a atualização do pagamento.

Para avançar com a configuração, siga os passos abaixo.

Adicionar formulário de pagamento

Para receber pagamentos, adicione no frontend um formulário que permita capturar os dados do pagador de maneira segura e possibilite a criptografia do cartão. Essa inclusão deve ser feita por meio do Card Payment Brick, que oferece um formulário otimizado com temas variados e inclui os campos necessários para pagamentos com cartões.

Para adicionar o Card Payment Brick, primeiro realize sua configuração e inicialização a partir do frontend, como mostram os exemplos a seguir.

const renderCardPaymentBrick = async (bricksBuilder) => {
  const settings = {
    initialization: {
      amount: 100.99, // valor total a ser pago
    },
    callbacks: {
      onReady: () => {
        /*
         Callback chamado quando o Brick estiver pronto.
         Aqui podem ser ocultos loadings do site, por exemplo.
       */
      },
      onSubmit: (formData, additionalData) => {
        // callback chamado ao clicar no botão de envio de dados
        return new Promise((resolve, reject) => {
          const submitData = {
            type: "online",
            total_amount: String(formData.transaction_amount), // deve ser uma string com formato 00.00
            external_reference: "ext_ref_1234", // identificador da origem da transação.
            processing_mode: "automatic",
            transactions: {
              payments: [
                {
                  amount: String(formData.transaction_amount), // deve ser uma string com formato 00.00 
                  payment_method: {
                    id: formData.payment_method_id,
                    type: additionalData.paymentTypeId,
                    token: formData.token,
                    installments: formData.installments,
                  },
                },
              ],
            },
            payer: {
              email: formData.payer.email,
              identification: formData.payer.identification,
            },
          };

          fetch("/process_order", {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
            },
            body: JSON.stringify(submitData),
          })
            .then((response) => response.json())
            .then((response) => {
              // receber o resultado do pagamento
              resolve();
            })
            .catch((error) => {
              // lidar com a resposta de erro ao tentar criar o pagamento 
              reject();
            });
        });
      },
      onError: (error) => {
        // callback chamado para todos os casos de erro do Brick 
        console.error(error);
      },
    },
  };
  window.cardPaymentBrickController = await bricksBuilder.create(
    "cardPayment",
    "cardPaymentBrick_container",
    settings
  );
};
renderCardPaymentBrick(bricksBuilder);

O callback onSubmit do Brick obterá os dados mínimos necessários para a criação de um pagamento. Uma das informações retornadas é o CardToken, que representa de forma segura os dados do cartão. Esse token pode ser usado somente uma vez e expira dentro de 7 dias.

Além das informações mínimas, recomendamos incluir detalhes adicionais ou que possam facilitar o reconhecimento da compra por parte do comprador, aumentando assim a taxa de aprovação dos pagamentos. Consulte nossa Referência de API para conhecer em detalhe todos os parâmetros a serem enviados ao criar um pagamento, incluindo aqueles que podem melhorar sua taxa de aprovação, e verifique quais você deseja incluir nesta etapa.

Em seguida, adicione os campos relevantes ao objeto enviado, que são retornados na resposta do callback.

Sempre que o usuário sair da tela onde algum Brick é exibido, é necessário destruir a instância atual com o comando window.cardPaymentBrickController.unmount(). Ao entrar novamente, uma nova instância deve ser gerada.

Por fim, realize a renderização do Brick utilizando um dos exemplos abaixo.

<div id="cardPaymentBrick_container"></div> // O id deve corresponder ao valor enviado no método create() na etapa anterior

Como resultado, a renderização do Brick ficará semelhante à imagem abaixo.

cardform

Por último, será necessário que seu backend possa receber as informações do formulário criado, junto com o token resultante da criptografia do cartão. Para isso, recomendamos disponibilizar um endpoint /Process_order que receba os dados coletados pelo Brick após a ação de submit.



Para avançar com sua integração, você deve considerar dois fluxos possíveis: um em que o cartão é registrado a partir de uma primeira cobrança regular com CVV, e outro em que o registro do cartão é feito para pagamentos posteriores. Escolha o que melhor se adapta às suas necessidades e avance para a documentação correspondente.

Registro com uma primeira cobrança com CVV
Para modelos de negócio que requerem um pagamento no momento em que o cartão é registrado, que será armazenado para pagamentos futuros.
Registro para pagamentos posteriores
Para modelos de negócio que apenas armazenam os dados do cartão e realizam cobranças recorrentes posteriormente.