Pix
Com o Checkout Transparente do Mercado Pago, tambĂ©m Ă© possĂvel oferecer pagamentos instantĂąneos com Pix via cĂłdigo QR ou um link de pagamento.
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 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", "total_amount": "1000.00", "external_reference": "ext_ref_1234", "processing_mode": "automatic", "transactions": { "payments": [ { "amount": "1000.00", "payment_method": { "id": "pix", "type": "bank_transfer" }, "expiration_time": "P3Y6M4DT12H30M5S" } ] }, "payer": { "email": "test@testuser.com" } }'
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 Ă 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 |
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 |
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 |
json
{ "id": "ORD01HRYFWNYRE1MR1E60MW3X0T2P", "type": "online", "total_amount": "1000.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": "1000.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.
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. |
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_payment ) 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 código QR, 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 código QR a ser digitalizado para finalização do pagamento. Apresenta o valor que deverå utilizado na requisição para exibir o código QR do Pix. Veja mais informaçÔes em Disponibilizar pagamento. |
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 código QR 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 código QR 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 cĂłdigo QR
O cĂłdigo QR 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 código QR.
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 código QR 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.