Histórico de mensagens sobre Erro webhook em pix

EXIBINDO CONVERSAS RECENTES:

Texto: Erro webhook
Canal: pix
Avatar discord do usuario gabriel_efi

gabriel_efi

Ver Respostas

Boa noite, @simiomajstro! Como chegou ao erro de certificado não reconhecido? Está sendo retornado algum erro específico de resposta na rota de cadastro do webhook?

Avatar discord do usuario napunda_

napunda_

Ver Respostas

Boa tarde, na documentação eu encontro os códigos correspondentes ao erro no retorno do webhook no envio dos pix?
Por exemplo o erro de envio abaixo tem esse código de erro AC03. Onde encontro os códigos com seus respectivos motivos?

JSON
// Pix rejeitado
{
"pix": [
{
"endToEndId": "E090893562021030PIf25a7868",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"tipo": "SOLICITACAO",
"status": "NAO_REALIZADO",
"valor": "0.01",
"horario": null,
"infoPagador": "0123456789",
"gnExtras": {
"idEnvio": "123ABC",
"erro": {
"codigo": "AC03",
"origem": "PSP do usuário recebedor",
"motivo": "Número da agência e/ou conta transacional do usuário recebedor inexistente ou inválido"
}
}
}
]
}

Avatar discord do usuario pedrin0x10

pedrin0x10

Ver Respostas

js
const loadInfractions = () => {
if (fs.existsSync(__dirname + '/infracoes.json')) {
return JSON.parse(fs.readFileSync(__dirname + '/infracoes.json', 'utf8'));
}
return [];
};

const saveInfractions = (infractions) => {
fs.writeFileSync(__dirname + '/infracoes.json', JSON.stringify(infractions, null, 2), 'utf8');
};

const getInfracoesMed = async () => {
const token = await fetchToken();

const headers = {
Authorization: Bearer ${token},
};
const URL = https://pix.api.efipay.com.br/v2/gn/infracoes?inicio=2025-03-01T00:00:00Z&fim=${getCurrentDateRFC3339()}&paginacao.itensPorPagina=100;

try {
const response = await axios.get(URL, { headers, httpsAgent });
return response.data;
} catch (error) {
console.log('Error fetching PIX:', error);
throw error;
}
};

let processedInfractions = loadInfractions();

const checkNewInfractions = async () => {
try {
const response = await getcontestacoesmedEFI();
const newInfractions = response.infracoes.filter(
(infraction) => !processedInfractions.some((old) => old.idInfracao === infraction.idInfracao)
);
console.log("Quantidade de MEDs encontrado: "+newInfractions.length)
if (newInfractions.length > 0) {
newInfractions.forEach(async(infraction) => {
console.log("Nova Infração Detectada:");
console.log(JSON.stringify(infraction, null, 2))

//req webhook aqui
});

processedInfractions.push(...newInfractions);
saveInfractions(processedInfractions);
}
} catch (error) {
console.error('Erro ao buscar infrações:', error);
}
};

Avatar discord do usuario andre_94652

andre_94652

@guilherme_efi @jessica_efi eu chamei a url da api https://pix.api.efipay.com.br/v2/webhook/c0515522-4756-463d-aa1d-523bd63498c6 com o json abaixo. {
"webhookUrl": "https://walrus-app-kcenm.ondigitalocean.app/api/v1"
} e estou recebendo a mensagem de erro abaixo. {
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 400"
} Eu criei uma api em c# com a definição de rota abaixo. [HttpPost()]
public async Task ReceiveWebhook([FromBody] PixRecebidoEfi response, CancellationToken cancellationToken = default) O que eu devo fazer para resolver esse problema?

Avatar discord do usuario andre_94652

andre_94652

Ver Respostas

@rubenskuhl eu ainda não fiz a configuração do certificado. A minha url funciona abertamente para ser chamada. Mas quando eu chamo para configurar através da sua api. Aparece a mensagem de erro abaixo: {
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 400"
} Isso ocorre porque?

