← Todos los artículos

Guías

Stripe y cobros SaaS, hechos para aguantar

El demo de Stripe es una llamada a Checkout. El cobro en producción son webhooks en los que confías, prorrateo que concilia, dunning que recupera tarjetas, entitlements que controlan funciones y disputas que de verdad puedes ganar. Estas son las guías de esa segunda parte.

El cobro es el único subsistema donde un bug es un reembolso, un correo enojado o un contracargo — así que merece más rigor que el resto de tu app. El error que más veo es tratar a Stripe como la fuente de verdad de tu producto. No lo es: Stripe es dueño del movimiento de dinero, tu base de datos es dueña de quién-puede-hacer-qué. El webhook es el puente entre ambos, por eso verificar su firma y procesarlo de forma idempotente es la base sobre la que se apoya todo lo demás.

De ahí en adelante casi todo es ser honesto con el estado. Una suscripción no está "activa" porque Checkout regresó — está activa porque un webhook verificado lo dijo. Un cliente conserva el acceso hasta que termina el periodo que pagó, no en el segundo en que falla una tarjeta. El cobro por uso solo funciona si tu medidor es la autoridad y a Stripe se le avisa, no se le pregunta. Acierta en esos acuerdos y las piezas avanzadas — payouts de Connect, medición + Metronome, control de cuotas, reglas de Radar — se vuelven variaciones del mismo patrón disciplinado.

Las guías

Preguntas frecuentes

¿Cómo sincronizo las suscripciones de Stripe con mi base de datos?
Trata a Stripe como la autoridad del cobro y a tu base de datos como la autoridad del acceso, conectadas por webhooks verificados. En cada evento (checkout.session.completed, customer.subscription.updated, invoice.paid/failed) haces upsert del plan y el estado en tus propias tablas, de forma idempotente por id de evento. Tu app lee el acceso desde tus tablas — nunca llamando a Stripe en el request.
¿Por qué verificar la firma del webhook no es negociable?
Tu endpoint de webhook es una URL pública que otorga acceso pagado. Sin verificar el header Stripe-Signature, cualquiera que la encuentre puede hacer POST de un evento falso de "suscripción activa" y desbloquear tu producto gratis. Verifica la firma y luego haz el handler idempotente para que los reintentos de Stripe no apliquen dos veces.
Stripe, Paddle o Lemon Squeezy — ¿cuál necesito?
Stripe te da el mayor control y las comisiones más bajas, pero te deja a ti el IVA y los impuestos. Paddle y Lemon Squeezy actúan como merchant of record y manejan el impuesto global por una comisión más alta. Si vendes en todo el mundo y no quieres cargar con el cumplimiento fiscal, un MoR vale el porcentaje; si quieres control y tu situación fiscal es simple, gana Stripe.