Boleto
Com o Checkout Transparente do Mercado Pago, tambĂ©m Ă© possĂvel oferecer pagamentos por meio de um boleto bancĂĄrio.
Com esse meio de pagamento, os compradores poderĂŁo realizar um pagamento em dinheiro, sempre dentro do prazo estabelecido para seu vencimento, e deverĂŁo aguardar que o pagamento seja realizado para considerar a compra finalizada.
Se vocĂȘ jĂĄ configurou seu ambiente e quer oferecer pagamentos via boleto bancĂĄrio, siga os passos abaixo.
processing_mode
. Para mais informaçÔes, acesse a seção Modelo de integração.Para poder receber pagamentos, Ă© necessĂĄrio que vocĂȘ adicione no frontend um formulĂĄrio que permita capturar os dados do pagador de maneira segura.
Se vocĂȘ jĂĄ tem um desenvolvimento que inclui um formulĂĄrio de pagamento prĂłprio, certifique-se de incluir boleto entre as opçÔes de pagamento que deseja oferecer, conforme indicado abaixo, e continue para a etapa de Obter tipos de documento
zip_code
, street_name
, street_number
, neighborhood
, city
e state
estejam presentes no formulĂĄrio de pagamento e sejam preenchidos pelo comprador. Se vocĂȘ tiver uma configuração que nĂŁo os inclua, serĂĄ necessĂĄrio atualizĂĄ-la para garantir que seus pagamentos sejam processados.
Caso ainda não tenha um formulårio de pagamento, adicione o modelo abaixo ao seu projeto e inclua o identificador do boleto bancårio como opção a ser oferecida.Meio de pagamento | 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 o preenchimento correto do formulĂĄrio de pagamento, Ă© preciso obter os tipos de documento que podem ser aceitos.
A função abaixo permite completar automaticamente as opçÔes disponĂveis. Para isso, basta incluir no formulĂĄrio o elemento select
com o id=form-checkout__identificationType
, utilizado no exemplo da etapa anterior.
Se vocĂȘ jĂĄ possui um desenvolvimento que contempla a obtenção de tipos de documento, como indicado a seguir, avance para a etapa de Enviar pagamento.
Caso ainda não tenha essa função, adicione o código a seguir ao seu projeto.
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); }
O envio do pagamento deve ser realizado mediante a criação de uma order que contenha a transação de pagamento associada.
Para isso, envie um POST com seu Access Token de testeChave privada de testes da aplicação criada no Mercado Pago e que Ă© utilizada no backend. VocĂȘ pode acessĂĄ-la atravĂ©s de Suas integraçÔes > Detalhes da aplicação > Testes > Credenciais de teste. e os parĂąmetros requeridos listados abaixo para o endpoint /v1/ordersAPI e execute a requisição.
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" } ] } }'
Veja na tabela abaixo as descriçÔes dos parùmetros que são obrigatórios na requisição e daqueles que, embora sejam opcionais, possuem alguma particularidade importante de ser destacada.
Atributo | Tipo | Descrição | Obrigatório/Opcional |
Authorization | Header | Faz referĂȘncia a sua chave privada, o Access Token. Utilize o Access Token de testeChave privada de testes da aplicação criada no Mercado Pago e que Ă© utilizada no backend. VocĂȘ pode acessĂĄ-la atravĂ©s de Suas integraçÔes > Detalhes da aplicação > Testes > Credenciais de teste. em ambientes de desenvolvimento e o Access Token produtivoChave privada da aplicação criada no Mercado Pago e que Ă© utilizada no backend ao receber pagamentos reais. VocĂȘ pode acessĂĄ-la atravĂ©s de Suas integraçÔes > Detalhes da aplicação > Produção > Credenciais de produção. para pagamentos reais. | ObrigatĂłrio |
X-Idempotency-Key | Header | Chave de idempotĂȘncia. Essa chave garante que cada solicitação seja processada apenas uma vez, evitando duplicidades. Use um valor exclusivo no header da requisição, como um UUID V4 ou uma string aleatĂłria. | ObrigatĂłrio |
processing_mode | Body. String | Modo de processamento da order. Os valores possĂveis sĂŁo: - automatic : para criar e processar a ordem em modo automĂĄtico. - manual : para criar a order e processĂĄ-la posteriormente. Para mais informaçÔes, acesse a seção Modelo de integração. | ObrigatĂłrio |
total_amount | Body. String | Valor total da transação. | Obrigatório |
payer.email | Body. String | E-mail do comprador. | ObrigatĂłrio |
payer.identification.type | Body. String | Tipo de identificação utilizada pelo comprador. | Obrigatório |
payer.identification.number | Body. String | NĂșmero de identificação do comprador. | ObrigatĂłrio |
payer.adress.street_name | Body. String | Nome da rua do endereço do pagador. | Obrigatório |
payer.adress.street_number | Body. String | NĂșmero do endereço do pagador. Caso nĂŁo possua um nĂșmero, enviar "S/N". | ObrigatĂłrio |
payer.adress.zip_code | Body. String | CEP do endereço do pagador. | Obrigatório |
payer.adress.neighborhood | Body. String | Bairro em que se encontra o endereço do pagador. | Obrigatório |
payer.adress.state | Body. String | Estado em que se encontra o endereço do pagador. Para o Brasil, este parùmetro só aceita dois caracteres. Exemplo: SP | Obrigatório |
payer.adress.city | Body. String | Cidade em que se encontra o endereço do pagador. | Obrigatório |
transaction.payments.payment_method.id | Body. String | Identificador do meio de pagamento. Neste caso, o valor deverĂĄ ser bolbradesco . | ObrigatĂłrio |
transaction.payments.payment_method.type | Body. String | Tipo do meio de pagamento. No caso de pagamentos com Pix, o valor deverĂĄ ser ticket . | ObrigatĂłrio |
transactions.payments.expiration_time | Body. String | Permite definir a data de vencimento utilizando o formato de duração ISO 8601. Por padrĂŁo, a data de vencimento do boleto Ă© de 3 dias Ășteis, mas Ă© possĂvel alterĂĄ-la atravĂ©s deste parĂąmetro. A data pode ser configurada entre 1 e 30 dias apĂłs a criação do pagamento. Recomendamos estabelecer uma duração de, no mĂnimo, 3 dias (âP3D", como no exemplo) para evitar conflitos entre o vencimento e a compensação do pagamento, que pode demorar atĂ© 2 horas Ășteis a partir de sua realização. Caso o pagamento seja efetuado apĂłs a data de vencimento estabelecida, o valor serĂĄ estornado na conta do Mercado Pago do 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" } } ] } }
Dentre os parĂąmetros retornados, temos os indicados na tabela abaixo.
Atributo | Tipo | Descrição |
transaction.payments.status | String | Retorna o status da transação. Neste caso, retornarå action_required para indicar a necessidade de uma ação para concluir o processamento, ou seja, até que se realize o pagamento do boleto. |
transaction.payments.status_detail | String | Neste caso, o status_detail obtido Ă© aguardando (waiting_payment ) que o usuĂĄrio finalize o processo de pagamento do boleto em seu banco. |
transaction.payments.payment_method.ticket_url | String | URL que contĂ©m as instruçÔes para que o comprador realize o pagamento do boleto, a qual vocĂȘ deverĂĄ redirecionĂĄ-lo. |
transaction.payments.payment_barcode_content | String | Apresenta um cĂłdigo de barras em formato EAN-13 a ser utilizado para pagamento do boleto bancĂĄrio. |
transaction.payments.payment_financial_institution | String | Instituição bancåria responsåvel pelo processamento do boleto. |
transaction.payments.payment_digitable_line | String | Apresenta a linha digitåvel do código de barras, uma forma de pagamento do boleto bancårio por meio da internet e também nos casos em que o código de barras estå danificado. |
Caso deseje, vocĂȘ pode cancelar um pagamento criado, desde que esteja pendente ou em processamento. Ou seja, com status=action_required
.
Além disso, recomendamos cancelar os pagamentos que não foram realizados dentro da data de vencimento estabelecida, para evitar problemas de cobrança e conciliação.
Para obter mais informaçÔes, consulte a seção Reembolsos e cancelamentos.