PHP - Pagamentos via PIX com o MercadoPago
Olá Gente
A integração com o PIX do MercadoPago é uma das mais simples de todas.
Gerando Credenciais
Antes de começarmos, precisamos gerar as credenciais para acessar a API do MercadoPago.
Em sua conta MercadoPago, acesse:
Em seguida, clique em "Credenciais de Produção":

Em "Access Token", clique no ícone de um olho, e copie sua chave:

Criando Pagamento
Para criar um pagamento, via PIX, no MercadoPago, precisamos fazer um POST para:
https://api.mercadopago.com/v1/payments?access_token=[SeuAccessToken]
Segue exemplo do Json que precisamos enviar:
{
"transaction_amount": 100,
"payment_method_id": "pix",
"notification_url": "https://webhook.site/74605848-c104-461b-a94f-4febba6c1bc1",
"external_reference": "123",
"payer": {
"first_name": "Paloma",
"last_name": "Macetko",
"email": "[email protected]"
}
}Onde precisamos apenas:
- transaction_amount: Definir o valor (sem pontos ou virgulas, neste exemplo, "100" corresponde a "R$ 1,00")
- notification_url: O link no qual o MercadoPago ira avisar que o PIX foi Pago
- external_reference: Um código para identificar o pagamento
- payer.first_name: Primeiro nome do Cliente
- payer.last_name: Último nome do Cliente
- payer.email: E-mail do Cliente
Apenas Isto! Mais Nada! 😍😍
A resposta da API, em caso de sucesso, será um "HttpCode 201" com um Json, onde, precisamos apenas dos dados dentro de "point_of_interaction.transaction_data":
{
"qr_code": "XXXXXXXXX",
"ticket_url": "https://www.mercadopago.com.br/payments/XXXXXXXXX",
"qr_code_base64": "XXXXXXXX"
}Aqui temos:
- qr_code: A chave do PIX para o pagamento no estilo "Copia e Cola"
- ticket_url: Link que você pode direcionar o cliente para pagar o PIX online
- qr_code_base64: O QRCode em Base64
Identificando Pagamento
Quando você cria o pagamento, você preenche a url do Webhook em "notification_url".
Em cada movimentação, o MercadoPago ira enviar um Json para esta Url com o conteúdo similar ao conteúdo abaixo:
{
"action": "payment.created",
"api_version": "v1",
"data": {
"id": "73112591629"
},
"date_created": "2024-02-29T16:34:59Z",
"id": 111260673855,
"live_mode": true,
"type": "payment",
"user_id": "229909618"
}Aqui recebemos o ID do pagamento, em "data.id":
73112591629
Com esta informação, basta fazermos uma GET para a API do MercadoPago:
https://api.mercadopago.com/v1/payments/[ID_PAGAMENTO]?access_token=[SeuAccessToken]
Iremos receber um Json igual ao Json retornado na criação do pagamento, neste Json iremos extrair os campos abaixo:
- external_reference: Código da compra que informamos na criação do pagamento
- status: Status do Pagamento
Quando "status" receber "approved" indica que o pagamento foi APROVADO 💚:
{
"status": "approved"
}Integrando com PHP
Agora que já aprendemos como funciona, vamos fazer isto tudo funcionar via PHP?
Segue exemplo de código:
<?
$DadEnv = array();
$DadEnv["transaction_amount"] = 100;
$DadEnv["payment_method_id"] = "pix";
$DadEnv["notification_url"] = "https://webhook.site/74605848-c104-461b-a94f-4febba6c1bc1";
$DadEnv["external_reference"] = "ABC123";
$DadEnv["payer"]["first_name"] = "Paloma";
$DadEnv["payer"]["last_name"] = "Macetko";
$DadEnv["payer"]["email"] = "[email protected]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.mercadopago.com/v1/payments?access_token=XXXXXXXXXXXXXXXXXXXXXXX");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($DadEnv));
$response = curl_exec($ch);
$response2 = json_decode($response, true);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
curl_close($ch);
if( $err != "" )
{
echo "ERRO >> " . $err;
}else{
if( $httpcode == 201 )
{
echo "id: " . $response2["id"];
echo "<br>";
echo "qr_code: " . $response2["point_of_interaction"]["transaction_data"]["qr_code"];
echo "<br>";
echo "ticket_url: " . $response2["point_of_interaction"]["transaction_data"]["ticket_url"];
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
?>
<img src="data:image/jpg;base64,<?=$response2["point_of_interaction"]["transaction_data"]["qr_code_base64"]?>" />
<?
}else{
echo "ERRO >> " . $response2["message"];
}
}
?>
Por hoje é isto Pessoal! 👋
Continuem Brilhando 🌟
Leia também
API Mágica: notificações Web Push no navegador com PHP
Web Push com a API Mágica em PHP puro: o navegador se inscreve, o seu site envia a notificação e a API conta o clique. Sem Composer e sem biblioteca.
API Mágica: CEP e Pix de graça, sem cartão
Lancei a API Mágica: CEP, QR Code Pix, geradores e mais, de graça. Veja como consultar e gerar com Node.js em poucas linhas.
IndexNow: avisando o Bing e o Yandex mais rápido
Como criar a chave do IndexNow e avisar Bing e Yandex das suas páginas novas com Node.js e PHP: as requisições, os erros reais e as armadilhas.