Pular para o conteúdo
PHP

PHP - Pagamentos via PIX com o MercadoPago

Atualizado em
Capa do artigo: 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:

Digite seu e-mail, telefone ou usuário do Mercado Pagomercadopago.com.br

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