Excluir métodos y tipos de pagos en MercadoPago

Dentro de tu carrito de compras tienes integrado preferencias de MercadoPago para el manejo de todas las compras de tus usuarios con cualquier método o tipo de pago.

Sin embargo, tú o tu jefe, deciden agregar un nuevo requerimiento al carrito de compras. Ahora necesitan excluir los métodos o tipos de pagos de todas las nuevas preferencias de MercadoPago.

Digamos que el requerimiento dice que los pagos en efectivo con OXXO y las transferencias SPEI sean excluidos de las nuevas preferencias de MercadoPago.

¿Es posible? Claro que sí.

En este tutorial te mostraré cómo excluir los métodos y tipos de pagos de las preferencias de MercadoPago.

Antes de empezar necesitamos claves de integración

Para seguir con las siguientes secciones, necesitas una Public Key y un Access Token, los cuales consigues creando una integración en MercadoPago.

Aquí hay una guía de MercadoPago que te enseña a crear una integración.

Obtener los métodos de pago de MercadoPago

Para excluir uno o más métodos de pago en MercadoPago primero debemos conocer los ids de esos métodos de pago.

Para obtener esos ids debemos hacer una petición GET al siguiente enlace:

https://api.mercadopago.com/v1/payment_methods?public_key=[PUBLIC_KEY]

Si te fijas bien, la URL acepta el parámetro public_key. Sirve para autenticar la petición. La public_key lo obtienes en tu panel de desarrollador de MercadoPago.

Cuando ejecutas la petición debes recibir un JSON de respuesta con múltiples valores.

[
    {
        "id": "debvisa",
        "name": "Visa Débito",
        "payment_type_id": "debit_card",
        "status": "active",
        "secure_thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/debvisa.gif",
        "thumbnail": "http://img.mlstatic.com/org-img/MP3/API/logos/debvisa.gif",
        "deferred_capture": "unsupported",
        "settings": [
            {
                "card_number": {
                    "validation": "standard",
                    "length": 16
                },
                "bin": {
                    "pattern": "^(400064|400443|400819|400889|401531|401863|401906|402708|402766|403130|404313|404597|405063|405689|405930|406285|407848|408340|408341|408343|408400|409851|410128|410177|410277|410881|410894|411117|411608|411673|411773|411775|411808|412294|412408|413098|415231|416916|418914|418928|419334|419335|419821|419822|419823|420767|420807|420831|420839|421003|421316|422299|422671|425983|425984|426188|426808|427088|428464|430967|432049|433126|433194|433454|434256|434257|434258|434769|434798|435769|436618|438099|441312|441313|441545|441549|442177|442192|442742|442756|442788|443042|443045|444888|444889|445016|445017|445319|446115|446116|446117|446118|446878|446985|446986|449187|449700|451312|455509|455510|455511|455533|455537|457249|457476|459497|460068|460700|460766|461046|465345|465495|465496|465497|465498|465762|465828|465829|466188|466397|467010|467596|469495|469693|470132|470502|471239|471724|473622|473702|473703|473993|474174|474176|474472|474477|474478|474646|476588|476840|476890|477177|477261|477961|478200|479303|480062|480076|480078|480922|481516|481517|481582|481588|481689|482473|483030|483104|483112|483314|483316|485043|485044|486742|486796|490070|490256|490950|491089|491282|491365|491566|491567|491580|492143|498587|498590|41891410|41891431|41892810|46227850|47658885|49156630|49156634|49156644|49156650|49156651|49156652|49156653|49156654|49156655|49156656|49156657|49156658|49156659|49156660|49156661|49156662|49156663|49156664|49156665|49156666|49156667|49156668|49156669|49156670|49156671|49156672|49156673|49156674|49156675|49156676|49156677|49156678|49156679|49156680|49156681|49156682|49156683|49156684|49156685|49156686|49156687|49156688|49156689|49156690|49156691|49156692|49156693|49156694|49156695|49156696|49156697|49156698|49156699)",
                    "installments_pattern": "",
                    "exclusion_pattern": "^(49156649|49156648|49156647|49156646|49156645|49156644|49156643|49156642|49156641|49156640|49156639|49156638|49156637|49156636|49156635|49156634|49156633|49156632|49156631|49156630|49156629|49156628|49156627|49156626|49156625|49156624|49156623|49156622|49156621|49156620|49156619|49156618|49156617|49156616|49156615|49156614|49156613|49156612|49156611|49156610|49156609|49156608|49156607|49156606|49156605|49156604|49156603|49156602|49156601|49156600)"
                },
                "security_code": {
                    "length": 3,
                    "card_location": "back",
                    "mode": "mandatory"
                }
            }
        ],
        "additional_info_needed": [
            "cardholder_name"
        ],
        "min_allowed_amount": 5,
        "max_allowed_amount": 300000,
        "accreditation_time": 2880,
        "financial_institutions": [],
        "processing_modes": [
            "aggregator"
        ]
    }
]