Avatar discord do usuario andre_94652

andre_94652

Ver Respostas

Olá amigos,

Tudo bem?

Eu estou chamando a url https://pix.api.efipay.com.br/v2/webhook/c0515522-4756-463d-aa1d-523bd63498c6

com o body da requisição contendo o json abaixo

{
"webhookUrl": "https://walrus-app-kcenm.ondigitalocean.app/api/v1"
}

Eu estou recebendo a mensagem de erro abaixo

{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 404"
}

A url do meu webhook é https://walrus-app-kcenm.ondigitalocean.app/api/v1/pix

A seguir segue a codificação da minha rota escrita em c#

[HttpPost("pix")]
public async Task ReceiveWebhook([FromBody] PixRecebidoEfi response, CancellationToken cancellationToken = default)
{
//Código a ser feito

return Ok();
}

Segue a classe da entrada que eu estou esperando

public class PixRecebidoEfi
{
public List Pix { get; set; }
}

public class PixRecebidoEfiResponse
{
public string endToEndId { get; set; }
public string txid { get; set; }
public string chave { get; set; }
public string valor { get; set; }
public string horario { get; set; }
public string infoPagador { get; set; }
}

Se você fizer uma requisição do tipo post a url https://walrus-app-kcenm.ondigitalocean.app/api/v1/pix

com o json abaixo você verá que a url retorna um "200"

{
"pix": [
{
"endToEndId": "1",
"txid": "1",
"chave": "1",
"valor": "1.00",
"horario": "1",
"infoPagador": "1"
}
]
}

O que eu estou fazendo de errado?
O que eu tenho que fazer para fazer funcionar?

Avatar discord do usuario andre_94652

andre_94652

Ver Respostas

Olá amigos,

Tudo bem?

Eu estou chamando a url https://pix.api.efipay.com.br/v2/webhook/c0515522-4756-463d-aa1d-523bd63498c6

com o body da requisição contendo o json abaixo

{
"webhookUrl": "https://walrus-app-kcenm.ondigitalocean.app/api/v1"
}

Eu estou recebendo a mensagem de erro abaixo

{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 404"
}

A url do meu webhook é https://walrus-app-kcenm.ondigitalocean.app/api/v1/pix

A seguinte segue a codificação da minha rota escrita em c#

[HttpPost("pix")]
public async Task ReceiveWebhook([FromBody] PixRecebidoEfi response, CancellationToken cancellationToken = default)
{
//Código a ser feito

return Ok();
}

Segue a classe da entrada que eu estou esperando

public class PixRecebidoEfi
{
public List Pix { get; set; }
}

public class PixRecebidoEfiResponse
{
public string endToEndId { get; set; }
public string txid { get; set; }
public string chave { get; set; }
public string valor { get; set; }
public string horario { get; set; }
public string infoPagador { get; set; }
}

O que eu estou fazendo de errado?
O que eu tenho que fazer para fazer funcionar?

Avatar discord do usuario alessandrodev

alessandrodev

Alguém poderia me auxiliar no cadastro do webhook?
Qualquer parametro que eu passe só recebo essa mensagem:


{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 403"
}

Curl:


curl --location --request PUT 'https://pix-h.api.efipay.com.br/v2/webhook/:chave' \
--header 'x-skip-mtls-checking: false' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhb...' \
--data '{
"webhookUrl": "https://.com/webhook?hmac=TEST"
}
'

Obs: retorna esse mesmo erro até informando x-skip-mtls-checking: true

Meu serviço webhook tem observabilidade então qualquer chamada tenho logs e quando tento realizar o cadastro não tem nenhum registro de chamada ao meu webhook nem que seja de handshake, então aparentemente parece que nem está chamando o meu serviço

Avatar discord do usuario gabrielz_fr

gabrielz_fr

