Guides · 3 min
Ajouter une offre
Un nouveau palier, de bout en bout : ligne en base, entrée de configuration, et le droit d'accès qui en découle.
Les prix vivent dans la base pour que la section tarifs et la route de paiement lisent le même nombre. La configuration porte la correspondance.
Ajoutez la ligne
Dans supabase/schema.sql, étendez le seed en bas de fichier. Le
on conflict do update garde le fichier rejouable, donc changer un prix est une
modification suivie d'un db:push, pas une requête manuelle.
insert into public.plans (id, name, price_cents, currency, sort) values
('team', 'Team', 49900, 'eur', 3)
on conflict (id) do update set
name = excluded.name,
price_cents = excluded.price_cents,
sort = excluded.sort;Ajoutez-la à la configuration
plans: [
{ id: "starter", name: "Starter", priceId: "price_..." },
{ id: "pro", name: "Pro", priceId: "price_..." },
{ id: "team", name: "Team", priceId: "price_..." },
]PlanId s'élargit tout seul, donc chaque fonction qui prend un identifiant
d'offre accepte désormais "team" et refuse toujours les fautes de frappe.
Nommez-la dans les deux langues
Ajoutez le texte marketing à messages/en.json et messages/fr.json. Le name
en base est le libellé sur le reçu ; l'argumentaire a sa place dans les
messages.
Décidez ce qu'elle débloque
C'est la partie qu'on oublie. Une offre qui coûte plus cher doit faire plus, et ce droit se vérifie côté serveur, dans le webhook et sur chaque page qui en dépend. Jamais dans le navigateur.
Les prix changent
Ne modifiez jamais un prix d'une façon qui réécrit l'histoire.
orders.amount_cents stocke ce qui a réellement été débité, donc un ancien reçu
continue d'afficher ce que le client a payé même après que vous avez doublé le
tarif. Si vous vous surprenez à calculer le total d'une ancienne commande depuis
la ligne d'offre actuelle, arrêtez : c'est ainsi qu'un reçu devient faux.
Un abonnement plutôt qu'un paiement unique
Passez la session en mode: "subscription" et passez un vrai price Stripe au
lieu de price_data. Puis traitez trois événements de plus :
| Événement | À faire |
|---|---|
customer.subscription.created | Écrire la ligne, poser la fin de période |
customer.subscription.updated | Changement d'offre, pause, ou renouvellement échoué |
customer.subscription.deleted | Révoquer à la fin de période, pas tout de suite |
La table subscriptions est déjà dans le schéma pour cela.
Une erreur ou un manque sur cette page ? Dites-le-nous.