Con el JSON anterior encontrarás información de los métodos de pago. Para México se muestran los siguientes:

  • Visa Débito – debvisa
  • Mastercard Débito – debmaster
  • American Express – amex
  • Visa – visa
  • Mastercard – master
  • Citibanamex – banamex
  • OXXO – oxxo
  • BBVA Bancomer – bancomer

Obtener los tipos de pago de MercadoPago

Los tipos de pago sirven para identificar si queremos hacer cobros con tarjeta de débito/crédito, efectivo, tarjeta de prepago, entre otros.

Estos tipos de pago son encontrados dentro de la misma respuesta JSON que obtuviste en la petición anterior. Específicamente, la propiedad payment_type_id.

Estos son los tipos de pago y sus ids encontrados en la petición:

  • ATM – atm
  • Tarjeta de crédito – credit_card
  • Tarjeta de débito – debit_card
  • Ticket – ticket
  • Transferencia bancaria – bank_transfer

Excluir métodos o tipos de pago de una preferencia de MercadoPago

La siguiente sección solo funciona con preferencias de MercadoPago.

Para crear una preferencia de MercadoPago usando su API, debemos seguir la documentación.

La petición que haremos será de tipo POST al siguiente enlace:

https://api.mercadopago.com/checkout/preferences

Debemos estar autenticados con nuestro Bearer Token pasándole un header de autenticación:

Y debemos pasar datos obligatorios para crear la preferencia.

Dentro de la documentación, busca la propiedad payment_methods, la cual es una propiedad para excluir métodos o tipos de pago y también para poner un método de pago por default.

La propiedad payment_methods acepta las propiedades excluded_payment_methods y excluded_payment_types. Estos son arreglos y dentro de estos irán objetos con los ids de los métodos y tipos de pago, respectivamente.

Si estamos creando una preferencia y estamos excluyendo los métodos de pago oxxo y bancomer y los tipos de pago bank_transfer. El JSON a pasar a la petición debe verse de esta forma:

{
  "items": [
    {
      "title": "Dummy Product",
      "description": "Dummy product description",
      "category_id": "car_electronics",
      "quantity": 1,
      "unit_price": 10
    }
  ],
  "payment_methods": {
    "excluded_payment_methods": [
      {
        "id": "oxxo"
      },
      {
        "id": "bancomer"
      }
    ],
    "excluded_payment_types": [
      {
        "id": "bank_transfer"
      }
    ]
  }
}

Recuerda que los ids de los métodos y tipos de pago se consiguieron anteriormente.

El resultado del POST anterior será un JSON y te mostrará la información de la preferencia.

Métodos y tipos de pago excluidos de la preferencia de MercadoPago

Una vez creada la preferencia, la respuesta JSON tendrá las propiedades init_point y sandbox_init_point. Estos son los enlaces para enviar a tus clientes y puedan comprar.

La propiedad sandbox_init_point es para pruebas. Entonces, si vamos a este enlace:

https://sandbox.mercadopago.com.mx/checkout/v1/redirect?pref_id=703458213-0e171ffb-125f-4d27-9611-ae36e57e85cd

Primero verás que no sale la opción “Transferencia SPEI”. Y si seleccionas “Efectivo”, en la siguiente ventana la opción para pagar con OXXO no estará.

Y así es como excluyes métodos y tipos de pago en MercadoPago.

Si tienes problemas o dudas, no dudes en comentar.

0

Comentarios

