Gérer les downgrades, upgrades et prorata dans vos paiements SaaS
Maîtrisez la gestion des changements d'abonnement dans votre SaaS. Ce tutoriel technique couvre le calcul du prorata, la gestion des crédits, les webhooks, la migration de plan et la communication client automatisée pour réduire le churn et optimiser vos revenus.
12 min de lecture

Sommaire
La flexibilité, clé de la rétention SaaS
Dans l'univers compétitif du SaaS B2B, la capacité à s'adapter aux besoins évolutifs de vos clients n'est pas un luxe, mais une nécessité. La gestion des abonnements, et plus spécifiquement les changements de plan (upgrades et downgrades), est au cœur de cette flexibilité. Une gestion maladroite peut entraîner une frustration client, des erreurs de facturation et, in fine, du churn. Des études montrent que près de 15% du churn involontaire dans les SaaS est dû à des problèmes de facturation, incluant une gestion opaque des changements de plan.
À l'inverse, une expérience fluide et transparente lors d'un upgrade ou d'un downgrade renforce la confiance et peut directement impacter la Lifetime Value (LTV) de vos clients. Il s'agit de leur permettre de monter en puissance lorsqu'ils grandissent, ou d'ajuster leur voilure en période de consolidation, sans friction administrative.
Ce tutoriel technique vous guidera pas à pas dans la mise en place d'un système robuste pour gérer les changements d'abonnement, le calcul du prorata, et la communication associée. Nous verrons comment une passerelle de paiement moderne comme Bridge Pay, conçue pour les modèles complexes, peut vous simplifier la vie.
Prérequis : Les fondations de votre système d'abonnement
Avant de plonger dans la logique des changements de plan, assurez-vous que les bases de votre système sont solides. Une bonne préparation vous évitera bien des maux de tête. Voici les éléments indispensables :
- Plusieurs plans tarifaires définis : Vous devez avoir au moins deux plans (ex: « Basique » et « Pro ») avec des fonctionnalités et des prix distincts, stockés dans votre base de données avec des identifiants uniques (ex:
plan_basic_monthly,plan_pro_monthly). - Une intégration de paiement fonctionnelle : Votre application doit déjà être connectée à une passerelle de paiement capable de gérer les paiements récurrents. C'est ici qu'une solution comme Bridge Pay entre en jeu, offrant des API claires pour la gestion des abonnements.
- Un modèle de données pour les abonnements : Dans votre base de données, une table
subscriptionsest essentielle. Elle doit contenir au minimum :id,user_id,plan_id(une clé étrangère vers vos plans),status(ex: active, canceled, past_due),current_period_start, etcurrent_period_end. - Accès à votre environnement de développement : Vous aurez besoin d'un accès backend pour implémenter la logique, et des clés API de votre passerelle de paiement pour l'environnement de test.
Étapes détaillées de la gestion des changements de plan
Étape 1 : Cartographier le parcours utilisateur et les déclencheurs
La première étape est de définir où et comment un utilisateur peut changer de plan. Généralement, cela se passe dans une section « Facturation » ou « Abonnement » de son compte. L'interface doit clairement présenter les plans disponibles, mettre en évidence le plan actuel, et proposer des boutons d'action comme « Passer au plan Pro » ou « Revenir au plan Basique ».
Lorsqu'un utilisateur clique sur l'un de ces boutons, deux scénarios se présentent :
- Upgrade : Passage à un plan supérieur (plus cher). L'accès aux nouvelles fonctionnalités est généralement immédiat. La facturation doit être ajustée au prorata pour la période en cours.
- Downgrade : Passage à un plan inférieur (moins cher). Le changement prend effet à la fin de la période de facturation en cours pour éviter de devoir rembourser l'utilisateur. Il continuera à bénéficier des fonctionnalités de son plan supérieur jusqu'à la date de renouvellement.
Le déclencheur technique est un appel de votre frontend vers votre backend (ex: POST /api/subscription/change). Cet appel doit contenir l'ID de l'utilisateur et le nouvel ID de plan souhaité. Votre backend prend alors le relais pour orchestrer les étapes suivantes.
Étape 2 : La logique du Prorata - Le cœur du réacteur
Le calcul au prorata est essentiel pour une facturation juste. Il s'agit de ne facturer que pour le temps d'utilisation réel de chaque plan. Voici comment l'aborder :
Pour un Upgrade :
- Calculez le coût non utilisé de l'ancien plan : (Prix Ancien Plan / Jours dans la période) * Jours restants.
- Calculez le coût à utiliser du nouveau plan : (Prix Nouveau Plan / Jours dans la période) * Jours restants.
- La différence est le montant à facturer immédiatement : Coût nouveau plan - Coût ancien plan.
Exemple concret : Un utilisateur passe du plan « Pro » (99€/mois) au plan « Entreprise » (249€/mois) le 15 d'un mois de 30 jours. Il lui reste 15 jours d'abonnement.
- Crédit pour le temps non utilisé sur « Pro » : (99€ / 30) * 15 = 49,50€
- Coût pour le temps à utiliser sur « Entreprise » : (249€ / 30) * 15 = 124,50€
- Montant de l'upgrade à facturer immédiatement : 124,50€ - 49,50€ = 75€
Les passerelles de paiement comme Bridge Pay simplifient énormément cela. Au lieu de faire ces calculs vous-même, vous pouvez simplement appeler leur API de mise à jour d'abonnement en spécifiant le comportement de prorata souhaité. Bridge Pay calcule automatiquement le montant, génère une facture et tente le paiement.
Étape 3 : Gérer les Downgrades et les crédits
La gestion des downgrades est différente car on ne facture rien immédiatement. La bonne pratique est de créditer l'utilisateur pour une utilisation future.
La logique est la suivante :
- Le changement est enregistré mais ne prend effet qu'à la fin de la période de facturation en cours. Dans votre base de données, vous pouvez utiliser un champ comme
scheduled_plan_changepour stocker le plan vers lequel l'utilisateur va migrer. - L'utilisateur conserve l'accès à son plan supérieur jusqu'à la date de renouvellement.
- À la date de renouvellement, l'abonnement bascule sur le nouveau plan (moins cher) et se renouvelle à ce tarif.
Certains modèles d'affaires choisissent d'appliquer un crédit au prorata pour le temps non utilisé sur le plan supérieur, qui sera déduit de la prochaine facture. Cela peut être un geste commercial apprécié. Bridge Pay gère ce cas en appliquant automatiquement un crédit sur le compte du client, qui sera utilisé pour ses prochaines factures.
Exemple : Un utilisateur downgrade du plan « Pro » (99€) au « Starter » (49€) à mi-parcours. Il a payé 99€ pour le mois. Au lieu de le facturer 49€ le mois suivant, vous pouvez lui créditer les 49,50€ non utilisés, et sa prochaine facture sera de 0€, avec le solde reporté.
Étape 4 : Mettre à jour l'abonnement via l'API de paiement
Une fois la logique définie, il faut la traduire en appel API. C'est l'action qui modifie l'abonnement directement chez votre prestataire de paiement. Avec une passerelle comme Bridge Pay, cela ressemble à un appel sur un endpoint PATCH /v1/subscriptions/{subscription_id}.
Le corps de la requête pour un upgrade immédiat contiendrait :
{
"plan_id": "plan_enterprise_monthly",
"proration_behavior": "create_prorations"
}
L'option proration_behavior: create_prorations indique à Bridge Pay de calculer le prorata et de facturer immédiatement la différence. Si le paiement échoue (ex: carte expirée), l'API renverra une erreur, et l'abonnement ne sera pas modifié. Vous pouvez alors inviter l'utilisateur à mettre à jour ses informations de paiement.
Pour un downgrade à la fin de la période, la requête serait :
{
"plan_id": "plan_starter_monthly",
"proration_behavior": "none",
"cancel_at_period_end": false // Important : on ne veut pas annuler, juste changer de plan
}
En interne, dans votre système, vous planifiez la mise à jour effective. Toutefois, les meilleures passerelles permettent de planifier ce changement directement via l'API.
Étape 5 : Utiliser les Webhooks pour synchroniser votre base de données
Ne vous fiez jamais uniquement à la réponse de l'appel API initial. Les opérations de paiement sont asynchrones. La source de vérité doit être les événements envoyés par votre passerelle de paiement via des webhooks.
Configurez un endpoint sur votre serveur (ex: POST /webhooks/bridgepay) pour écouter les événements. L'événement clé est subscription.updated. Lorsqu'un changement de plan est effectif, Bridge Pay enverra un événement à cette URL avec toutes les informations de l'abonnement mis à jour.
Votre logique de webhook doit :
- Vérifier la signature du webhook : C'est une étape de sécurité cruciale pour s'assurer que la requête provient bien de Bridge Pay et non d'un acteur malveillant.
- Analyser le payload de l'événement : L'objet JSON contiendra le nouvel
plan_id, lestatus, et les nouvelles datescurrent_period_startetcurrent_period_end. - Mettre à jour votre base de données locale : Modifiez l'enregistrement de l'abonnement de l'utilisateur pour refléter ces nouvelles informations. C'est cette mise à jour qui débloquera/restreindra les fonctionnalités dans votre application.
Étape 6 : Automatiser la communication client
Un utilisateur ne devrait jamais être surpris par une facture. Une communication claire et automatisée est la dernière pièce du puzzle pour une expérience réussie. Déclenchez des emails transactionnels à chaque étape clé :
- Confirmation de l'upgrade : Envoyez un email immédiatement après la réussite du paiement au prorata. « Félicitations, votre passage au plan Entreprise est effectif. Voici votre facture de 75€ pour la période en cours. Vous pouvez dès maintenant accéder à [fonctionnalité X]. »
- Confirmation de la demande de downgrade : "Nous avons bien pris en compte votre demande de passage au plan Starter. Ce changement sera effectif à la fin de votre période de facturation actuelle, le [date de fin de période]. D'ici là, vous conservez l'accès à toutes les fonctionnalités du plan Pro."
- Notification du changement effectif (downgrade) : À la date de renouvellement, envoyez un rappel : « Votre abonnement est passé au plan Starter, comme demandé. Votre prochaine facture le [date] sera de 49€. »
Ces emails réduisent la charge de travail de votre support client de manière significative et renforcent la perception d'un service professionnel et transparent.
Exemple de Code : Gestionnaire de Webhook
Voici un exemple simplifié en Python (avec un framework type Flask) de ce à quoi pourrait ressembler un gestionnaire de webhook pour l'événement subscription.updated.
import json
import stripe # En supposant une API similaire à Stripe, comme celle de Bridge Pay
from flask import Flask, request, abort
app = Flask(__name__)
# Récupérez ce secret depuis votre dashboard Bridge Pay
WEBHOOK_SECRET = 'whsec_your_secret_key'
@app.route('/webhooks/bridgepay', methods=['POST'])
def bridgepay_webhook():
payload = request.data
sig_header = request.headers.get('BridgePay-Signature')
try:
event = stripe.Webhook.construct_event(
payload, sig_header, WEBHOOK_SECRET
)
except ValueError as e:
# Payload invalide
return 'Invalid payload', 400
except stripe.error.SignatureVerificationError as e:
# Signature invalide
return 'Invalid signature', 400
# Gérer l'événement
if event['type'] == 'subscription.updated':
subscription_data = event['data']['object']
handle_subscription_updated(subscription_data)
# ... gérer d'autres types d'événements
return 'Success', 200
def handle_subscription_updated(subscription):
user_id = get_user_id_from_subscription(subscription) # Logique à implémenter
new_plan_id = subscription['plan']['id']
new_status = subscription['status']
new_period_end = subscription['current_period_end']
# Mettre à jour la base de données
db.update_subscription(
user_id=user_id,
plan_id=new_plan_id,
status=new_status,
period_end=new_period_end
)
# Logique pour provisionner/dé-provisionner l'accès aux fonctionnalités
update_user_permissions(user_id, new_plan_id)
print(f"Subscription {subscription['id']} for user {user_id} was updated to plan {new_plan_id}.")
Vérification : Comment s'assurer que tout fonctionne ?
Une fois votre implémentation terminée, il est crucial de la tester en conditions réelles (sur votre environnement de test). Voici une checklist de vérification :
- Test d'upgrade : Simulez un upgrade. Vérifiez dans le dashboard de Bridge Pay qu'une facture au prorata a été générée et payée. Assurez-vous que l'utilisateur a immédiatement accès aux nouvelles fonctionnalités.
- Test de downgrade : Simulez un downgrade. Le changement ne doit pas être immédiat. Vérifiez que votre base de données a enregistré un changement planifié. À la date de renouvellement simulée, assurez-vous que le plan change, que l'accès aux fonctionnalités est restreint et que la nouvelle facture est au bon montant.
- Vérification des emails : Confirmez que tous les emails transactionnels (confirmation, notification) sont envoyés au bon moment et avec les bonnes informations.
- Logs de Webhook : Surveillez les logs dans votre dashboard Bridge Pay pour vous assurer que les événements sont bien envoyés et que votre serveur renvoie un code de succès (200).
Problèmes courants et solutions
Même avec une bonne préparation, des problèmes peuvent survenir. Voici les plus courants :
- Problème : Les webhooks ne sont pas reçus par mon serveur.
Solution : Vérifiez l'URL du webhook dans votre dashboard Bridge Pay. Assurez-vous qu'elle est publiquement accessible. Inspectez les logs d'erreurs de votre pare-feu ou de votre serveur. Bridge Pay fournit généralement un journal des tentatives de webhook qui vous indiquera le code d'erreur HTTP reçu (ex: 500, 404). - Problème : Le calcul au prorata semble incorrect.
Solution : Si vous faites le calcul manuellement, attention aux fuseaux horaires et à l'arrondi des jours/secondes. C'est une source d'erreurs fréquente. C'est pourquoi il est fortement recommandé de s'appuyer sur la fonctionnalité de prorata intégrée à votre passerelle de paiement. Si le montant calculé par Bridge Pay vous semble incorrect, vérifiez que les prix de vos plans sont correctement configurés dans le dashboard. - Problème : L'utilisateur a changé de plan, mais son accès aux fonctionnalités n'a pas été mis à jour.
Solution : C'est presque toujours un problème dans la logique de votre gestionnaire de webhook. Assurez-vous que vous identifiez correctement l'utilisateur et que votre fonctionupdate_user_permissionsest bien appelée après la mise à jour de la base de données. Ajoutez des logs pour tracer le flux de données depuis la réception du webhook jusqu'à la mise à jour des permissions.
Conclusion
La gestion des upgrades et downgrades est une composante fondamentale de l'expérience client en SaaS. En la traitant avec rigueur technique et transparence, vous transformez un potentiel point de friction en un levier de rétention et de confiance. L'utilisation d'une passerelle de paiement moderne et flexible comme Bridge Pay est un atout majeur, car elle abstrait une grande partie de la complexité des calculs et des flux de paiement.
En suivant les étapes de ce guide (modélisation, calcul, communication et vérification) vous bâtirez un système résilient qui accompagnera la croissance de vos clients et la vôtre.
Prêt à simplifier la gestion de vos abonnements et à vous concentrer sur votre produit ? Créez votre compte Bridge Pay dès aujourd'hui et découvrez une API conçue pour la flexibilité du SaaS.


