Aller au contenu
stripeabonnementsaasfacturation

Abonnement Stripe avec engagement : payer au mois, s'engager pour un an

Vous voulez facturer au mois un client qui s'engage pour un an. Stripe sait le faire, mais aucune case « engagement » ne vous attend dans le tableau de bord : l'engagement se construit avec une planification d'abonnement, et la vraie question arrive au moment où le client veut partir avant la fin. Voici comment je le monte, et les trois décisions à prendre avant d'écrire une ligne de code.

Ce que Stripe appelle un engagement

Pour Stripe, un abonnement mensuel se renouvelle chaque mois jusqu'à ce qu'on l'annule. Rien, dans l'objet abonnement lui-même, ne dit « ce client s'est engagé pour douze mois ». L'outil prévu pour ça s'appelle la planification d'abonnement (subscription schedule) : une suite de phases, chacune avec sa durée et son prix, que Stripe applique toute seule au fil du temps.

Un engagement d'un an payé au mois, c'est donc une planification à une phase :

  • le prix mensuel ;
  • une durée de 12 mois (duration avec interval=month et interval_count=12) ;
  • et un comportement de fin (end_behavior) qui dit ce qui se passe au bout.

La documentation de Stripe donne exactement cet exemple : une planification qui démarre tout de suite, facture le même prix pendant douze mois, puis libère l'abonnement.

Au bout des douze mois : reconduire ou arrêter

C'est la première décision, et elle se règle avec end_behavior :

  • release : la planification s'arrête, l'abonnement continue au mois, sans engagement. C'est le choix le plus courant : le client s'est engagé un an, puis il reste libre.
  • cancel : l'abonnement s'arrête à la fin de la dernière phase. Stripe pose alors lui-même la date d'annulation sur l'abonnement, quand il entre dans sa dernière phase.

Et si vous voulez un nouvel engagement d'un an à chaque échéance, c'est une nouvelle phase à ajouter avant la fin de la précédente, pas un réglage.

Le client veut partir au quatrième mois

C'est là que l'engagement se joue vraiment, et c'est une décision commerciale avant d'être technique. Trois réponses possibles :

  1. Il paie jusqu'au bout. L'accès reste ouvert, les prélèvements continuent jusqu'à la fin de la phase, et l'abonnement s'arrête ensuite. Techniquement, c'est une planification qui passe de release à cancel.
  2. Il paie une indemnité de sortie. Une facture ponctuelle du montant prévu par vos conditions, puis une annulation immédiate.
  3. Vous le laissez partir. Annulation à la fin du mois en cours, et l'engagement n'était qu'un argument commercial.

Aucune de ces réponses n'est meilleure que les autres. Ce qui fait perdre de l'argent, c'est de ne pas en avoir choisi une : le jour où la demande arrive, quelqu'un annule à la main dans le tableau de bord, et Stripe applique son comportement par défaut, qui est une annulation immédiate.

Le piège du portail client

Le portail client de Stripe laisse vos clients changer de carte, télécharger leurs factures et, si vous l'activez, annuler leur abonnement eux-mêmes. Avec un engagement, deux points sont à vérifier avant la mise en ligne :

  • La documentation de Stripe indique qu'un client ne peut ni modifier ni annuler dans le portail un abonnement associé à une modification prévue par une planification. Vérifiez ce que voit votre client, dans votre configuration, avant qu'il vous écrive pour demander pourquoi le bouton a disparu.
  • Une annulation faite dans le tableau de bord ou par l'API est immédiate par défaut. L'engagement est votre règle : Stripe ne la fait pas respecter à votre place. Votre application doit apprendre chaque changement par les webhooks (customer.subscription.updated, customer.subscription.deleted), jamais le supposer.

Si vos clients sont des particuliers

Depuis le 1er juin 2023, l'article L215-1-1 du code de la consommation impose, pour un contrat conclu en ligne, une fonctionnalité gratuite qui permet au consommateur de notifier sa résiliation en ligne. Vous devez lui confirmer la réception et l'informer de la date à laquelle le contrat prend fin.

Autrement dit : l'engagement décide de la date de fin, il n'autorise pas à cacher le bouton. Si le portail n'affiche plus l'annulation, prévoyez votre propre parcours de résiliation, qui enregistre la demande et répond avec la date. La rédaction de vos conditions se valide avec votre juriste, pas avec moi.

Ce que je monte, concrètement

  • une planification par client engagé, créée au moment de la souscription ;
  • la règle de sortie anticipée écrite noir sur blanc, et appliquée par le code, pas à la main ;
  • une page « mon abonnement » qui affiche la date de fin d'engagement ;
  • des webhooks qui tiennent l'état à jour, même quand quelqu'un agit dans le tableau de bord ;
  • et, pour les particuliers, un parcours de résiliation qui enregistre la demande et confirme la date.

C'est la partie du travail que je préfère faire avant le premier client plutôt qu'après le premier litige. Si vous préparez votre tunnel de paiement, voici comment je m'y prends pour brancher des abonnements Stripe dans votre application, du premier prélèvement jusqu'au jour où il échoue.

Paiements & abonnements

Dites-moi ce que vous vendez

Décrivez vos formules en quelques lignes : ce qu'elles ouvrent, à qui vous facturez, et où vous en êtes aujourd'hui. Je réponds sous 24 h, avec un avis franc sur ce qui peut se régler dans le tableau de bord Stripe sans écrire une ligne de code.