Pix
Com o Checkout Transparente do Mercado Pago, também é possível oferecer pagamentos instantâneos com Pix via QR Code ou um link de pagamento.
Pix é um meio de pagamento eletrônico instantâneo oferecido pelo Banco Central do Brasil a pessoas físicas e jurídicas.
Se você já configurou seu ambiente e quer oferecer pagamentos via Pix, siga os passos abaixo.
processing_mode. Para mais informações, acesse a seção Modelo de integração.Para receber pagamentos, é necessário adicionar 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 Pix entre as opções de pagamento que deseja oferecer, conforme indicado abaixo, e continue para a etapa de Obter tipos de documento.
Caso ainda não tenha um formulário de pagamento, adicione o modelo abaixo ao seu projeto e inclua o identificador do Pix como opção a ser oferecida.
| Meio de pagamento | payment_method_id |
| Pix | pix |
html<form id="form-checkout" action="/process_payment" method="post"> <div> <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> <select id="form-checkout__identificationType" name="identificationType" type="text"></select> </div> <div> <label for="identificationNumber">Número do documento</label> <input id="form-checkout__identificationNumber" name="identificationNumber" 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 uma requisição com seu Access Token de testeChave privada vinculada a uma aplicação, utilizada no backend para autenticar operações no ambiente de teste. Você pode consultá-la na seção Credenciais da aplicação, dentro do ambiente de teste. Ela não permite processar pagamentos reais, nunca deve ser exposta no frontend e começa com o prefixo `APP_USR`. e os parâmetros requeridos listados abaixo ao endpoint /v1/ordersPOST.
processing_mode=manual) pode ter um prazo de validade definido no campo expiration_time. Se o campo não for enviado, o prazo padrão será de P1D (um dia). Quando o prazo vence sem que a order tenha chegado a um status final, ela é encerrada automaticamente, os pagamentos pendentes associados são cancelados e o integrador é notificado.curlcurl -X POST \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}' \ -H 'X-Idempotency-Key: {{SOME_UNIQUE_VALUE}}' \ 'https://api.mercadopago.com/v1/orders' \ -d '{ "type": "online", "total_amount": "50.00", "external_reference": "ext_ref_1234", "processing_mode": "automatic", "config": { "location": { "state_id": "BR-SP" } }, "transactions": { "payments": [ { "amount": "50.00", "payment_method": { "id": "pix", "type": "bank_transfer" }, "expiration_time": "P3Y6M4DT12H30M5S" } ] }, "payer": { "email": "test_payer@example.com" } }'
429 Too Many Requests, aguarde o tempo indicado no header Retry-After da resposta antes de tentar novamente. Consulte Possíveis erros para mais detalhes.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.
| Parâmetro | Tipo | Descrição | Obrigatoriedade |
Authorization | Header | Faz referência à sua chave privada, o Access Token de testeChave privada vinculada a uma aplicação, utilizada no backend para autenticar operações no ambiente de teste. Você pode consultá-la na seção Credenciais da aplicação, dentro do ambiente de teste. Ela não permite processar pagamentos reais, nunca deve ser exposta no frontend e começa com o prefixo `APP_USR`.. | 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 |
total_amount | Body. String | Valor total da transação. | Obrigatório |
external_reference | Body. String | Referência externa da order que pode ser, por exemplo, um hashcode do Banco Central, funcionando como identificador de origem da transação. | 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 |
expiration_time | Body. String | Quando uma order é criada em modo manual (processing_mode=manual), este parâmetro permite definir seu tempo de expiração utilizando o formato de duração ISO 8601. O período começa em created_date e o limite máximo é de 2920 horas. Se não enviado, o valor padrão será de P1D (um dia). Este parâmetro não deve ser enviado na criação de uma order em modo automático (processing_mode=automatic). | Opcional |
config.location | Body. Object | Informações sobre a localização do pagador. | Opcional |
config.location.state_id | Body. String | Código do estado, província ou região administrativa do pagador, formado pelo código de duas letras do país, seguido por um hífen e pelo código da localidade. Consulte os valores aceitos.Acre (BR-AC); Alagoas (BR-AL); Amapá (BR-AP); Amazonas (BR-AM); Bahia (BR-BA); Ceará (BR-CE); Distrito Federal (BR-DF); Espírito Santo (BR-ES); Goiás (BR-GO); Maranhão (BR-MA); Mato Grosso (BR-MT); Mato Grosso do Sul (BR-MS); Minas Gerais (BR-MG); Pará (BR-PA); Paraíba (BR-PB); Paraná (BR-PR); Pernambuco (BR-PE); Piauí (BR-PI); Rio de Janeiro (BR-RJ); Rio Grande do Norte (BR-RN); Rio Grande do Sul (BR-RS); Rondônia (BR-RO); Roraima (BR-RR); Santa Catarina (BR-SC); São Paulo (BR-SP); Sergipe (BR-SE); Tocantins (BR-TO). | Opcional |
transaction.payments.payment_method.id | Body. String | Identificador do meio de pagamento. Neste caso, o valor deverá ser pix. | Obrigatório |
transaction.payments.payment_method.type | Body. String | Tipo do meio de pagamento. No caso de pagamentos com Pix, o valor deverá ser bank_transfer. | Obrigatório |
transaction.payment.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 de pagamentos via Pix é de 24 horas, mas é possível alterá-la através deste parâmetro. A data configurada deve estar entre 30 minutos até 30 dias a partir da data de emissão do pagamento. | Opcional |
payer.email | Body. String | E-mail do comprador. | Obrigatório |
A resposta retornará os parâmetros ticket_url, qr_code e qr_code_based64, que contém, respectivamente, a URL com as instruções para que o comprador efetue o pagamento, um código alfanumérico a ser utilizado na configuração para apresentar a opção que permitirá copiar e colar o código de pagamento, e o QR code que pode ser renderizado diretamente na tela de pagamento. Você deve disponibilizar uma ou todas essas opções seguindo as orientações da etapa de Disponibilizar pagamento. Além disso, mostrará também o status action_required com status_detail=waiting_transfer até que o pagamento seja realizado.
json{ "id": "ORD01HRYFWNYRE1MR1E60MW3X0T2P", "type": "online", "total_amount": "50.00", "external_reference": "ext_ref_1234", "country_code": "BRA", "status": "action_required", "status_detail": "waiting_transfer", "capture_mode": "automatic", "transactions": { "payments": [ { "id": "PAY01HRYFXQ53Q3JPEC48MYWMR0TE", "reference_id": "123456789", "status": "action_required", "status_detail": "waiting_transfer", "amount": "50.00", "payment_method": { "id": "pix", "type": "bank_transfer", "ticket_url": "https://www.mercadopago.com.br/sandbox/payments/00000000000/ticket?caller_id=77777777777&hash=34cb0d7c-81d9-478c-92a5-767d0kakjja", "qr_code": "00020126580014br.gov.bcb.pix0136b76aa9c2-2ec4-4110-954e-ebfe34f05b61520400005303986540510.005802BR5912TESTPVBWOSBE6009Sao Paulo62240520mpqrinter715936942186304C3C0", "qr_code_base64": "iVBORw0KGgoAAAANSUhEUgAABWQAAAVkAQAAAAB79i" } } ] }, "processing_mode": "automatic", "marketplace": "NONE" }
Dentre os parâmetros retornados, temos os indicados na tabela abaixo.
| Parâmetro | 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. |
transaction.payments.status_detail | String | Nos casos de transferência bancária, como é o caso de pagamentos com Pix, o status_detail obtido é aguardando (waiting_transfer) que o usuário finalize o processo de pagamento no seu banco. |
transaction.payments.payment_method.ticket_url | String | URL para o Pix renderizado, com QR Code, Pix Copia e Cola e instruções de pagamento. Veja mais informações em Disponibilizar pagamento. |
transaction.payments.payment_method.qr_code | String | Apresenta um código alfanumérico a ser utilizado na configuração para apresentar a opção que permitirá copiar e colar o código de pagamento para pagamento do Pix. Veja mais informações em Disponibilizar pagamento. |
transaction.payments.payment_method.qr_code_base64 | String | Representação em Base64 da imagem do QR code a ser digitalizado para finalização do pagamento. Apresenta o valor que deverá utilizado na requisição para exibir o QR Code do Pix. Veja mais informações em Disponibilizar pagamento. |
expiration_time | String | Período de expiração (em formato ISO 8601) retornado para uma order criada em modo manual (processing_mode=manual), contado a partir de created_date. Quando omitido na requisição, o padrão retornado será P1D (um dia). Este parâmetro não será retornado para uma order criada em modo automático (processing_mode=automatic). |
Após criar a requisição do pagamento com Pix, escolha a forma com que o usuário realizará o pagamento no frontend, podendo ser através de um link ou botão de pagamento ou de um QR Code renderizado.
Selecione a opção que mais se adequa ao seu modelo de negócio e siga as etapas descritas abaixo.
Adicionar link ou botão
Ao optar por adicionar um link ou botão para pagamento com Pix, o comprador será direcionado a uma nova janela contendo todas as informações para realização do pagamento, como QR Code ou Pix Copia e Cola e as suas respectivas instruções de pagamento.
Para oferecer esta opção, utilize o atributo ticket_url, retornado na resposta da requisição, como apresentado abaixo:
html<a href="https://www.mercadopago.com.br/payments/123456789/ticket?caller_id=123456&hash=123e4567-e89b-12d3-a456-426655440000" target="_blank">Pagar com Pix</a>
Renderizar QR Code
O QR code retornado na resposta da requisição pode ser renderizado diretamente na tela de pagamento e deve ser utilizado apenas uma vez. Além disso, é possível incluir a opção de copiar e colar o código de pagamento, permitindo a transação via Internet Banking.
Para isso, siga as etapas abaixo.
- Adicione o
qr_code_base64, retornado na resposta da requisição, para exibir o QR Code.
html<img src={`data:image/jpeg;base64,${qr_code_base64}`}/>
- Em seguida, adicione o
qr_code, retornado na resposta da requisição, para apresentar a opção que permitirá copiar e colar o código.
html<label for="copiar">Copiar Hash:</label> <input type="text" id="copiar" value={qr_code} readonly/>
Ao concluir essas etapas, será apresentado para o comprador no momento do pagamento o QR Code renderizado junto à opção de copiar e colar o seu código de pagamento.
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.