Inicio
Documentação
Recursos
Parcerias
Comunidade

Recursos

Confira as atualizaçÔes das nossas soluçÔes e do funcionamento do sistema ou peça suporte técnico.

Parcerias

Conheça nosso programa para agĂȘncias ou desenvolvedores que oferecem serviços de integração e vendedores que desejam contratĂĄ-los.

Comunidade

Fique por dentro das Ășltimas novidades, peça ajuda a outros integradores e compartilhe seu conhecimento.

PossĂ­veis erros - Checkout Bricks - Mercado Pago Developers

Busca inteligente powered by OpenAI 

PossĂ­veis erros

Abaixo vocĂȘ encontrarĂĄ listas de erros que podem ocorrer durante a integração dos Bricks. Sejam eles relacionados ao envio das variĂĄveis ou Ă  comunicação com serviços externos (APIs Mercado Pago).

As mensagens de erro da API sĂŁo retornadas em inglĂȘs como padrĂŁo. PorĂ©m na tabela abaixo vocĂȘ encontra a mensagem original e sua tradução.

VariĂĄveis passadas pelo integrador

Durante o processo de integração do Brick, é possível que diferentes erros relacionados ao envio das variåveis sejam exibidos ao integrador no momento de instanciar o Brick. Esses erros serão mostrados através de um log no console do navegador (o comprador não recebe qualquer mensagem).

ErroMensagemCĂłdigo da causa
Objeto de configuração vazio[Initialization error] Settings object is empty, please pass required properties

[Erro de inicialização] O objeto de configuraçÔes estå vazio, passe as propriedades necessårias.
settings_empty
AusĂȘncia da propriedade amount (valor total da compra)[Initialization error] Amount property is required

[Erro de inicialização] A propriedade Amount é obrigatória.
missing_amount_property
AusĂȘncia dos callbacks de onReady e onError[Initialization error] Callbacks onReady and onError are required

[Erro de inicialização] Callbacks onReady e onError são obrigatórios.
missing_required_callbacks
AusĂȘncia do ID de um elemento HTML para servir de container ao Brick[Initialization error] You must provide an HTML element ID as a container to allow component rendering

[Erro de inicialização] VocĂȘ deve fornecer um ID de elemento HTML como um contĂȘiner para permitir a renderização do componente.
missing_container_id
AusĂȘncia da propriedade locale (idioma desejado)[Initialization error] Locale property is required

[Erro de inicialização] Propriedade de localidade é obrigatória.
missing_locale_property
Erro genérico ocorrido durante a inicialização do Brick, geralmente alguma validação que falhou por causa de um valor enviado pelo integrador[Initialization error] Brick incorrectly initialized: {error}

[Erro de inicialização] Brick inicializado incorretamente.
incorrect_initialization

Comunicação com serviços externos (APIs do Mercado Pago)

Durante o processo de integração do Brick, é possível que diferentes erros relacionados à comunicação com as APIs do Mercado Pago aconteçam.

ErroMensagem para o usuĂĄrioMensagem para o integradorCrĂ­tico?CĂłdigo da causa
Impossibilidade de renderização dos Secure Fields dentro do formulårio do Brick de Card PaymentOcorreu um erro.The integration with Secure Fields failed

A integração com o Secure Fields falhou.
Simfields_setup_failed
Falha na busca de informaçÔes de métodos de pagamentos baseado na public_key do integradorOcorreu um erro. Por favor, tente novamente mais tarde.An error occurred while trying to search for payment methods

Ocorreu um erro ao tentar buscar meios de pagamento.
NĂŁoget_payment_methods_failed
Falha na criação do token que representa as informaçÔes do cartãoOcorreu um erro e não foi possível processar o pagamento. Por favor, tente novamente mais tarde.Failed to create card token

Falha ao criar o token do cartĂŁo.
NĂŁocard_token_creation_failed
Falha na busca dos tipos de documento de identificação baseado no país definido na SDK MercadoPago.jsOcorreu um erro. Por favor, tente novamente mais tarde.Failed to get identification types

Falha ao obter tipos de identificação.
NĂŁoget_identification_types_failed
Falha na busca de informaçÔes do cartão baseado no bin.Ocorreu um erro. Por favor, tente novamente mais tarde.Failed to get payment methods using card bin

Falha ao realizar o pagamento utilizando o bin do cartĂŁo.
NĂŁoget_card_bin_payment_methods_failed
Falha ao buscar bancos emissores do cartĂŁoOcorreu um erro. Por favor, tente novamente mais tarde.Failed to get card issuer(s)

Falha ao obter emissor(es) de cartĂŁo.
NĂŁoget_card_issuers_failed
Falha ao buscar quantidade e valores das parcelas do pagamento baseado no amount enviado pelo integradorOcorreu um erro. Por favor, tente novamente mais tarde.Failed to get payment installments

Falha ao obter parcelas de pagamento.
NĂŁoget_payment_installments_failed
Campos do pagamento incompletos por algum motivo (parcelas, emissor do cartĂŁo, payment_method_id)Ocorreu um erro. Por favor, tente novamente mais tarde.SerĂĄ retornada uma das seguintes mensagens de acordo com o tipo de erro:

-The payment method id is missing
-The payment installments are missing
-The card issuer is missing

-Falta o id da forma de pagamento.
-Faltam as parcelas de pagamento.
-Falta o emissor do cartĂŁo.
NĂŁomissing_payment_information

Como atualizar dados enviados durante a inicialização de um Brick

Caso seja necessårio atualizar os valores enviados durante a inicialização de um Brick, é necessårio explicitar a assincronicidade do código e se valer da função de unmount disponibilizada no Controller do Brick antes de atualizar os dados. Além disso, o objeto de configuraçÔes precisa ser enviado completo, uma vez que se trata de uma renderização

Lembrando que não se deve apenas chamar a função de renderização com os novos valores. Isto levaria a uma duplicação de Brick em tela, sendo que a segunda renderização exibirå um erro.

O exemplo de cĂłdigo abaixo exemplifica o fluxo utilizando a atualização de uma preferĂȘncia em Payment Brick, mas o fluxo em si Ă© vĂĄlido para atualização necessĂĄria em dados de inicialização de qualquer Brick.

Javascript

//First render
const renderPaymentBrick = async (bricksBuilder) => {
      const settings = {
        initialization: {
          amount: 100,
          preferenceId: "<YOUR_FIRST_PREFERENCE_ID>"
        },
...
window.paymentBrickController = await bricksBuilder.create(
   "payment",
   "paymentBrick_container",
   settings
 );

    };

await renderPaymentBrick(bricksBuilder);

//Second render
window.paymentBrickController.unmount()

const secondRenderPaymentBrick = async (bricksBuilder) => {
      const settings = {
        initialization: {
          amount: 100,
          preferenceId: "<YOUR_SECOND_PREFERENCE_ID>"
        },
...
window.paymentBrickController = await bricksBuilder.create(
   "payment",
   "paymentBrick_container",
   settings
 );

    };

await secondRenderPaymentBrick(bricksBuilder);

...

// Brick Container
<div id="paymentBrick_container"></div>

Erro "Container Not Found"

Para a correta renderização, Ă© necessĂĄrio que o ID do container no DOM no qual o Brick serĂĄ renderizado seja informado de maneira idĂȘntica ao da função de criação do Brick. Qualquer string pode ser utilizada como nome, desde que os nomes sejam iguais, este erro nĂŁo ocorrerĂĄ. Note que nĂŁo sĂŁo aceitas classes como container para o Brick, Ă© necessĂĄrio que seja um ID

Outro ponto importante Ă© garantir que ao chamar a função de renderização do Brick o container dele jĂĄ esteja renderizado em tela. Reforçamos este ponto devido a possibilidade de o container do brick estar dentro de outros contĂȘineres. Essa sequĂȘncia de renderização Ă© importante para evitar o erro em questĂŁo.

Abaixo temos um trecho de cĂłdigo exemplificando o ponto utilizando o Payment Brick.

Javascript

const renderPaymentBrick = async (bricksBuilder) => {
 const settings = { ... };
 window.paymentBrickController = await bricksBuilder.create(
   "payment",
   "paymentBrick_container",
   settings
 );
};

await renderPaymentBrick(bricksBuilder);

...

<div id="paymentBrick_container"></div>

Utilização de Bricks com Next.js

Next.js é um framework para criação de interfaces com componentes React. Diante disso, é possível utilizar nossa SDK React para integrar os Bricks, bem como outras soluçÔes fornecidas através da SDK React.

Contudo, nossa SDK foi estruturada para renderização no cliente (Client Side Rendering) enquanto via de regra o Next.js atua com Server Side Rendering. Assim, ao utilizar nossa SDK Ă© preciso levar isso em consideração. É possĂ­vel realizar essa integração utilizando a importação da SDK dinamicamente, conforme indicado na documentação do Next.js.

Abaixo vocĂȘ encontra um exemplo de cĂłdigo de importação dinĂąmica de um componente disponibilizado em nossa SDK, o getPaymentMethods.

Abaixo vocĂȘ encontra um exemplo de cĂłdigo de importação dinĂąmica de um componente disponibilizado em nossa SDK, o Payment Brick.

react-jsx


//index.tsx

import Head from "next/head";
import styles from "../styles/Home.module.css";
import dynamic from "next/dynamic";

const CheckoutMercadoPago = dynamic(() => import("./checkoutMercadoPago"), {
  ssr: false,
});

export default function Home() {
  return (
    <>
      <Head>
        <title>Checkout Brick + NextJS</title>
        <meta name="description" content="Generated by create next app" />
      </Head>
      <main className={styles.main}>
        <CheckoutMercadoPago />
      </main>
    </>
  );
}

react-jsx

//checkoutMercadoPago.tsx

import { initMercadoPago, Payment } from "@mercadopago/sdk-react";

initMercadoPago("<YOUR_PUBLIC_KEY>");

const CheckoutMercadoPago = () => {
  const initialization = {
    amount: <YOUR_AMOUNT>,
    preferenceId: "<YOUR_PREFERENCE_ID>"
  };
  const customization = {
    paymentMethods: {
      ticket: "all",
      bankTransfer: "all",
      creditCard: "all",
      debitCard: "all",
      mercadoPago: "all",
    },
  };
  const onSubmit = async ({ selectedPaymentMethod, formData }) => {
   
 // callback chamado ao clicar no botĂŁo de submissĂŁo dos dados
    return new Promise((resolve, reject) => {
      fetch("/process_payment", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify(formData),
      })
        .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();
        });
    });
  };
  const onError = async (error) => {
    // callback chamado para todos os casos de erro do Brick
    console.log(error);
  };
  const onReady = async () => {
    /*
    Callback chamado quando o Brick estiver pronto.
    Aqui vocĂȘ pode ocultar loadings do seu site, por exemplo.
  */
  };

  return (
    <Payment
      initialization={initialization}
      customization={customization}
      onSubmit={onSubmit}
      onReady={onReady}
      onError={onError}
    />
  );
};
export default CheckoutMercadoPago;