Cómo Funcionan los Webhooks

Los webhooks son HTTP callbacks. Cuando ocurre un evento en un sistema proveedor, envía un HTTP POST a una URL que registraste.

1. Registras: "Envía eventos a https://myapp.com/webhooks/stripe"
2. Evento ocurre en Stripe: payment_intent.succeeded
3. Stripe envía POST a https://myapp.com/webhooks/stripe
4. Tu servidor procesa el evento y retorna 200 OK
5. Stripe marca el webhook como entregado

Qué Probar

1. Validación de Payload

Verifica que tu receptor parsee correctamente el payload del webhook.

2. Verificación de Firma

Prueba que tu receptor rechace payloads sin firmar o alterados.

3. Idempotencia

El mismo webhook puede entregarse múltiples veces. Tu receptor debe manejar duplicados.

4. Manejo de Errores y Retry

Prueba qué sucede cuando tu receptor falla: retorna 500, procesamiento interno falla, receptor caído.

5. Orden de Eventos

Los webhooks pueden llegar fuera de orden.

Herramientas de Testing

webhook.site

Servicio gratuito que te da una URL única para recibir e inspeccionar webhooks.

ngrok

Expone tu servidor local de desarrollo a internet:

ngrok http 3000
# Retorna: https://abc123.ngrok.io

Servidor de Test Local

const express = require('express');
const app = express();
const receivedWebhooks = [];

app.post('/webhooks/:provider', express.json(), (req, res) => {
  receivedWebhooks.push({
    provider: req.params.provider,
    headers: req.headers,
    body: req.body,
    timestamp: new Date(),
  });
  res.status(200).json({ received: true });
});

app.listen(3000);

Ejercicio: Laboratorio de Testing de Webhooks

Tarea 1: Construir un Receptor de Webhooks

Crea un receptor Express.js que valide firmas HMAC-SHA256, parsee payloads, deduplique eventos y retorne códigos de estado apropiados.

Tarea 2: Testing de Firmas

Verifica: firma válida aceptada, firma faltante rechazada con 401, firma inválida rechazada, payload alterado rechazado.

Tarea 3: Testing de Idempotencia

Envía el mismo evento 5 veces. Verifica que solo se cree 1 registro.

Tarea 4: Testing de Escenarios de Error

Payload JSON malformado → 400. Falla de base de datos simulada → receiver encola para retry. Eventos fuera de orden → sistema los maneja.

Tarea 5: Load Testing de Webhooks

Envía 100 webhooks en rápida sucesión. Verifica todos recibidos y procesados sin corrupción.

Entregables

  1. Código del receptor con verificación de firma.
  2. Suite de tests cubriendo todos los escenarios.
  3. Reporte documentando resultados.