Boleto
Con Checkout Transparente de Mercado Pago, también es posible ofrecer pagos con boleto bancário
Con esto medio de pago, los compradores podrán realizar un pago diferido, siempre dentro del plazo establecido para su vencimiento, y deberán aguardar a que el mismo se acredite para dar por finalizada la compra.
Si ya configuraste tu ambiente, y quieres ofrecer pagos con boleto bancário, sigue los pasos a continuación.
processing_mode. Para más información, accede a la sección Modelo de integración.Para poder recibir pagos, es necesario que añadas en el frontend un formulario que permita capturar los datos del pagador de manera segura.
Si ya cuentas con un desarrollo que contempla un formulario de pago propio, asegúrate de incluir boleto entre las opciones de pago que deseas ofrecer, como es indicado a continuación, y avanza a la etapa de Obtener tipos de documento.
zip_code, street_name, street_number, neighborhood, city y state estén presentes en el formulario de pago y sean completados por el comprador. Si tienes realizada una configuración que no los incluya, deberás actualizarla para asegurarte que tus pagos sean procesados.
Si no cuentas con un formulario de pago, añade el siguiente a tu proyecto, incluyendo el identificador de boleto bancário como medio de pago a ofrecer.| Medio de pago | payment_method_id |
| Boleto bancário | boleto |
html
<form id="form-checkout" action="/process_payment" method="post"> <div> <h1>Payer Request</h1> <div> <label for="payerFirstName">Nome</label> <input id="form-checkout__payerFirstName" name="payerFirstName" type="text"> </div> <div> <label for="payerLastName">Sobrenome</label> <input id="form-checkout__payerLastName" name="payerLastName" type="text"> </div> <div> <label for="email">E-mail</label> <input id="form-checkout__email" name="email" type="text"> </div> <div> <label for="identificationType">Tipo de documento</label> <input id="form-checkout__identificationType" name="identificationType" type="text"></input> </div> <div> <label for="identificationNumber">Número do documento</label> <input id="form-checkout__identificationNumber" name="identificationNumber" type="text"> </div> <div> <label for="zip_code"> CEP: </label> <input id="form-checkout__zip_code" name="zip_code" type="text"> </div> <div> <label for="street_name"> Rua: </label> <input id="form-checkout__street_name" name="street_name" type="text"> </div> <div> <label for="street_number"> Número: </label> <input id="form-checkout__street_number" name="street_number" type="text"> </div> <div> <label for="neighborhood"> Bairro: </label> <input id="form-checkout__neighborhood" name="neighborhood" type="text"> </div> <div> <label for="city"> Cidade: </label> <input id="form-checkout__city" name="city" type="text"> </div> <div> <label for="federal_unit"> Estado: </label> <input id="form-checkout__federal_unit" name="federal_unit" type="text"> </div> </div> <div> <div> <input type="hidden" name="transactionAmount" id="transactionAmount" value="100"> <input type="hidden" name="description" id="description" value="Nome do Produto"> <br> <button type="submit">Pagar</button> </div> </div> </form>
Para facilitar la inserción de datos en el formulario de pago de manera correcta, es necesario obtener los posibles tipos de documento a ser aceptados.
La función a continuación te permitirá completar automáticamente las opciones disponibles. Para eso, basta incluir el elemento select con el id: form-checkout__identificationType que se encuentra en el formulario utilizado como ejemplo en la etapa anterior.
Si ya cuentas con un desarrollo que contempla la obtención de tipos de documento, como es indicado a continuación, avanza a la etapa de Enviar pago.
Si no cuentas con esta función, añade la siguiente a tu proyecto.
javascript
(async function getIdentificationTypes() { try { const identificationTypes = await mp.getIdentificationTypes(); const identificationTypeElement = document.getElementById('form-checkout__identificationType'); createSelectOptions(identificationTypeElement, identificationTypes); } catch (e) { return console.error('Error getting identificationTypes: ', e); } })(); function createSelectOptions(elem, options, labelsAndKeys = { label: "name", value: "id" }) { const { label, value } = labelsAndKeys; elem.options.length = 0; const tempOptions = document.createDocumentFragment(); options.forEach(option => { const optValue = option[value]; const optLabel = option[label]; const opt = document.createElement('option'); opt.value = optValue; opt.textContent = optLabel; tempOptions.appendChild(opt); }); elem.appendChild(tempOptions); }
El envío del pago debe ser realizado mediante la creación de una order que contenga transacciones de pago asociadas.
Para eso, envía un POST con tu Access Token de pruebaClave privada de la aplicación creada en Mercado Pago, que es utilizada en el backend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba. y los parámetros requeridos enumerados a continuación al endpoint /v1/ordersAPI y ejecutes la requisición.
curl
curl -X POST \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \ -H 'X-Idempotency-Key: SOME_UNIQUE_VALUE' \ 'https://api.mercadopago.com/v1/orders' \ -d '{ "type": "online", "external_reference": "ext_ref_1234", "processing_mode": "automatic", "total_amount": "200.00", "description": "some description", "payer": { "email": "test@testuser.com", "first_name": "John", "last_name": "Doe", "identification": { "type": "CPF", "number": "99999999999" }, "address": { "street_name": "Av. das Nações Unidas", "street_number": "3003", "zip_code": "06233903", "neighborhood": "Bonfim", "state": "SP", "city": "Osasco" } }, "transactions": { "payments": [ { "amount": "200.00", "payment_method": { "id": "boleto", "type": "ticket" } } ] } }'
Consulta en la tabla a continuación las descripciones de los parámetros que son obligatorios en la solicitud y aquellos que, aunque son opcionales, tienen alguna particularidad importante que debe destacarse.
| Atributo | Tipo | Descripción | Obligatoriedad |
Authorization | Header | Hace referencia a tu clave privada, el Access Token de pruebaClave privada de la aplicación creada en Mercado Pago, que es utilizada en el backend. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Pruebas > Credenciales de prueba.. | Requerido |
X-Idempotency-Key | Header | Llave de idempotencia. Esta llave garantiza que cada solicitud sea procesada una única vez, evitando duplicidades. Utiliza un valor exclusivo en el encabezado de tu solicitud, como un UUID V4 o strings aleatorias. | Requerido |
processing_mode | Body. String | Modo de procesamiento de la order. Los valores posibles son: - automatic: para crear y procesar la order en modo automático. - manual: para crear la order y procesarla con posterioridad. Para más información, acceda a la sección Modelo de integración. | Requerido |
total_amount | Body. String | Monto total de la transacción. | Requerido |
payer.email | Body. String | E-mail del comprador. | Requerido |
payer.identification.type | Body. String | Tipo de identificación utilizada por el comprador. | Requerido |
payer.identification.number | Body. String | Número de identificación del comprador. | Requerido |
payer.adress.street_name | Body. String | Número de la dirección del pagador. | Requerido |
payer.adress.street_number | Body. String | Número do endereço do pagador. Caso não possua um número, enviar "S/N". | Requerido |
payer.adress.zip_code | Body. String | Código postal de la dirección del pagador. | Requerido |
payer.adress.neighborhood | Body. String | Barrio en el que se encuentra la dirección del pagador. | Requerido |
payer.adress.state | Body. String | Estado en el que se encuentra la dirección del pagador. Para Brasil, este parámetro solo acepta dos caracteres. Ejemplo: SP. | Requerido |
payer.adress.city | Body. String | Ciudad en la que se encuentra la dirección del pagador. | Requerido |
transaction.payments.payment_method.id | Body. String | Identificador del medio de pago. En este caso, el valor deberá ser boleto. | Requerido |
transaction.payments.payment_method.type | Body. String | Tipo del medio de pago. En el caso de pagos con boleto, el valor deberá ser ticket. | Requerido |
transactions.payments.expiration_time | Body. String | Permite definir la fecha de vencimiento utilizando el formato de duración ISO 8601. Por defecto, la fecha de vencimiento del boleto es de 3 días hábiles, pero es posible cambiarla a través de este parámetro. La fecha se puede configurar entre 1 y 30 días después de la creación del pago. Recomendamos establecer una duración de, al menos, 3 días (“P3D", como en el ejemplo) para evitar conflictos entre la fecha de vencimiento y la acreditación del pago, que puede tardar hasta 2 horas hábiles desde su realización. En caso de que el pago se efectúe luego de la fecha de vencimiento establecida, el valor será devuelto a la cuenta de Mercado Pago del pagador. | Opcional |
json
{ "id": "ORD01J6TC8BYRR0T4ZKY0QR39WGYE", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "marketplace": "NONE", "total_amount": "200.00", "country_code": "BRA", "user_id": "1245621468", "created_date": "2024-09-02T22:04:01.880469Z", "last_updated_date": "2024-09-02T22:04:04.429289Z", "type": "online", "status": "action_required", "status_detail": "waiting_payment", "capture_mode": "automatic", "integration_data": { "application_id": "4599991948843755" }, "transactions": { "payments": [ { "id": "PAY01J6TC8BYRR0T4ZKY0QRTZ0E24", "reference_id": "22dvqmsbq8c", "amount": "200.00", "status": "action_required", "status_detail": "waiting_payment", "payment_method": { "id": "boleto", "type": "ticket", "ticket_url": "https://www.mercadopago.com.ar/payments/86797024510/ticket?caller_id=1870026883&payment_method_id=rapipago&payment_id=86797024510&payment_method_reference_id=6004835002&hash=0331521a-9ddb-44a2-851c-65f77d8d394e", "barcode_content": "3335008800000000006004835002100020000242462010", "reference": "1234567890", "verification_code": "1234567890", "financial_institution": "boleto", "digitable_line": "23793380296060054351030006333303799140000020000" } } ] } }
Entre los parámetros devueltos, tenemos los indicados en la tabla a continuación.
| Atributo | Tipo | Descripción |
transaction.payments.status | String | Retorna el status de la transacción. En este caso, devolverá action_required para indicar la necesidad de una acción para completar el procesamiento, es decir, hasta que se realice el pago del boleto. |
transaction.payments.status_detail | String | En este caso, el status_detail obtenido es aguardando (waiting_payment) que el usuario complete el proceso de pago del boleto en su banco. |
transaction.payments.payment_method.ticket_url | String | URL que contiene las instrucciones para que el comprador realice el pago del boleto, al cual deberás redirigirlo. |
transaction.payments.payment_barcode_content | String | Presenta un código de barras en formato EAN-13 que debe ser utilizado para el pago del boleto bancário. |
transaction.payments.payment_financial_institution | String | Institución bancaria responsable del procesamiento del boleto. |
transaction.payments.payment_digitable_line | String | Presenta la línea digitable del código de barras, una forma de pagar el boleto bancário a través de internet o en los casos en que el código de barras está dañado. |
Si lo deseas, puedes cancelar un pago creado para boleto bancário, siempre y cuando se encuentre pendiente o en proceso; es decir, con status=action_required.
Adicionalmente, recomendamos cancelar los pagos que no fueron realizados dentro de la fecha de vencimiento establecida, para evitar problemas de facturación y conciliación.
Para obtener más información, consulta la sección Reembolsos y cancelaciones.
