PHP - Pagamentos via PIX com o PayMee
Olá Gente
A integração com o PIX da PayMee não é muito conhecida, porem, muito simples.
Gerando Credenciais
Antes de começarmos, precisamos obter as credenciais para acessar a API da PayMee.
Para a Paymee, é necessário solicitar ao suporte da PayMee os dados abaixo:
- x-api-key
- x-api-token
Estes dados, serão enviados no Header das requisições:

Criando Pagamento
Para criar um pagamento, via PIX, no PayMee, precisamos fazer um POST para:
https://api.paymee.com.br/v1.1/checkout/transparent
No Header, precisamos enviar as credenciais:
- x-api-key
- x-api-token
E precisamos enviar um Json similar ao Json abaixo:
{
"currency": "BRL",
"amount": "100.12",
"referenceCode": "ABC123",
"maxAge": "120",
"paymentMethod": "PIX",
"callbackURL": "https://webhook.site/74605848-c104-461b-a94f-4febba6c1bc1",
"observation": "",
"shopper": {
"email": "[email protected]",
"name": "Paloma Macetko",
"document": {
"type": "CPF",
"number": "61032595418"
},
"phone": {
"type": "MOBILE",
"number": "4799886699"
},
"bankDetails": {
"branch": "0001",
"account": "00011-0"
}
}
}Onde precisamos apenas:
- amount: Definir o valor
- callbackURL: O link no qual o PayMee ira avisar que o PIX foi Pago
- referenceCode: Um código para identificar o pagamento
- shopper.name: Nome do Cliente
- shopper.email: E-mail do Cliente
- shopper.document.number: CPF do Cliente
A resposta da API, em caso de sucesso, será um "HttpCode 200" com um Json, onde, precisamos apenas dos dados dentro de "response.instructions.qrCode":
{
"url": "https://api.paymee.com.br/resources/payments/pix/qrcode/XXXXXXXXX",
"base64": "XXXXXXXX",
"plain": "XXXXXXXXXXX"
}Aqui temos:
- plain: A chave do PIX para o pagamento no estilo "Copia e Cola"
- url: Link da Imagem do QRCode
- base64: O QRCode em Base64
Identificando Pagamento
Para receber notificações dos pagamentos, acesse sua conta PayMee e navegue até:
https://www2.paymee.com.br/merchants/API
Preencha a url de seu WebHook no campo "URL de notificação" e clique em "Salvar Alterações":

Em cada movimentação, o PayMee ira enviar um Json para esta Url com o conteúdo similar ao conteúdo abaixo:
{
"newStatus": "PAID",
"saleToken": "XXXXXXX",
"referenceCode": "ABC123",
"currency": "BRL",
"amount": 100.12,
"date": "2023-11-28 11:14:01"
}Neste Json iremos extrair os campos abaixo:
- referenceCode: Código da compra que informamos na criação do pagamento
- newStatus: Status do Pagamento
Quando "newStatus" receber "PAID" indica que o pagamento foi APROVADO 💚:
{
"newStatus": "PAID"
}Integrando com PHP
Agora que já aprendemos como funciona, vamos fazer isto tudo funcionar via PHP?
Segue exemplo de código:
<?
$DadEnv = array();
$DadEnv["currency"] = "BRL";
$DadEnv["amount"] = 123.45;
$DadEnv["referenceCode"] = "ABC129";
$DadEnv["maxAge"] = 120;
$DadEnv["paymentMethod"] = "PIX";
$DadEnv["callbackURL"] = "https://webhook.site/74605848-c104-461b-a94f-4febba6c1bc1";
$DadEnv["shopper"]["name"] = "Paloma Macetko";
$DadEnv["shopper"]["email"] = "[email protected]";
$DadEnv["shopper"]["document"]["type"] = "CPF";
$DadEnv["shopper"]["document"]["number"] = "61032595418";
$DadEnv["shopper"]["phone"]["type"] = "MOBILE";
$DadEnv["shopper"]["phone"]["number"] = "4799886699";
$DadEnv["shopper"]["bankDetails"]["branch"] = "0001";
$DadEnv["shopper"]["bankDetails"]["account"] = "00011-0";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.paymee.com.br/v1.1/checkout/transparent");
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));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"accept: application/json",
"content-type: application/json",
"x-api-key: XXXXXXXXXXXXXXXXXXXXXXXX",
"x-api-token: XXXXXXXXXXXXXXXXXXXXXXXX"
));
$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 == 200 )
{
echo "id: " . $response2["response"]["id"];
echo "<br>";
echo "plain: " . $response2["response"]["instructions"]["qrCode"]["plain"];
echo "<br>";
echo "url: " . $response2["response"]["instructions"]["qrCode"]["url"];
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
?>
<img src="data:image/jpg;base64,<?=$response2["response"]["instructions"]["qrCode"]["base64"]?>" />
<?
}else{
echo "ERRO >> " . $response2["main_error_message"];
}
}
?>
Hora de dar tchau por hoje pessoal! 😊
Nos encontramos em breve. 👋
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.