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 | 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 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 da aplicação criada no Mercado Pago e que é utilizada no backend. Você pode acessá-la através de Suas integrações > Dados da integraçã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": "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" } } ] } }'
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 | Obrigatoriedade |
Authorization | Header | Faz referência a sua chave privada, o Access TokenChave privada da aplicação criada no Mercado Pago e que é utilizada no backend. Você pode acessá-la através de Suas integrações > Dados da integração > Testes > Credenciais de teste.. | 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 boleto. | 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 |
Após enviar a requisição do pagamento, a resposta trará as seguintes informações:
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" } } ] } }
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.
