ABONNEMENTS SAAS B2B
Prérequis
- Grille tarifaire validée (mensuel / annuel, paliers, devises)
- Stripe Billing activé et Products créés en mode test
- Règles métier d’accès (feature flags, seats, rôles admin client)
- Webhooks configurés pour `customer.subscription.*` et `invoice.paid`
Un SaaS B2B facture rarement comme un panier e-commerce : paliers annuels, essai 14 jours, facturation au siège ou upgrade mid-cycle. Stripe Billing structure Products, Prices récurrents et Subscriptions — votre application doit réagir aux webhooks pour ouvrir ou fermer l’accès. Vous allez cadrer le modèle produit et la recette des scénarios d’abonnement.
Modéliser Products et Prices B2B
Un Product Stripe = votre offre (ex. « Plan Pro »). Les Prices portent le montant, l’intervalle (`month`, `year`) et la devise. Séparez paliers Starter / Pro / Enterprise en Products distincts.
Pour la facturation au siège, utilisez `quantity` sur la Subscription ou Stripe Billing metered selon votre modèle. Documentez si le seat est facturé au prorata lors d’un ajout mid-cycle.
Les essais gratuits se configurent via `trial_period_days` ou un coupon 100 % limité dans le temps. Le PO valide la date de première facturation affichée au client.
Parcours souscription et Customer
Réutilisez un Customer Stripe par compte client B2B (`metadata.account_id`). Checkout en mode subscription crée Customer + Subscription en une passe si besoin.
Stockez `stripe_customer_id` et `stripe_subscription_id` dans votre base tenants. C’est la clé de voûte pour upgrades, factures et support.
Proposez une page « Gérer mon abonnement » via Customer Portal (fiche dédiée) plutôt que de réimplémenter annulation et changement de carte.
Webhooks cycle de vie abonnement
`customer.subscription.updated` : changement de palier, fin d’essai, passage past_due. Mettez à jour les droits applicatifs et notifiez le CS si paiement en échec.
`invoice.paid` : confirme la période payée ; utile pour renouvellement annuel et export comptable.
`customer.subscription.deleted` : révoquez l’accès avec période de grâce configurable selon le contrat B2B.
Erreurs fréquentes
Modifier le montant d’un Price au lieu d’en créer un nouveau : historique de facturation incohérent.
Activer l’accès SaaS sur `subscription.created` sans attendre le premier paiement.
Oublier le prorata lors d’un upgrade : litige client sur la première facture.
Multi-devises sans Price par devise : conversion approximative côté Stripe.
Pas de gestion `past_due` : accès maintenu alors que Stripe retente en vain.
Ce qu’il faut retenir
Product + Price récurrent + Subscription = modèle Stripe Billing B2B.
Customer et Subscription IDs dans votre base tenants.
Webhooks `invoice.paid` et `subscription.updated` pilotent l’accès produit.
Customer Portal pour self-service ; Prices immuables pour l’historique tarifaire.
FAQ
Fixez `quantity` sur la Subscription et mettez à jour via API quand un admin invite un utilisateur. Alternative : usage metered si la consommation varie chaque mois.
Oui, via Invoice Stripe envoyée au client ou Subscription avec `collection_method: send_invoice`. Checkout reste le chemin standard pour self-service.
Utilisez la carte test qui échoue au débit récurrent documentée par Stripe. Vous pouvez aussi avancer l’horloge test du Dashboard pour simuler la fin de période. Vérifiez que votre webhook `invoice.payment_failed` met bien à jour les droits applicatifs.