Skip to main content

GitHub Repository

Código fuente completo y guía de configuración
Consulta el Dodo Payments Supabase Subscription Starter: un boilerplate completo de Next.js, Supabase y Dodo Payments con autenticación, pagos y webhooks.

Configuración Rápida

1. Requisitos previos

Necesitas:
  • Una cuenta de Supabase con un proyecto creado
  • Una clave de API de Dodo Payments disponible en Developer → API Keys, en el dashboard

2. Autenticación y vinculación

Encuentra la referencia de tu proyecto en Project Settings, en el dashboard de Supabase.

3. Configuración de la base de datos

  1. Ve al dashboard de Supabase.
  2. Abre el SQL Editor.
  3. Copia todo el contenido de schema.sql y ejecútalo.

4. Configuración de los secretos iniciales

Supabase proporciona automáticamente SUPABASE_URL y SUPABASE_SERVICE_ROLE_KEY durante la ejecución.
Configurarás DODO_PAYMENTS_WEBHOOK_KEY después del despliegue, una vez que tengas la URL de tu webhook.

5. Despliegue

La función ya está configurada en functions/webhook/index.ts.

6. Obtén la URL de tu webhook

La URL de tu webhook es:

7. Registra el webhook en el dashboard de Dodo Payments

  1. Ve a Developer → Webhooks en el dashboard de Dodo Payments.
  2. Haz clic en Add endpoint.
  3. Introduce la URL de tu webhook.
  4. Selecciona estos eventos: subscription.active, subscription.cancelled, subscription.renewed.
  5. Haz clic en Create endpoint y copia el signing secret.

8. Configura la clave del webhook y vuelve a desplegar

Qué hace

El handler del webhook procesa eventos de suscripción y los almacena en Supabase PostgreSQL:
  • subscription.active — Crea o actualiza los registros del cliente y la suscripción
  • subscription.cancelled — Marca la suscripción como cancelada
  • subscription.renewed — Actualiza la próxima fecha de facturación

Funciones principales

  • Verificación de firmas — Usa el SDK de Dodo Payments para verificar la autenticidad del webhook
  • Idempotencia — Usa el header webhook-id para evitar el procesamiento duplicado
  • Registro de eventos — Almacena todos los eventos en la tabla webhook_events para mantener un registro de auditoría
  • Gestión de errores — Registra los fallos y marca los eventos para reintento
Este ejemplo gestiona tres eventos principales de suscripción con un conjunto mínimo de campos. Puedes ampliarlo para admitir tipos de eventos y campos adicionales según tus necesidades.

Archivos de configuración

Esquema de la base de datos

Tablas creadas:
  • customers — Correo electrónico, nombre e ID de cliente de Dodo Payments
  • subscriptions — Estado, importe y próxima fecha de facturación, vinculados a los clientes
  • webhook_events — Registro de eventos con el ID del webhook para la idempotencia

Código de implementación

Cómo funciona

La Edge Function basada en Deno:
  1. Verifica la firma — Usa el SDK de Dodo Payments para la verificación HMAC-SHA256
  2. Comprueba si hay duplicados — Usa el header webhook-id para evitar el procesamiento duplicado
  3. Registra el evento — Almacena los datos sin procesar del webhook en la tabla webhook_events
  4. Procesa las actualizaciones — Crea o actualiza clientes y suscripciones mediante el cliente de Supabase
  5. Gestiona los errores — Registra los fallos y marca los eventos para reintento

Pruebas

Desarrollo local:
La flag --no-verify-jwt es obligatoria porque los webhooks no incluyen tokens JWT. La seguridad se proporciona mediante la verificación de la firma del webhook.
Ver registros:
También puedes hacerlo en el dashboard de Supabase, en Edge Functions → webhook → Logs. Configura el dashboard de Dodo Payments:
  1. Ve a Developer → Webhooks.
  2. Añade un endpoint con tu URL de Supabase.
  3. Selecciona subscription.active, subscription.cancelled y subscription.renewed.

Problemas comunes

Recursos

Última modificación el 26 de septiembre de 2026