Eu subi para o app engine do backend do site ao google, porém o erro insiste na hora de configurar o webhook. Não sei se é por causa que não relação entre meu certificado e minha chave pública com a chave pública da efi.

Avatar discord do usuario gabrielz_fr

gabrielz_fr

Meu server.ts

const server = fastify({
logger: true,
https: {
cert: fs.readFileSync("certificates/cert.crt"),
key: fs.readFileSync("certificates/cert.key"),
ca: fs.readFileSync("ca.crt"),
minVersion: "TLSv1.2",
},
});

server.register(cors, {
origin: true,
credentials: true,
});

server.register(cookie, {
secret: process.env.SECRET_KEY,
});

server.register(userRoutes);
server.register(addressRoutes);
server.register(orderRoutes);
server.register(webhooksRoutes);

server.get("/", (req, res) => {
res.code(200).send({ message: "Live Seed" });
});

server.post("/webhook/pix", async (req, res) => {
const socket = req.raw.socket as TLSSocket

if (socket.authorized) {
const body = req.body;
const filePath = path.join(__dirname, "data.json");

fs.appendFile(filePath, JSON.stringify(body) + "\n", (err) => {
if (err) {
server.log.error(err);
res.status(500).send();
} else {
res.status(200).send();
}
});
} else {
res.status(401).send();
}
});


server.listen({ port: process.env.PORT || 8080 }, async (err) => {
if (err) {
console.error(err);
process.exit(1);
}

const url = await ngrok.connect(process.env.PORT || 8080);
console.log(Ngrok tunnel opened at: ${url});

console.log(Server is listening on port ${process.env.PORT || 8080});
});

ts

Avatar discord do usuario matheusramos.

matheusramos.

Ver Respostas

Bom dia. Estou com dificuldades em implementar o envio do pix, já mudei do modo homologação para a produção. Porem recebo o seguinte erro "A chave informada não tem webhook cadastrado na conta Efí autenticada", verifiquei em algumas respostas anteriores que se tratava de uma chave valida, criei a chave e o problema persistiu. Consultei os exemplo de sdk do Java, para configurar o webhook mas me sinto perdido como configurar isso, já lí a docs mas ainda não consigo entender. Poderiam me ajudar a como posso fazer essa configuração do webhook e conseguir utilizar o recurso de envio de pix?

Avatar discord do usuario renatoruiz_23276

renatoruiz_23276

Ver Respostas

Bom dia pessoal, estou tentando cadastrar um webhook pelo sdk do Delphi e estou tendo o seguinte erro, os outros endpoints sem ser relacionado a webhook estão funcionando normalmente
imagem enviada na mensagem pelo usuario renatoruiz_23276

Avatar discord do usuario matheusramos.

matheusramos.

Ver Respostas

Bom dia. Estou tendo dificuldade em testar a api pix send no spring boot em homologação, toda vez que envio uma requisição recebo a seguinte mensagem {"erro":"A chave informada não tem webhook cadastrado na conta Efí autenticada"}, para testes em homologação estou utilizando a chave [email protected]

Avatar discord do usuario emersongarrido

emersongarrido

Ver Respostas

const params = {
chave: 'xxxx'
}

const body = {
pix: {
chaves: {
[params.chave]: {
recebimento: {
txidObrigatorio: false,
webhook: {
notificar: {
pixSemTxid: true,
},
},
},
},
},
},
}

const res = await gerencianet.pixConfigWebhook(params, body)


Erro ao atualizar configuração de webhook: {
nome: 'json_invalido',
mensagem: 'Valores ou tipos de campo inválidos',
erros: [
{
chave: 'additionalProperties',
caminho: '.body',
mensagem: 'não são permitidas propriedades adicionais'
}
]
}

Avatar discord do usuario lucianoolegario_57079

lucianoolegario_57079

Ver Respostas

boa noite pessoal agora o meu webhook está dando o seguinte erro

{
"nome": "webhook_invalido",
"mensagem": "A requisição na URL informada falhou com o erro: UNABLE_TO_VERIFY_LEAF_SIGNATURE"
}

Avatar discord do usuario peu3222

peu3222

Ver Respostas

Olá, boa noite!

Não sou um integrador da API da Efipay, só assino um serviço que gera PIX usando a API de vocês.

Tô com um problema ao copiar um link de PIX gerado. Como no código tem um domínio válido, tipo sejaefi.com.br ou br.gov, o WhatsApp acaba interpretando isso como um link e adiciona https:// automaticamente. Acho que é isso que tá bugando.

O que acontece?
Quando o https:// é adicionado, o código do PIX não fica válido. Mas, se eu remover, ele funciona normal e dá pra pagar de boa.

Testes que fiz:

Mandei o código sem https:// pra dois contatos, cada um com um celular diferente:

iPhone
Samsung
O meu é um Redmi Note 9
O erro rolou em todos.
Tentei pagar em dois bancos:

Nubank (primeira tentativa)
PicPay (mas quando testei, o boleto já tava pago, aí recebi um erro falando que o PIX não existia. Imagino que isso aconteça porque vocês desativam o código pra evitar pagamento ou webhook duplicado).
Outras coisas que percebi:

O erro só acontece no celular. No notebook, funciona normal.
No celular, se eu clicar no código, ele ainda abre uma URL por conta do domínio válido, mas na hora de copiar pelo próprio WhatsApp ou manualmente, ele não vem com o https://.
Li as regras do server antes de mandar essa mensagem e sei que só vale comentar coisas úteis. Mesmo sendo novo na programação , acho que isso é um problema válido e queria compartilhar, consultei o chat gpt para descobir que o whatssap interpreta os domínios como válidos, como aqui é o topico de pix achei que seria aqui que devo mandar

Segue os prints dos testes que fiz em aparelhos diferentes.

Avatar discord do usuario lucianoolegario_57079

lucianoolegario_57079

Ver Respostas

mas por algum motivo é retornado o seguinte erro

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

Avatar discord do usuario schinnick

schinnick

Ver Respostas

Boa tarde pessoal, estou recebendo constantemente o erro "socket hang up". Utilizei o link das collections do Postman ali na documentação, gerei um token e botei como Bearer na aba Authentication, além do body correto com meu link do Webhook e dei skip no checking da mTLS. Não recebo nada além de "socket hang up". O que devo fazer?

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @rogerio_itu2044! Tudo bem?
Gostaria de registrar que, ao deixar o x-skip-mtls-checking como true, o Efí continuará enviando o certificado TLS na requisição, mas seu servidor irá ignorá-lo.

Nesse caso, você não precisa criar uma nova rota, pois a notificação será sempre enviada para /webhook, e o hmac será um query param. O parâmetro ignorar pode realmente ser desconsiderado. Nesse cenrário é importante verificar se o HMAC recebido na notificação em sua aplicação, é o mesmo que foi cadastrado no webhook no Efí. Além disso, recomendamos realizar uma validação por IP, já que nossa API utiliza exclusivamente o IP 34.193.116.226. Essas práticas garantem que é realmente o Efí quem está enviando a notificação. Sem o mTLS configurado, não ocorre o "handshake" de segurança.

Segue um exemplo em Node.js:

js
app.post('/webhook', (req, res) => {
const expectedHmac = "xyz"; // Valor esperado do HMAC que você usar no cadastro do webhook (cadastre um diferente deste)
const authorizedIp = "34.193.116.226"; // IP utilizado pelo API do Efí Bank

const requestIp = req.ip;
const requestHmac = req.query.hmac;

// Validação do IP
if (requestIp !== authorizedIp) {
res.status(401).json({ error: "Solicitação de webhook não autorizado" });
return;
}

// Validação do HMAC
if (!requestHmac || requestHmac !== expectedHmac) {
res.status(401).json({ error: "Solicitação de webhook não autorizado" });
return;
}

// Processar o webhook conforme sua regra de negócio
});