17 respuestas a “Excluir métodos y tipos de pagos en MercadoPago”

  1. Avatar de jerome
    jerome

    Hola, buen post, una pregunta, sabes como mostrar en la orden de compra el medio de pago utilizado? (woocommerce-wp), es decir, oxxo, tarjeta, etc…
    ¡Gracias!

    1. Avatar de Roel Magdaleno

      Es una buena pregunta, mira todas las peticiones de pago de MercadoPago generan dos valores en sus resultados:

      payment_type_id y payment_method_id

      Es más que probable que el plugin de WooCommerce o MercadoPago para WP también almacene esos datos en alguna parte de la base de datos de WP. Pero los valores que te menciono, comúnmente contiene lo que tu necesitas. Y pues para mostrarlo en la orden de compra del usuario debería haber un “filter” hook para adjuntar ese dato. Es cosa de leer el plugin que te genera la orden de pago y encontrar dónde exactamente podrías agregar ese valor.

      Si no sabes que es un filter hook, lee aquí, pero en resumen son funciones que permiten cambian el resultado antes de mandarlo al usuario.

      Saludos. 🙂

  2. Avatar de Geovanni Diaz
    Geovanni Diaz

    Hola, mi nombre es Geovanni de casualidad tendras algun tutorial para implementar mercado pago con ionic 6, he intentado implementarlo pero no le entiendo bien y me esta costando mucho trabajo.

    De ante mano muchas gracias.

    1. Avatar de Roel Magdaleno

      Hola Geovanni, gracias por tu comentario. ¿Exactamente en qué no entiendes bien?

      Para serte sincero, no tengo ningún por ahora para usar MP con Ionic 6. Y no he implementado MercadoPago con una app móvil. Lo que puedes hacer es tranquilizarte e ir paso a paso con los tutoriales que da MP en su titio web:

      1. Necesitas incluir el SDK de JS:
      https://www.mercadopago.com.mx/developers/es/guides/sdks/official/js/

      2. Necesitas implementar el SDK para pagos móviles (aunque en este punto no estoy seguro si será 100% necesario):
      https://www.mercadopago.com.mx/developers/es/guides/payments/mobile-checkout/introduction/

      Es lo que se me ocurre por ahora, pero contáctame por email: roelmagdaleno@gmail.com si gustas. Espero poder ayudarte.

      Saludos.

  3. Avatar de Sergio
    Sergio

    Hola, como estas? Necesitaria un poco tu ayuda.
    Estoy generando sucursal, caja y despues los QR dinamicos de pagos con la documentacion de la API que se encuentra en: https://www.mercadopago.com.ar/developers/es/guides/in-person-payments/qr-code/qr-dynamic/integrations
    Hasta ahi, no tengo problemas, pero necesito a esto agregar restricciones de pago con determinadas tarjetas. No puedo agregar el array payment_methods a la generacion del QR ya que me da como que no lo reconoce. Como deberia hacerse?
    La idea es solo emitir el QR para imprimirlo en una factura que se envia a los clientes de la empresa mensualmente.
    Mil gracias por tu ayuda.

    1. Avatar de Roel Magdaleno

      Buen día Sergio, gracias por leer mi blog.

      Te he grabado un video, ya que la respuesta tiene que ser visual en este caso:
      https://www.loom.com/share/fdf41fc5e19b4d6d82aae48337e700e0

      Hazme saber si te ayudó. Saludos.

  4. Avatar de Mario
    Mario

    Hola!
    Muchas gracias por tu fantástico trabajo.
    Me gustaría saber si existe alguna manera de saber si el pago ha sido financiado o no. ¿Existe algún modo fiable de saberlo?
    Gracias

    1. Avatar de Roel Magdaleno

      Buen día Mario. Gracias por tu comentario.

      MercadoPago tiene este endpoint:

      https://www.mercadopago.com.mx/developers/es/reference/payments/_payments_id/get

      Si llamas a ese endpoint pasando los parámetros correctos, en la respuesta verás la propiedad installments, el cual te muestra la cantidad de cuotas seleccionadas. Y en la propiedad de transaction_details, dentro de ese valor tienes que ver el valor installment_amount, el cual es el monto de la cuota de financiación elegida.

      Espero que sea lo que estés buscando. Saludos.

  5. Avatar de carlos bernal
    carlos bernal

    hola soy carlos, estoy implementando un bot en wpp y pues ya tengo el como crear los links de pago gracias a tu tutorial, pero sabes como podria saber si ya se hizo el pago o no para que mi bot pueda enviar un mensaje de confirmacion de pago?

    1. Avatar de Roel Magdaleno

      Buen día Carlos, me da gusto que mi tutorial te haya servido.

      Ahora, de acuerdo a tu pregunta, la solución más común en ese tipo de situaciones: “detectar si ya se hizo o rechazó el pago y de acuerdo a eso ejecutar alguna acción” son los “webhook”.

      Un webhook es un sistema que está escuchando respuesta de otro servidor, en este caso MercadoPago le envía una llamada a la aplicación instalada en tu servidor. En ese momento, tu aplicación deberá ejecutar el código necesario para notificar a tu cliente (entre más cosas que se te ocurran), ya sea con correo electrónico, SMS, Slack, o en tu caso, un chat bot.

      Te dejo la documentación de cómo puedes configurar los webhook con MercadoPago.

      También, dentro de MercadoPago, existe algo llamado IPN, otro método de notificación similar al webhook. En este caso, el IPN es más enfocado a los pagos, así que en tu caso usarías el IPN. En lo personal, yo he usado IPN en un sistema de venta de boletos para conciertos y ha funcionado como debe.

      Espero te sirva la información.

      Un saludo.

  6. Avatar de Edmer
    Edmer

    Serian tan amables de indicarme como crear la preferencia para multitems de mercado pago checkout pro?, estoy trabajando con 3.0 en laravel 10 y php 8.2. La preferencia de su documentación no me reconoce:

    # Crear un objeto preferencia
    $preference = new MercadoPago\Preference();
    # Crea ítems en la preferencia
    $item1 = new MercadoPago\Item();
    $item1->title = “Item de Prueba 1”;
    $item1->quantity = 2;
    $item1->unit_price = 11.96;

    $item2= new MercadoPago\Item();
    $item2->title = “Item de Prueba 2”;
    $item2->quantity = 1;
    $item2->unit_price = 11.96;

    $preference->items = array($item1,$item2);
    # Guardar y postear la preferencia
    $preference->save();

    1. Avatar de Roel Magdaleno

      Hola Edmer, gracias por comentar.

      De acuerdo a la documentación de MercadoPago, tienes que usar la clase PreferenceClient de acuerdo al primer ejemplo. Al parecer es algo nuevo y es algo que no he probado en lo personal, así que espero pueda servirte.

      Saludos.

  7. Avatar de Francisco Beltran
    Francisco Beltran

    Hola ya no éxito la posibilidad de quitar la posibilidad de pagar con cuenta de mercado pago???
    puesto que solo quiero que se puedan hacer pagos con externos y no con cosas directas de merado pago ; espero darme a entender

    1. Avatar de Roel Magdaleno

      Hola, la verdad es que no he entendido nada de lo que has puesto. También puedo responder en inglés si eso te sirve. Saludos.

  8. Avatar de Hugo Rodriguez Haro

    Hola Roel Magdaleno, excelente aporte.

    Estoy implementando el comercio el electrónico con odoo v16. Estoy usando checkOutPro, pero en odoo no hay mucha customización del API. Sabes si existe la forma de configurar los tipos de pago aceptados, pero algo de forma global y no en cada transaccion?

    He buscado desde la cuenta de mercado pago y no encuentro la opcion y a traves del codigo no logro hacer un update global y no por transaccion.

    Algo como esto
    Preference preference = client.update(“id”, request);
    Pero global y no en cada transaccion.

    1. Avatar de Roel Magdaleno

      Hola Hugo. Al parecer, lo que quieres realizar no es posible de momento según la documentación de Mercado Pago. Solo he encontrado documentación sobre crear una preferencia/transacción con un pago o método en específico, y no de manera global, como tu lo deseas.

      Así que, para cada transacción tendrás que aprobarle otro tipos de pago. No le veo tanto problema si lo automatizas con un script en vez de hacerlo manualmente.

      Saludos.

    2. Avatar de Hugo Rodriguez Haro

      Gracias Roel, dejame intentar hacerlo.

      Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *