Inicio
DocumentaciĂłn
Recursos
Partners
Comunidad

Recursos

Revisa las actualizaciones de nuestras soluciones y operatividad del sistema o pide soporte técnico.

Partners

Conoce nuestro programa para agencias o desarrolladores que ofrecen servicios de integraciĂłn y vendedores que quieren contratarlos.

Comunidad

Recibe las Ășltimas novedades, pide ayuda a otros integradores y comparte tus conocimientos.

Posibles errores - Checkout Bricks - Mercado Pago Developers

BĂșsqueda inteligente powered by OpenAI 

Posibles errores

A continuaciĂłn encontrarĂĄ listas de errores que pueden ocurrir durante la integraciĂłn de los Bricks. Ya sean relacionadas con envĂ­o de variables o comunicaciĂłn con servicios externos (APIs de Mercado Pago).

Los mensajes de error de la API se devuelven en inglés de forma predeterminada. Sin embargo, en la siguiente tabla puedes encontrar el mensaje original y su traducción.

Variables pasadas por el integrador

Durante el proceso de integraciĂłn del Brick, es posible que al momento de instanciar el Brick se muestren al integrador diferentes errores relacionados con el envĂ­o de variables. Estos errores se mostrarĂĄn mediante un log en la consola del navegador (el comprador no recibe ningĂșn mensaje).

ErrorMensajeCĂłdigo de causa
Objeto de configuraciĂłn vacĂ­o[Initialization error] Settings object is empty, please pass required properties

[Error de inicializaciĂłn] El objeto de configuraciĂłn estĂĄ vacĂ­o, pase las propiedades requeridas.
settings_empty
Ausencia de la propiedad amount (monto total de la compra)[Initialization error] Amount property is required

[Error de inicializaciĂłn] Se requiere la propiedad amount.
missing_amount_property
Ausencia de los callbacks de onReady y onError[Initialization error] Callbacks onReady and onError are required

[Error de inicializaciĂłn] Se requieren los callbacks onReady y onError.
missing_required_callbacks
Ausencia de un ID de un elemento HTML que sirva como container del Brick[Initialization error] You must provide an HTML element ID as a container to allow component rendering

[Error de inicializaciĂłn] Debe proporcionar un ID de elemento HTML como contenedor para permitir la representaciĂłn de componentes.
missing_container_id
Ausencia de la propiedad locale (idioma deseado)[Initialization error] Locale property is required

[Error de inicializaciĂłn] Se requiere la propiedad de configuraciĂłn regional.
missing_locale_property
Error genérico ocurrido durante la inicialización del Brick, generalmente alguna validación que falló debido a un valor enviado por el integrador[Initialization error] Brick incorrectly initialized: {error}

[Error de inicializaciĂłn] Brick inicializado incorrectamente.
incorrect_initialization

ComunicaciĂłn con servicios externos (APIs de Mercado Pago)

ErrorMensaje para el usuarioMensaje para el integradorÂżCrĂ­tico?CĂłdigo de causa
Incapacidad para generar Secure Fields dentro del formulario del Brick de Card PaymentOcurriĂł un errorThe integration with Secure Fields failed

FallĂł la integraciĂłn con Secure Fields,
Sifields_setup_failed
No se pudo obtener la informaciĂłn del medios de pago segĂșn la public_key del integradorOcurriĂł un error. Por favor, intĂ©ntalo nuevamente mĂĄs tarde.An error occurred while trying to search for payment methods

Ocurrió un error al intentar buscar métodos de pago.
Noget_payment_methods_failed
No se pudo crear el token que representa la información de la tarjetaOcurrió un error y no se pudo procesar el pago. Por favor, inténtalo de nuevo mås tarde.Failed to create card token

No se pudo crear el token de la tarjeta.
Nocard_token_creation_failed
Error al buscar tipos de documentos de identificaciĂłn segĂșn el paĂ­s definido en el SDK de MercadoPago.jsOcurriĂł un error. Por favor, intĂ©ntalo nuevamente mĂĄs tarde.Failed to get identification types

Error al obtener los tipos de identificaciĂłn.
Noget_identification_types_failed
No se pudo obtener la información de la tarjeta basada en el binOcurrió un error. Por favor, inténtalo nuevamente mås tarde.Failed to get payment methods using card bin

