Skip to main content

Visão Geral

Webhooks permitem que você receba notificações em tempo real sobre eventos importantes na sua conta Eyo Wallet, como pagamentos confirmados, saques processados e mudanças de status.

Configurar Webhook

Configure o webhook na criação de uma API Key ou atualize o webhook da API Key principal:

Eventos Enviados

A Eyo Wallet envia webhooks para os seguintes eventos:

Pagamento Aprovado (payment.approved)

Quando um pagamento PIX é confirmado e aprovado:

Pagamento Expirado (payment.expired)

Quando um pagamento expira sem ser pago:

Pagamento Reembolsado (payment.refunded)

Quando um pagamento é reembolsado:

Saque Processado (withdrawal.completed)

Quando um saque é processado com sucesso:

Saque Falhou (withdrawal.failed)

Quando um saque falha:

Headers Enviados

A Eyo Wallet envia os seguintes headers em cada requisição de webhook:

Segurança e Verificação de Assinatura

IMPORTANTE: Sempre verifique a assinatura do webhook antes de processar qualquer evento. Isso protege seu sistema contra requisições forjadas.
Cada webhook é assinado usando HMAC-SHA256 com sua API Key como secret. Você DEVE verificar a assinatura para garantir que o webhook é autêntico e vem da Eyo Wallet.

Como Funciona a Assinatura

  1. A Eyo Wallet cria uma assinatura HMAC-SHA256 do payload JSON usando sua API Key
  2. A assinatura é enviada no header X-Webhook-Signature no formato sha256=...
  3. Você deve recriar a assinatura usando o mesmo método e comparar com a recebida
  4. Se as assinaturas corresponderem, o webhook é autêntico

Processar Webhooks

Seu endpoint de webhook deve:
  1. Verificar a assinatura: Validar que a requisição vem da Eyo Wallet usando HMAC-SHA256
  2. Validar o timestamp (opcional): Prevenir ataques de replay verificando se o timestamp não é muito antigo
  3. Processar o evento: Executar a lógica necessária baseada no tipo de evento
  4. Retornar 200: Responder com status HTTP 200 para confirmar recebimento

Boas Práticas de Segurança

NUNCA processe webhooks sem verificar a assinatura! Qualquer pessoa que descobrir sua URL de webhook pode enviar requisições falsas. A única proteção é a verificação da assinatura HMAC-SHA256.
Verificação de Assinatura: Sempre verifique a assinatura usando sua API Key antes de processar qualquer evento. Isso garante que o webhook realmente vem da Eyo Wallet.
Validação de Timestamp: Valide o timestamp para prevenir replay attacks. Rejeite webhooks com timestamp muito antigo (recomendado: máximo 5 minutos).
Comparação Segura: Use funções de comparação segura (timing-safe) para comparar assinaturas e prevenir timing attacks:
  • Node.js: crypto.timingSafeEqual()
  • Python: hmac.compare_digest()
  • PHP: hash_equals()
Armazenamento Seguro: Nunca exponha sua API Key no código. Use variáveis de ambiente ou serviços de gerenciamento de secrets.

Boas Práticas de Implementação

Idempotência: Seu webhook deve ser idempotente. O mesmo evento pode ser enviado múltiplas vezes em caso de retentativas. Use IDs únicos para evitar processamento duplicado.
Processamento Assíncrono: Processe eventos de forma assíncrona para responder rapidamente ao servidor. Retorne 200 imediatamente e processe o evento em background.
Logging: Registre todos os eventos recebidos (incluindo tentativas de webhooks inválidos) para auditoria e debugging. Isso ajuda a identificar tentativas de ataque.
Timeout: Configure timeout adequado no seu servidor. A Eyo Wallet espera resposta em até 10 segundos antes de considerar como falha.
Tratamento de Erros: Sempre retorne status HTTP 200 mesmo em caso de erro interno. Isso evita retentativas desnecessárias. Logue os erros internamente para investigação.
Se seu webhook não responder com 200 dentro de 10 segundos, a Eyo Wallet tentará reenviar o evento usando backoff exponencial (até 5 tentativas). Certifique-se de que seu endpoint está sempre disponível e responde rapidamente.

Testar Webhooks Localmente

Para testar webhooks localmente durante desenvolvimento, você pode usar ferramentas como:
  • ngrok: Expõe seu servidor local para a internet (ngrok http 3000)
  • localtunnel: Alternativa ao ngrok (lt --port 3000)
  • webhook.site: Serviço temporário para receber webhooks (útil para ver a estrutura)

Testando a Verificação de Assinatura

Para testar se sua verificação de assinatura está funcionando corretamente, você pode criar um script de teste:

Troubleshooting

Webhook retorna 401 (Invalid signature)

  • Verifique se está usando a API Key correta (a mesma usada para configurar o webhook)
  • Certifique-se de que o payload está sendo serializado exatamente como recebido (sem alterar ordem de chaves ou espaços)
  • Verifique se está comparando a assinatura completa incluindo o prefixo sha256=

Webhook retorna 400 (Invalid timestamp)

  • Verifique se o relógio do servidor está sincronizado
  • Ajuste o maxAgeSeconds se necessário (padrão recomendado: 300 segundos = 5 minutos)

Webhook não está sendo recebido

  • Verifique se a URL está acessível publicamente (não localhost)
  • Verifique logs do servidor para erros
  • Confirme que o endpoint retorna status 200
  • Verifique se há firewall bloqueando requisições da Eyo Wallet
Consulte a seção API Keys para mais informações sobre como configurar webhooks nas suas API Keys.