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 | bolbradesco |
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 pruebasClave privada de pruebas 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": "15635614680" }, "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": "bolbradesco", "type": "ticket" }, "expiration_time": "P3D" } ] } }'
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 | Requerido/Opcional |
Authorization | Header | Hace referencia a tu clave privada, o Access Token. Utiliza el Access Token de pruebasClave privada de pruebas 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. en ambientes de desarrollo, y el Access Token productivoClave privada de la aplicación creada en Mercado Pago, que es utilizada en el backend al momento de recibir pagos reales. Puedes acceder a ella a través de Tus integraciones > Detalles de aplicación > Producción > Credenciales de producción. para pagos reales. | 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 bolbradesco . | 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": "bolbradesco", "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": "bolbradesco", "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.