Guia de webhooks
Configurar API principal webhooks de saída (X-Webhook-Signature) para eventos de licença e plataforma.
Para webhooks de pagamento pago, use Webhooks para comerciantes pagos. Para assinatura de redirecionamento de espelho, consulte Espelho SDK.
Visão geral
Webhooks permitem que você receba notificações em tempo real quando ocorrem eventos em sua conta LicenseChain por meio do
API principal (POST /v1/webhooks). Uso de eventos comerciais pagos
Webhooks para comerciantes pagos;
Redirecionamentos de espelho usam o Espelho SDK fluxo de assinatura.
O que você aprenderá
Instalação e configuração
- Criação e gerenciamento de webhooks
- Configurando terminais de webhook
- Configurando assinaturas de eventos
- Segurança e assinaturas de webhook
Implementação
- Recebendo eventos de webhook
- Verificando assinaturas de webhook
- Lidando com falhas de webhook
- Testando endpoints de webhook
Criando webhooks
1. Crie um ponto final de webhook
Primeiro, crie um endpoint HTTP em seu aplicativo que possa receber solicitações POST do LicenseChain.
// Express.js Example
app.post('/webhooks/licensechain', async (req, res) => {'{'}
const signature = req.headers['x-webhook-signature'];
const timestamp = req.headers['x-webhook-timestamp'];
const payload = JSON.stringify(req.body);
// Verify signature (see Security section)
if (!verifySignature(payload, signature, timestamp, webhookSecret)) {'{'}
return res.status(401).send('Invalid signature');
{'}'}
// Process webhook event
const event = req.body;
console.log('Received event:', event.type, event.data);
res.status(200).send('OK');
{'}'});
2. Registre seu webhook
Use a API LicenseChain para registrar seu endpoint de webhook. Você precisará fornecer o URL e especificar quais eventos deseja receber.
POST /v1/webhooks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{'{'}
"url": "https://your-app.com/webhooks/licensechain",
"events": ["license.created", "license.updated", "license.revoked"],
"secret": "optional-custom-secret"
{'}'}
Observação: Se você não fornecer um segredo, o LicenseChain irá gerar um automaticamente para você. Certifique-se de armazenar esse segredo com segurança, pois você precisará dele para verificar as assinaturas do webhook.
3. Eventos disponíveis
LicenseChain oferece suporte aos seguintes eventos de webhook:
Segurança e verificação de assinatura
Assinaturas de webhook
Todas as solicitações de webhook incluem uma assinatura no X-Webhook-Signature cabeçalho.
A assinatura é HMAC-SHA256 do corpo da solicitação bruta usando seu segredo do webhook. Sempre verifique usando comparação em tempo constante (por exemplo crypto.timingSafeEqual) para evitar ataques de temporização. O valor do cabeçalho pode ser hexadecimal bruto ou sha256= seguido por hexadecimal; despir o sha256= prefixo antes de comparar buffers hexadecimais para que os comprimentos correspondam.
// Node.js Example (constant-time, supports sha256= prefix)
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {'{'}
if (!payload || !signature || !secret) return false;
const expected = crypto.createHmac('sha256', secret).update(payload).digest('hex');
const received = String(signature).startsWith('sha256=') ? String(signature).slice(7) : String(signature);
const a = Buffer.from(expected, 'hex');
const b = Buffer.from(received, 'hex');
if (a.length !== b.length) return false;
return crypto.timingSafeEqual(a, b);
{'}'}
// In your webhook handler (use raw body for payload)
const signature = req.headers['x-webhook-signature'];
const payload = req.rawBody || JSON.stringify(req.body);
if (!verifySignature(payload, signature, webhookSecret)) {'{'}
return res.status(401).send('Invalid signature');
{'}'}
Solicitar cabeçalhos
LicenseChain inclui os seguintes cabeçalhos com cada solicitação de webhook:
X-Webhook-Signature
Assinatura HMAC-SHA256 do corpo da solicitação
X-Webhook-Timestamp
Carimbo de data/hora Unix de quando o webhook foi enviado
Content-Type
Sempre application/json
Estrutura do Evento Webhook
Todos os eventos de webhook seguem uma estrutura consistente:
{'{'}
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "license.created",
"data": {'{'}
"id": "license-id",
"licenseKey": "ABC123...",
"userId": "user-id",
"productId": "product-id",
"status": "active",
"expiresAt": "2024-12-31T23:59:59Z",
"createdAt": "2024-01-01T00:00:00Z"
{'}'},
"timestamp": "2024-01-01T00:00:00Z",
"signature": "hmac-sha256-signature"
{'}'}
Gerenciando webhooks
Listar todos os webhooks
GET /v1/webhooks?page=1&limit=10 Authorization: Bearer YOUR_API_KEY
Obtenha detalhes do webhook
GET /v1/webhooks/:id Authorization: Bearer YOUR_API_KEY
Atualizar webhook
PUT /v1/webhooks/:id
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{'{'}
"url": "https://new-url.com/webhooks",
"events": ["license.created", "license.updated"]
{'}'}
Excluir webhook
DELETE /v1/webhooks/:id Authorization: Bearer YOUR_API_KEY
Testando webhooks
Enviar webhook de teste
Você pode testar seu endpoint de webhook sem esperar que um evento real ocorra:
POST /v1/webhooks/:id/test Authorization: Bearer YOUR_API_KEY
Isso enviará um evento de teste para o URL do seu webhook com uma carga útil de amostra. Use isso para verificar se seu endpoint está funcionando corretamente.
Ver registros de webhook
Verifique o status de entrega e a resposta para cada evento de webhook:
GET /v1/webhooks/:id/logs?page=1&limit=10 Authorization: Bearer YOUR_API_KEY
Os logs incluem o código de status HTTP, o corpo da resposta e se a entrega foi bem-sucedida.
Melhores Práticas
✅ Sempre verifique as assinaturas
Nunca processe eventos de webhook sem verificar a assinatura. Isso garante que a solicitação seja do LicenseChain e não tenha sido adulterada.
✅ Responda rapidamente
Seu endpoint do webhook deve responder em 5 segundos. Para operações de longa duração, reconheça o webhook imediatamente e processe de forma assíncrona.
✅ Lidar com idempotência
Use o ID do evento para evitar o processamento do mesmo evento várias vezes. Armazene IDs de eventos processados e verifique antes do processamento.
✅ Utilize HTTPS
Sempre use HTTPS para seus endpoints de webhook para garantir que os dados sejam criptografados em trânsito.
✅ Monitore registros de webhook
Verifique regularmente os logs do webhook para identificar e corrigir problemas de entrega. Configure alertas para entregas com falha.
Solução de problemas
Webhook não está recebendo eventos
- • Verifique se o URL do seu webhook pode ser acessado pela Internet
- • Verifique se o seu endpoint retorna um código de status 2xx
- • Certifique-se de que os eventos que você assinou estão realmente ocorrendo
- • Revise os registros do webhook em busca de erros de entrega
Falha na verificação de assinatura
- • Verifique se você está usando o segredo do webhook correto
- • Verifique se você está assinando o corpo exato da solicitação (como string JSON)
- • Verifique se você está usando o algoritmo HMAC-SHA256
- • Certifique-se de que os cabeçalhos estejam sendo lidos corretamente (diferencia maiúsculas de minúsculas)
Erros de tempo limite
- • Otimize seu gerenciador de webhook para responder rapidamente
- • Mova o processamento pesado para trabalhos em segundo plano
- • Retorne 200 OK imediatamente e processe de forma assíncrona
Próximas etapas
Agora que você entende os webhooks, você pode: