Facturación con Stripe
Configura precios, checkout idempotente, webhooks, créditos, seguridad del portal y reconciliación.
Sincronizado con el commit
7d452a6del starter.
Crea Prices estables mensuales y anuales para Plus y Max; define STRIPE_PRICE_*, STRIPE_PRIVATE_KEY y STRIPE_WEBHOOK_SECRET. Los Prices CNY son opcionales. Importes y catálogo viven en src/config/billing.ts; los IDs quedan solo en servidor.
Checkout es solo para el owner y exige Idempotency-Key. Se crea intención/orden antes de Stripe: repetir la misma petición tiene un solo efecto y una segunda compra deliberada usa otra clave. Varias suscripciones pueden coexistir y el resolver combina sus entitlements.
Webhooks
Publica /api/pay/notify/stripe y suscribe checkout completado/expirado, alta/cambio/baja de suscripción, invoice pagada/fallida y reembolso/disputa. Se verifica firma, se deduplican eventos, se respeta su tiempo ante desorden y cada beneficio se concede una vez. Renovaciones crean orden y créditos mensuales.
Reembolsos y disputas se señalan para revisión; no se retiran silenciosamente créditos gastados. Usa el comando de reconciliación y la vista admin para estados inciertos.
Portal y pruebas
Configura Stripe Billing Portal y su ID en producción. Desactiva cambios de suscripción en el portal; una configuración insegura falla cerrada.
stripe listen --forward-to localhost:3000/api/pay/notify/stripePrueba duplicados, webhooks tardíos, renovación, fallo, cancelación, reembolso y portal. En producción usa claves live y solo eventos live.
Planes, límites y entitlements
Personaliza capacidades Free, Plus y Max, límites por organización, mapeos Stripe, gracia, suscripciones acumuladas y excepciones de soporte.
Libro de créditos de organización
Comprende créditos compartidos, contabilidad append-only, caducidad, consumo idempotente y reembolsos.