si tu app permite hacer pagos, hay una pregunta que tenés que responder:
¿cómo evitás cobrar 2 veces el mismo pago?
imaginá esta situación.
1) tu backend envía un cobro a Stripe.
2) Stripe procesa el pago.
3) pero por un timeout, tu backend nunca recibe la respuesta.
desde tu lado parece que el pago falló. entonces decidís reintentarlo.
¿y si el primer intento sí había funcionado?
si reintentás la operación, podrías cobrar 2 veces.
para resolver ese problema existe la idempotencia.
idempotencia es diseñar una operación para que, aunque la misma acción se repita, sus efectos ocurran una sola vez.
¿cómo funciona?
1) tu backend genera una clave única para ese pago, por ejemplo pago_123.
2) envía el cobro a Stripe junto con esa clave.
3) Stripe procesa el pago y guarda el resultado asociado a pago_123.
4) si tu backend reintenta el cobro con pago_123, Stripe reconoce que ese pago ya fue procesado y devuelve el resultado del primer intento.
de esta forma, te asegurás de cobrar una sola vez al usuario.