Excluir métodos y tipos de pagos en MercadoPago

Para ser sinceros, la documentación de MercadoPago siempre ha sido algo tediosa de leer y eso que la han ido actualizando poco a poco. No saben qué tanto he sufrido por encontrar la documentación correcta a las llamadas a su API y apuesto a que tu también.

Dentro de MercadoPago existen las preferencias y pagos, las cuales aceptan diferentes tipos y métodos de pago, un área muy importante para nuestros usuarios.

Pero en los requerimientos de tu desarrollo te piden que sólo cobres con tarjeta de débito y crédito, nada de efectivo ni OXXO usando MercadoPago.

¿Se podrá? Claro que sí. Es algo tedioso al principio si no sabes dónde buscar, bueno más bien, sería fácil si las documentaciones estuvieran bien explicadas y escritas.

Métodos de pago

MercadoPago maneja 10 métodos de pago (por el momento y al menos aquí en México), los cuales pueden ser obtenidos haciendo un GET request a la siguiente URI:

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

Si te fijas bien, la URL acepta un parámetro llamado “public_key”, el cual lo obtienes en esta página de MercadoPago (en la sección de Checkout Personalizado).

Si no especificas la “public_key”, no tendrás una respuesta válida.

La respuesta de la petición anterior será un JSON con los métodos de pago:

{
        "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": [...],
        "additional_info_needed": [
            "cardholder_name",
            "issuer_id"
        ],
        "min_allowed_amount": 5,
        "max_allowed_amount": 200000,
        "accreditation_time": 2880,
        "financial_institutions": [],
        "processing_modes": [
            "aggregator"
        ]
}

Con la respuesta deberás encontrar información de los siguientes métodos de pago, al menos para México:

  • Visa Débito (debvisa)
  • Mastercard Débito (debmaster)
  • Tarjeta MercadoPago (mercadopagocard)
  • American Express (amex)
  • Visa (visa)
  • Mastercard (master)
  • Citibanamex (banamex)
  • Santander (serfin)
  • OXXO (oxxo)
  • BBVA Bancomer (bancomer)

¿Quieres realizar llamadas a la API de MercadoPago con WordPress? Mira la guía para peticiones externas con WordPress.

Tipos de pago

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

Estos tipos pueden ser encontradas en éste enlace en la sección payment_type_id, y son:

  • Ticket impreso (ticket)
  • ATM (atm)
  • Tarjeta de crédito (credit_card)
  • Tarjeta de débito (debit_card)
  • Prepago (prepaid_card)

Excluyendo métodos y tipos de pago en MercadoPago

Para excluir los métodos y tipos de pago debemos construir nuestro request, por ejemplo, para crear una preferencia debemos pasar un producto y su información (ejemplo de MercadoPago):

curl -X POST \
  'https://api.mercadopago.com/checkout/preferences?access_token=ACCESS_TOKEN_ENV' \
  -H 'content-type:application/json' \
  -d '{
        "items": [
            {
            "title": "Dummy Item",
            "description": "Multicolor Item",
            "quantity": 1,
            "currency_id": "ARS",
            "unit_price": 10.0
            }
        ]
    }'

Muy simple, estamos haciendo un request con cURL y le enviamos datos en formato JSON (¡tiene que ser válido!)

En la documentación, podemos ver que acepta varios parámetros que podemos adjuntar al request. En este caso nos interesa más la propiedad “payment_methods“:

La propiedad "payment_methods" y sus atributos de MercadoPago.
La propiedad “payment_methods” y sus atributos de MercadoPago.

Como ves, acepta una propiedad llamada “excluded_payment_methods” y “excluded_payment_types” de tipo arreglo.

Pero fíjate bien, en la documentación supuestamente dice que esas propiedades aceptan un “id” como valor y de tipo “string“. Desde aquí la documentación ya empezó mal.

El objeto se debe construir de la siguiente forma:

curl -X POST \
  'https://api.mercadopago.com/checkout/preferences?access_token=[ACCESS_TOKEN]' \
  -H 'Content-Type: application/json' \
  -d '{
    "items": [
        {
            "title": "Dummy Item",
            "description": "Multicolor Item",
            "quantity": 1,
            "currency_id": "MXN",
            "unit_price": 10
        }
    ],
    "payment_methods": {
        "excluded_payment_methods": [
            {
                "id": "oxxo"
            }
        ],
        "excluded_payment_types": [
            {
                "id": "atm"
            }
        ]
    }
}'

Las propiedades “excluded_payment_methods” y “excluded_payment_types” no aceptan un tipo string, si no un tipo arreglo, tal como en el ejemplo de arriba.

El resultado del POST anterior será un JSON enorme, te mostrará la información de la preferencia, pero el dato más importante para el usuario será el init_point o sandbox_init_point, el cual será la URL donde el usuario podrá pagar el producto:

https://sandbox.mercadopago.com/mlm/checkout/pay?pref_id=197664220-19dbfcb1-82d4-4b32-b6c9-01a4bfcdf399

Una preferencia de pago que solo acepta pagos con tarjeta.
Una preferencia de pago que solo acepta pagos con tarjeta.

¿Qué pasa si quiero excluir más de uno? Pues el objeto sería de esta forma:

"payment_methods": {
        "excluded_payment_methods": [
            {
                "id": "oxxo"
            },
            {
                "id": "amex"
            }
        ],
        "excluded_payment_types": [
            {
                "id": "atm"
            },
            {
                "id": "debit_card"
            }
        ]
    }

¡Mucho ojo! Debes utilizar los ids de los métodos y tipos de pago. Si insertas el nombre del servicio, no funcionará.

¡Haz tus pruebas! Y recuerda que necesitarás tu public_key para listar los métodos de pago y access_token para crear tus pagos y/o preferencias.

Si tienes problemas o dudas, no dudes en comentar.

4 comentarios en “Excluir métodos y tipos de pagos en MercadoPago”

  1. 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!

    Responder
    • 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. 🙂

      Responder
  2. 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.

    Responder

Deja un comentario