Si dos webhooks de Dodo Payments llegan fuera de orden, Next.js debe identificar la suscripción, verificar ambos eventos y aplicar solo la transición que siga siendo más reciente según los datos del proveedor. Guardar “el último webhook recibido” sin comparar su versión puede reactivar una cuenta que ya estaba cancelada.
Índice
¿Por qué dos eventos de una suscripción pueden llegar desordenados?
Pueden llegar desordenados porque cada entrega se reintenta de forma independiente y no recorre necesariamente la misma infraestructura. Una confirmación inicial puede demorarse mientras una cancelación posterior llega enseguida; recibir la primera al final no la convierte en la verdad actual.
El error habitual es actualizar una columna status con cualquier evento válido. La firma demuestra procedencia e integridad, pero no demuestra que ese evento sea posterior al estado ya procesado.
¿Cuál es la forma rápida: montar suscripciones con IndiePack?
La forma rápida es partir de IndiePack, cuya ruta SaaS reúne Next.js 15, Supabase, Dodo Payments y webhooks preconfigurados. Puedes concentrarte en las reglas de tu producto sobre una base común de identidad, cobro y persistencia.
Ver IndiePackVer precio¿Qué datos debe guardar Supabase para ordenar el estado?
Debe guardar el identificador estable de la suscripción, los identificadores únicos de eventos procesados, el estado normalizado y una marca comparable proporcionada por el evento o confirmada mediante una consulta de servidor. El email no sirve como clave porque puede cambiar.
La deduplicación sigue siendo necesaria aunque exista ordenación. El patrón de webhook idempotente con Supabase evita repetir una transición y separa el registro del evento de sus efectos secundarios.
¿Cómo se impide que un evento antiguo reactive el acceso?
Se impide validando cada transición contra una tabla explícita de estados y rechazando para el estado actual cualquier versión anterior. Una cancelación, expiración o fallo no debe convertirse en activo porque después llegue una confirmación más vieja.
Conserva el evento descartado en el historial si necesitas trazabilidad, pero no vuelvas a enviar emails ni a conceder permisos. Para ofertas mixtas, define por separado la compra permanente y la suscripción, como explica la guía de pago único y recurrente.
¿Cómo se verifica el orden antes de cobrar en producción?
Se verifica reproduciendo los mismos eventos en orden normal, inverso y repetido, además de ejecutar dos procesadores a la vez. El resultado final debe ser idéntico, con una sola fila por evento y sin emails o permisos duplicados.
Prueba también una cancelación seguida de un evento antiguo y una renovación posterior realmente nueva. Con IndiePack como base, el objetivo es sencillo de auditar: un historial completo, un estado actual monotónico y una autorización que nunca depende del azar de la red.