Histórico

EXIBINDO CONVERSAS RECENTES:

Texto: url POST
# devs
Avatar discord do usuario igor_efi

igor_efi

Ver RespostasVer no Discord

Perfeito, neste caso então você conseguiria cadastrar uma URL para receber as notificações.
As nossas notificações são realizadas através do metodo POST.

# bolix
Avatar discord do usuario deson00

deson00

Ver RespostasVer no Discord

Percebi um erro no meu teste que no postman eu estava enviando por get usando x-www-form-urlencoded no entanto ao mudar para POST fucionou a notificação no postman

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

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.

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver no Discord

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 '
';
}
}

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver RespostasVer no Discord

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 '
';
}
}

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver no Discord

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.

# devs
Avatar discord do usuario igor_efi

igor_efi

Ver RespostasVer no Discord

Bom dia, @martins.dev! Tudo bem?
Neste caso, a URL que você informou no cadastro esta retornando o status HTTP 301 quando é realizado uma requisição de teste para ela.
O status HTTP 301 é um código de status de resposta HTTP usado para redirecionamento permanente de URL

# pix
Avatar discord do usuario enriquerene

enriquerene

Ver RespostasVer no Discord

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?

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

Bom dia, @alexsiqueira0615! Conversamos no chat privado, ele se encerra após 24 horas sem atividade.
Para testar uma requisição para sua URL utilizando o Postman, você cria uma requisição semelhante à seguinte:

imagem enviada na mensagem pelo usuario guilherme_efi

# pix
Avatar discord do usuario felipoantonoff

felipoantonoff

Ver RespostasVer no Discord

Olá, isso mesmo em alguns casos dando TCP connection reset by peer no retorno do Curl chamada Post para a API do Pix
Mesmos clientes com problema depois se tentam algumas vezes conseguem criar o Pix normalmente
Isso parece ser alguma instabilidade talvez no lado da API Pix

# freelancer
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver RespostasVer no Discord

Olá, @leandro535! Bom dia!

Para receber notificações de carnê ou boleto, você define a URL no momento da criação da cobrança. Então, sempre que houver uma mudança de status da cobrança, a Efí dispara um POST para essa URL. Essa notificação vem com um token específico, que permanece o mesmo durante todo o ciclo de alterações da transação.

Para simplificar, você pode usar este exemplo da SDK de PHP para consultar o token da notificação e obter os detalhes atualizados da cobrança. [Aqui está o link](https://github.com/efipay/sdk-php-apis-efi/blob/main/examples/charges/notification/getNotification.php).

Além disso, você pode conferir mais detalhes na documentação técnica [aqui](https://dev.efipay.com.br/docs/api-cobrancas/notificacoes#recebendo-as-notifica%C3%A7%C3%B5es).

Temos também um vídeo sobre o assunto [neste link](https://youtu.be/wKAgmXpWQQk?list=PLRqvcUTH2VsWufBmzOdTVeLEOTGrPNoiu).

imagem enviada na mensagem pelo usuario guilherme_efi