Transferências SPEI
Com o Checkout API do Mercado Pago, também é possível oferecer pagamentos por meio de Transferências SPEI, serviço que permite realizar pagamentos de qualquer banco ou instituição financeira utilizando a CLABE (Clave Bancaria Estandarizada).
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 Transferências SPEI entre as opções de pagamento que deseja oferecer, conforme indicado abaixo, e continue para a etapa de Enviar pagamento.
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 |
| Transferência SPEI | clabe |
html<form id="form-checkout" action="/process_payment" method="post"> <div> <div> <label for="payerFirstName">Nombre</label> <input id="form-checkout__payerFirstName" name="payerFirstName" type="text"> </div> <div> <label for="payerLastName">Appelido</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 del 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>
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.
curlcurl --location 'https://api.mercadopago.com/v1/orders' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}' \ --header 'X-Idempotency-Key: {{SOME_UNIQUE_VALUE}}' \ --data '{ "type": "online", "external_reference": "ext_ref_1234", "processing_mode": "automatic", "total_amount": "50.00", "payer": { "email": "test_payer@example.com" }, "config": { "location": { "state_id": "MX-DIF" } }, "transactions": { "payments": [ { "amount": "50.00", "expiration_time": "P3D", "payment_method": { "id": "clabe", "type": "bank_transfer" } } ] } }'
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 a sua chave privada, o Access Token de produçãoChave privada vinculada a uma aplicação, utilizada no backend para autenticar operações reais. Você pode consultá-la na seção Credenciais da aplicação, dentro do ambiente de produção. Nunca deve ser compartilhada nem exposta no frontend.. | 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 |
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.Aguascalientes (MX-AGU); Baja California (MX-BCN); Baja California Sur (MX-BCS); Campeche (MX-CAM); Chiapas (MX-CHP); Chihuahua (MX-CHH); Coahuila (MX-COA); Colima (MX-COL); Distrito Federal (MX-DIF); Durango (MX-DUR); Estado De México (MX-MEX); Guanajuato (MX-GUA); Guerrero (MX-GRO); Hidalgo (MX-HID); Jalisco (MX-JAL); Michoacán (MX-MIC); Morelos (MX-MOR); Nayarit (MX-NAY); Nuevo León (MX-NLE); Oaxaca (MX-OAX); Puebla (MX-PUE); Querétaro (MX-QUE); Quintana Roo (MX-ROO); San Luis Potosí (MX-SLP); Sinaloa (MX-SIN); Sonora (MX-SON); Tabasco (MX-TAB); Tamaulipas (MX-TAM); Tlaxcala (MX-TLA); Veracruz (MX-VER); Yucatán (MX-YUC); Zacatecas (MX-ZAC). | Opcional |
total_amount | Body. String | Valor total da transação. | Obrigatório |
transactions.payments.expiration_time | Body. String | Permite definir a data de vencimento utilizando o formato de duração ISO 8601. Embora você possa configurá-la para ser entre 1 e 30 dias após a emissão do pagamento, recomendamos estabelecer uma duração de 3 dias (“P3D” no exemplo) para evitar conflitos entre o vencimento e a acreditação do pagamento, que pode demorar até 2 horas úteis a partir de sua realização. Em caso de que o pagamento seja realizado após a data de vencimento estabelecida, o valor será devolvido à conta do Mercado Pago do pagador. | Opcional |
payer.email | Body. String | E-mail do comprador. | Obrigatório |
transaction.payments.payment_method.id | Body. String | Identificador do meio de pagamento. Neste caso, o valor deverá ser clabe. | 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 |
A resposta retornará o parâmetro ticket_url, que contém a URL com as instruções para que o comprador efetue o pagamento. Você deve redirecioná-lo para essa página, seguindo as orientações da etapa de Disponibilizar pagamento. Além disso, mostrará o status action_required com status_detail=waiting_transfer até que o pagamento seja realizado.
json{ "id": "ORD01J6TC8BYRR0T4ZKY0QR39WGYE", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "marketplace": "NONE", "total_amount": "50.00", "country_code": "MEX", "user_id": "1245621468", "status": "action_required", "status_detail": "waiting_payment", "capture_mode": "automatic", "created_date": "2024-09-02T22:04:01.880469Z", "last_updated_date": "2024-09-02T22:04:04.429289Z", "integration_data": { "application_id": "4599991948843755" }, "transactions": { "payments": [ { "id": "PAY01J6TC8BYRR0T4ZKY0QRTZ0E24", "amount": "50.00", "reference_id": "22dvqmsbq8c", "status": "action_required", "status_detail": "waiting_payment", "payment_method": { "id": "clabe", "type": "bank_transfer", "ticket_url": "https://www.mercadopago.com.mx/sandbox/payments/00000000000/ticket?caller_id=77777777777&hash=34cb0d7c-81d9-478c-92a5-767d0kakjja", "reference": "1234567890" } } ] } }
Dentre os parâmetros retornados, temos os indicados na tabela abaixo.
| Parâmetro | Tipo | Descrição |
transactions.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 o pagamento seja realizado. |
transactions.payments.status_detail | String | Nos casos de transferência bancária, como é o caso de pagamentos com Transferências SPEI, o status_detail obtido é aguardando (waiting_payment) que o usuário finalize o processo de pagamento no seu banco. |
transactions.payments.payment_method.ticket_url | String | URL para a página com as instruções de pagamento via Transferências SPEI. Veja mais informações em Disponibilizar pagamento. |
transactions.payments.payment_method.reference | String | Número de referência da CLABE para que o comprador realize a transferência bancária. |
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 a criação do pagamento, e para que o cliente possa realizar a transferência, é necessário redirecioná-lo para a URL retornada na resposta à criação da order sob o parâmetro ticket_url.
json{ [...] "transactions": { "payments": [ { [...] "payment_method": { "id": "clabe", "type": "bank_transfer", "ticket_url": "https://www.mercadopago.com.mx/payments/113775986440/ticket?caller_id=1872745950&hash=9545e05b-a530-4c82-9441-a666d0c73f70", "reference": "646010349353743569" } } ] } }
Para isso, você tem duas opções:
- Realizar esse redirecionamento automaticamente.
- Disponibilizar essa URL ao usuário por meio de um botão clicável, seguindo o exemplo abaixo.
html<a href="https://www.mercadopago.com.mx/payments/51096146182/ticket?caller_id=34728475&hash=f3a8630a-f06a-48e4-b2a6-f95750af7346" target="_blank">Pagar com Transferências SPEI</a>
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.