Documentación
docs

Pagos y suscripciones

Cómo funcionan los pagos en Shipabase: checkout de Stripe, portal de cliente, sincronización por webhooks y cómo personalizar el comportamiento.

El ciclo de vida de una suscripción

  1. El usuario elige un plan en la página de precios (los planes vienen de las tablas products y prices, sincronizadas desde Stripe)
  2. Shipabase crea una sesión de Stripe Checkout y redirige al usuario
  3. Al completar el pago, Stripe dispara los webhooks (checkout.session.completed, customer.subscription.created…)
  4. El handler de /api/webhooks actualiza las tablas de Supabase
  5. requireAccess() ya deja pasar al usuario a las páginas premium

Todo el estado vive en Stripe; Supabase es una réplica de lectura que tus páginas consultan sin latencia.

Portal de cliente

Los usuarios gestionan su suscripción (cambiar plan, actualizar tarjeta, cancelar) desde el Stripe Customer Portal, sin que tengas que construir esa UI. El botón de la página de facturación crea la sesión del portal y redirige.

Períodos de prueba

Los trials se configuran por precio en el Stripe Dashboard (al crear el producto). El checkout aplica el trial automáticamente y el estado trialing cuenta como acceso activo.

Personalizar el comportamiento

Edita utils/stripe/server.ts para ajustar:

  • Parámetros de la sesión de checkout (métodos de pago, impuestos, códigos promocionales…)
  • Cálculo de períodos de prueba
  • URLs de éxito y cancelación
  • Configuración del portal de cliente
// utils/stripe/server.ts — ejemplo: permitir códigos promocionales
const session = await stripe.checkout.sessions.create({
  // ...parámetros existentes
  allow_promotion_codes: true
});

Probar pagos en desarrollo

Con npm run stripe:listen corriendo, usa las tarjetas de prueba de Stripe:

Tarjeta Resultado
4242 4242 4242 4242 Pago exitoso
4000 0000 0000 0002 Pago rechazado
4000 0000 0000 3220 Requiere 3D Secure

Cualquier fecha futura y CVC de 3 dígitos funcionan.

Siguiente paso

Publica contenido con el módulo de contenido y SEO.