Histórico de mensagens sobre url em pix

EXIBINDO CONVERSAS RECENTES:

Texto: url
Canal: pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Compreendo, @alissonmaciel_32335. Sempre é bom receber feedback.
Acredito que esta dificuldade esteja relacionada às regras estabelecidas pelo Banco Central que devem ser seguidas na API Pix, especialmente com relação à configuração do mTLS e à adição do /pix no final da URL.
No entanto, uma vez configurado corretamente, têm-se o benefício da notificação instantânea e da segurança.

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

@rian2965, atualmente não está sendo listado mesmo os registros de notificações no painel da aplicação. Neste caso, sugiro verificar nos logs do seu servidor HTTP.
Você registrou uma webhhok URL no endpoint PUT /v2/webhook/:chave?

Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

E na minha requisição pra criar o webhook, ainda estou recebendo essa mensagem de erro:
string(102) "{"nome":"webhook_invalido","mensagem":"A requisição na URL informada falhou com o erro: ECONNRESET"}"

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Ok, no $body insira o ?ignorar=
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php?ignorar="
}';

E no arquivo "/webhook.php" inseira o exemplo de código abaixo:

php

function resposta($status, $mensagem, $dados)
{
$resposta['status'] = $status;
$resposta['mensagem'] = $mensagem;
$resposta['dados'] = $dados;
$json_resposta = '
' . json_encode($resposta, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '
';

header("HTTP/1.1 " . $status);
echo $json_resposta;
}

function salvar($dados)
{
// Crie um arquivo .;json para salvar as informações
$nomeArquivo = './dados.json';
$dadosGravados = json_decode(file_get_contents($nomeArquivo), true);
$arquivo = fopen($nomeArquivo, 'w');

// Incrementa as informações enviadas com o que já havia gravado
array_push($dadosGravados, $dados);

if (fwrite($arquivo, json_encode($dadosGravados))) {
resposta(200, "Requisição realizada com sucesso!", $dados);
} else {
resposta(300, "Falha ao salvar os dados da requisição.", $dados);
}

fclose($arquivo);
}

function requisicao($metodo, $body, $parametros)
{
switch ($metodo) {
case 'POST':
salvar($body);
break;
case 'GET':
resposta(200, "Requisição realizada com sucesso!", $body);
break;
}
}

// Obtém o método HTTP, body e parâmetros da requisição
$metodo = $_SERVER['REQUEST_METHOD'];
$parametros = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$body = json_decode(file_get_contents('php://input'), true);

try {
requisicao($metodo, $body, $parametros);
} catch (Exception $e) {
resposta(400, $e->getMessage(), $e);
}

A fim de teste, neste exemplo está salvando o json recebido em um arquivo dados.json. Então na mesma raiz crie-o com permissão de leitura e escrita. E escreva dentro do arquivo dados.json assim: [] para iniciar o json. Então simule um pagamento para receber a notificação.
Depois dos testes, pode manipular o json e gravar em um banco de dados.

Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver Respostas

string(102) "{"nome":"webhook_invalido","mensagem":"A requisição na URL informada falhou com o erro: ECONNRESET"}"

Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Meu Webhook: public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Basic ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $this->config['client_id'], $this->config['client_secret'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver Respostas

Estou executando este método:
public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Bearer ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

A ideia é esta mesmo, @alissonmaciel_32335. Você irá utilizar este endpoint PUT/v2/webhook/:chave para associar sua URL de notificação a sua chave Pix. E então as cobranças Pix que tiverem um txid e sua chave Pix, nós iremos enviar a notificação para a URL registrada. Essa configuração pode ser feita uma única vez.

Pontuando que para registrar sua URL de notificação, é importante que seu servidor tenha algumas configurações para atender a comunicação com mTLS para segurança da sua aplicação. Você encontra mais detalhes em nossa documentação e nos vídeos a seguir: https://dev.gerencianet.com.br/docs/api-pix-endpoints#webhooks
https://youtu.be/hdyUHzNwVLY?list=PLRqvcUTH2VsWufBmzOdTVeLEOTGrPNoiu
https://youtu.be/XB9bcZFTV3M?list=PLRqvcUTH2VsWufBmzOdTVeLEOTGrPNoiu

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Essa chamada você só precisa fazer uma vez para sua chave Pix, e não a cada cobrança.
E na URL falta o "?ignorar=" no final, pois a URL é depois sufixada com /pix.

Avatar discord do usuario guilherme_efi

guilherme_efi

Oi, @alissonmaciel_32335. Bom dia!
Você precisa enviar o certificado em todas as requisições, não apenas na autenticação.
Adicione o código com o caminho do certificado.

php
CURLOPT_SSLCERT => $certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",

Avatar discord do usuario rubenskuhl

rubenskuhl

Mas se quiser spoiler do que você vai ver, é uma requisição POST feita para a URL do webhook sem apresentar o certificado, seguida de uma com o certificado, na hora em que você ativa.
E depois, quando vem o Pix, eles fazem POST em URL+"/pix" com um array de objetos Pix.

Avatar discord do usuario yasmin_efi

yasmin_efi

Lembrando que a notificação ela vai para sua URL com o /pix ao final

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Um detalhe que você precisa conferir, é se você registrar a URL assim http://urldosite.com.br/notifications.php, ao acionar o webhook, será acrescentado um /pix na URL. Portanto, deve-se ser tratado a adição do /pix na URL.

Para solucionar isso, cadastre seu webhook URL com a query param ?ignorar=. Assim, quando o webhook for acionado, o /pix será tratado como um parâmetro e você receberá o JSON no arquivo notifications.php, conforme a seguinte URL: http://urldosite.com.b/notifications.php?ignorar=/pix.

Avatar discord do usuario geisonderrico

geisonderrico

Ver Respostas

A questão que estou fazendo é que para nós a própria API não está fazendo requisição no WebHook após ser pago o PIX. Olhando dentro da plataforma da EFI, é possível ver nas requisições que são feitas que nenhum método POST para o WebHook é realizado após ter sido pago o PIX. A URL do WebHook está funcionando, pois quando eu faço requisições GET por exemplo, aparece na plataforma da EFI.

Avatar discord do usuario geisonderrico

geisonderrico

Ver Respostas

Sim, foi vinculado a chave ao URL do WebHook

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

A URL do atendedor é a que você cadastrou mais "/pix" no final ? Se cadastra exemplo.com.br, a Efí vai chamar exemplo.com.br/pix

Avatar discord do usuario ksevendev

ksevendev

Ver Respostas

Vinculou a chave ao url webhook?

Avatar discord do usuario buenolitz

buenolitz

Ver Respostas

@jessica_efi Traz o mesmo erro "{'nome': 'webhook_invalido', 'mensagem': 'A requisição na URL informada falhou com o erro: ERR_TLS_CERT_ALTNAME_INVALID'}"

Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Bom dia @buenolitz ! Ao cadastrar o webhook, é retornado a mesma url que você cadastrou (o mesmo body enviado):

{
"webhookUrl": "https://exemplo-pix/webhook"
}
O que está retornando pra você?

Avatar discord do usuario buenolitz

buenolitz

Ver Respostas

Boa noite, a URL do webhook no servidor flask tem que retornar algo ? Não estou conseguindo fazer o cadastro de webhook