No se pudo realizar el pago con el bin de la tarjeta.
Noget_card_bin_payment_methods_failed
Error al buscar bancos emisores de tarjetasOcurrió un error. Por favor, inténtalo nuevamente mås tarde.Failed to get card issuer(s)

No se pudo obtener el(los) emisor(es) de la tarjeta.
Noget_card_issuers_failed
Error al buscar la cantidad y los montos de las cuotas de pago segĂșn el amount enviado por el integradorOcurriĂł un error. Por favor, intĂ©ntalo nuevamente mĂĄs tarde.Failed to get payment installments

Error al obtener las cuotas de pago.
Noget_payment_installments_failed
Campos de pago incompletos por algĂșn motivo (cuotas, emisor de la tarjeta, payment_method_id)OcurriĂł un error. Por favor, intĂ©ntalo nuevamente mĂĄs tarde.Se devolverĂĄ uno de los siguientes mensajes segĂșn el tipo de error:

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

-Falta el id del medio de pago.
-Faltan las cuotas de pago.
-Falta el emisor de la tarjeta.
Nomissing_payment_information

CĂłmo actualizar datos enviados durante la inicializaciĂłn de un Brick

En caso de querer actualizar los valores enviados durante la inicializaciĂłn de un Brick, es necesario explicitar la asincronicidad del cĂłdigo y valerse de la funciĂłn de unmount disponible en el Controller del Brick antes de actualizar los datos. AdemĂĄs, el objeto de configuraciones debe ser enviado completo, dado que se trata de una renderizaciĂłn.

Es importante recordar que no se debe simplemente llamar a la funciĂłn de renderizaciĂłn con los nuevos valores, ya que esto provocarĂ­a una duplicaciĂłn del Brick en pantalla, y la segunda renderizaciĂłn mostrarĂĄ un error.

El ejemplo de cĂłdigo a continuaciĂłn ejemplifica el flujo utilizando la actualizaciĂłn de una preferencia en el Payment Brick, pero el flujo en sĂ­ es vĂĄlido para la actualizaciĂłn necesaria en datos de inicializaciĂłn de cualquier 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>

Error "Container Not Found"

Para que la renderización ocurra correctamente, es necesario que el ID del contenedor en el DOM donde se renderizarå el Brick sea proporcionado de manera idéntica a la función de creación del Brick. Se puede utilizar cualquier cadena como nombre y, siempre y cuando los nombres sean iguales, este error no ocurrirå. Ten en cuenta que las clases no son aceptadas como contenedor para el Brick, es necesario que sea un ID.

Otro punto importante es asegurarse de que al llamar a la función de renderización del Brick, su contenedor ya esté renderizado en la pantalla. Reforzamos este punto debido a la posibilidad de que el contenedor del brick esté dentro de otros contenedores. Esta secuencia de renderización es importante para evitar el error mencionado.

A continuaciĂłn, tenemos un fragmento de cĂłdigo que ejemplifica este punto utilizando el 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>

Uso de Bricks con Next.js

Next.js es un framework para crear interfaces con componentes React. Por lo tanto, es posible utilizar nuestra SDK de React para integrar Bricks, así como otras soluciones proporcionadas a través de la SDK de React.

Sin embargo, nuestra SDK fue estructurada para renderizar en el cliente (Client Side Rendering), mientras que Next.js generalmente funciona con el Server Side Rendering (SSR). Por lo tanto, al utilizar nuestra SDK, es necesario tener esto en cuenta.

Es posible realizar esta integraciĂłn mediante la importaciĂłn dinĂĄmica de la SDK, como se indica en la documentaciĂłn de Next.js. A continuaciĂłn, encontrarĂĄs un ejemplo de cĂłdigo para importar dinĂĄmicamente un componente proporcionado en nuestra SDK, el 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 llamado al hacer clic en el botĂłn enviar datos
    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) => {
          // recibir el resultado del pago
          resolve();
        })
        .catch((error) => {
          // manejar la respuesta de error al intentar crear el pago
          reject();
        });
    });
  };
  const onError = async (error) => {
    // callback llamado para todos los casos de error de Brick
    console.log(error);
  };
  const onReady = async () => {
   /*
    Callback llamado cuando el Brick estĂĄ listo.
    AquĂ­ puede ocultar cargamentos de su sitio, por ejemplo.
   */
  };

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