Histórico de mensagens sobre url de notificação em pix

EXIBINDO CONVERSAS RECENTES:

Texto: url de notificação
Canal: pix
Avatar discord do usuario igor_efi

igor_efi

Ver Respostas

Bom dia, @celsoalexandre! Tudo bem?

Sugerimos duas formas de validação para garantir a segurança, mas recomendamos fortemente que você as utilize em conjunto:

Verifique o IP de comunicação:

Restrinja a comunicação ao domínio do webhook cadastrado para aceitar apenas mensagens do IP utilizado pela Efí.
IP utilizado atualmente em nossas comunicações: 34.193.116.226.

Adicione uma hash à URL cadastrada no webhook:

Crie um HMAC (uma identificação própria) que será acrescentado ao final da URL no momento do cadastro do webhook. Essa hash será utilizada para validar a origem da notificação.
Todos os webhooks enviados ao seu servidor terão essa identificação final, e sua aplicação deve validar a presença da mesma.
Exemplo:

URL de notificação original: https://seu_dominio.com.br/webhook
URL com a hash: https://seu_dominio.com.br/webhook?hmac=xyz&ignorar=.
O termo ignorar= serve para tratar a adição do /pix no final da URL.

Avatar discord do usuario palloma_efi

palloma_efi

Ver Respostas

Bom dia @juizmill ! Sim, são ambientes separados. Você pode cadastrar um webhook em homologação e realizar os testes.
A API de Cobranças é separada da API Pix. Na API de Cobranças, você cadastra a URL de Notificação através do atributo notification_url. Já na API Pix, o webhook é atrelado a uma chave Pix, e você pode cadastra-lo uma única vez.

Avatar discord do usuario willianpereira1993_85683

willianpereira1993_85683

Olá bom dia! Percebi que minha url de notificação está com o endereço errado. Como faço para corrigir?

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 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 enriquerene

enriquerene

Ver Respostas

Boa tarde. Estou tendo dificuldade para receber notificações do status da cobrança. Na documentação https://dev.efipay.com.br/docs/api-cobrancas/notificacoes/#recebendo-as-notifica%C3%A7%C3%B5es diz:
"Um POST vai conter apenas uma informação: um token de notificação. Esse token é enviado quando ocorre uma alteração no status da cobrança. Para receber essas notificações, você precisa cadastrar uma URL de notificação na cobrança e prepará-la para ler o token na variável $_POST['notification']."

No meu código eu faço
$token = $_POST['notification']

e recebo este erro na plataforma:
{
"code": 3500010,
"error": "property_does_not_exists",
"error_description": {
"property": "notification",
"message": "A propriedade [notification] informada não existe."
}
}


como resolvo?

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Principal diferença do webhook é que ele se aplica a todos os Pix de uma determinada chave Pix, não é URL de notificação para cada transação. Isso que pode estar confundindo o @alex_684067_87631 .

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Além disso, quando você estiver registrando a webhook URL no endpoint PUT /v2/webhook/:chave, na sua URL você pode acrescentar algum parâmetro para diferenciar a URL de cada cliente, e assim fazer alguma tratativa na sua aplicação. Exemplo:

Obs: Se for aplicar esta regra com um parâmetro na URL, aconselho deixar sempre o final um parâmetro sem valor, como no exemplo acima &tipo=. Que assim, o /pix cairá como parâmetro no final da URL, e você irá tratar a notificação em /webhook.