Application starter

Facturation Stripe

Configurez prix, checkout idempotent, webhooks, crédits, sécurité du portail et réconciliation.

Synchronisé avec le commit 7d452a6 du starter.

Créez des Prices Stripe stables mensuels/annuels pour Plus et Max, puis définissez STRIPE_PRICE_*, STRIPE_PRIVATE_KEY et STRIPE_WEBHOOK_SECRET. Les Prices CNY sont optionnels. Montants et catalogue sont dans src/config/billing.ts ; les IDs restent serveur.

Le checkout est réservé à l’owner et exige Idempotency-Key. Une intention/commande précède Stripe : rejouer la même requête produit un seul effet ; un second achat volontaire utilise une nouvelle clé. Plusieurs abonnements peuvent coexister et le resolver combine leurs entitlements.

Webhooks

Exposez /api/pay/notify/stripe et abonnez checkout terminé/expiré, abonnement créé/modifié/supprimé, facture payée/échouée et remboursement/litige. Le handler vérifie la signature, déduplique, respecte le temps d’événement et accorde chaque bénéfice une fois. Un renouvellement crée commande et crédits mensuels.

Remboursements et litiges sont signalés pour revue ; les crédits consommés ne sont pas repris silencieusement. Utilisez la commande de réconciliation et la vue admin pour les états incertains.

Portail et tests

Créez la configuration Billing Portal et son ID en production. Les changements d’abonnement dans le portail doivent être désactivés ; sinon le starter échoue fermé.

stripe listen --forward-to localhost:3000/api/pay/notify/stripe

Testez doublons, webhooks retardés, renouvellement, échec, annulation, remboursement et portail. En production, clés live et événements live uniquement.

Facturation Stripe · Sushi SaaS