# Fonctionnement des abonnements Gérez les paiements récurrents et le cycle de vie des abonnements. Les abonnements permettent aux clients d’effectuer des paiements récurrents pour accéder à un produit ou à un service. Lorsque vous créez un abonnement, Stripe génère automatiquement des factures, tente l’encaissement des paiements et gère l’état de l’abonnement tout au long de son cycle de vie. Un abonnement passe par un ensemble d’états prévisibles, de la création à l’annulation. Contrairement aux paiements ponctuels, les abonnements nécessitent d’enregistrer les informations du client et du moyen de paiement pour les cycles de facturation futurs. Stripe gère la logique de nouvelle tentative de paiement, la relance et les transitions d’état. ## Le cycle de vie d’un abonnement Chacune des phases suivantes du cycle de vie de l’abonnement correspond à un changement d’état sur l’[objet Subscription](https://docs.stripe.com/api/subscriptions/object.md). Comprendre ces états vous permet de savoir quand fournir un accès, informer les clients et gérer les erreurs. Vous pouvez utiliser des [événements de webhook](https://docs.stripe.com/billing/subscriptions/webhooks.md#state-changes) pour surveiller et gérer les transitions entre chaque état. ### Créer l’abonnement Créez un nouvel abonnement dans le [Dashboard](https://dashboard.stripe.com/subscriptions?status=active) ou avec l’[API Subscriptions](https://docs.stripe.com/api/subscriptions/create.md). L’[objet Subscription](https://docs.stripe.com/api/subscriptions/object.md) qui en résulte contient le client abonné, le [product](https://docs.stripe.com/api/products.md), le [price](https://docs.stripe.com/api/prices/object.md) et le `status` reflétant l’état actuel du cycle de vie de l’abonnement. Lorsque vous créez un abonnement qui nécessite un paiement immédiat, Stripe crée également un [Invoice](https://docs.stripe.com/billing/invoices/subscription.md) et un [PaymentIntent](https://docs.stripe.com/payments/payment-intents.md). L’état initial de l’abonnement est `incomplete`, puis devient `active` après que le client a payé la première facture. La gestion par défaut des échecs et de l’encaissement du paiement des abonnements dépend du moyen de paiement. Dans l’API, vous pouvez configurer le paramètre [payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) d’un abonnement pour en modifier le comportement par défaut. Si vous créez une [période d’essai](https://docs.stripe.com/billing/subscriptions/trials.md) pour retarder le premier paiement de l’abonnement, l’état initial est `trialing`, et l’abonnement passe automatiquement à l’état `active` lorsque l’essai se termine et que le paiement réussit. ### Gérer la facture Pour les abonnements dont le paramètre `collection_method` est défini sur `charge_automatically`, Stripe crée une [facture](https://docs.stripe.com/billing/invoices/subscription.md) avec l’état `open` lorsque vous créez l’abonnement. Votre client dispose de 23 heures pour payer. Pendant ce temps, l’état de l’abonnement est `incomplete` et l’état de la facture reste `open`. Cette fenêtre de 23 heures est prévue pour les clients qui paient *pendant une session* (A payment is described as on-session if it occurs while the customer is actively in your checkout flow and able to authenticate the payment method). Si le client retourne sur votre formulaire d’inscription après 23 heures, créez-lui un nouvel abonnement. Pour les abonnements dont le paramètre `collection_method` est défini sur `send_invoice`, Stripe envoie au client un e-mail contenant un lien vers la facture avec une date d’échéance configurable. L’abonnement reste `incomplete` jusqu’au paiement par le client. Pour en savoir plus, consultez la section consacrée aux [factures d’abonnement](https://docs.stripe.com/billing/invoices/subscription.md). ### Confirmer le paiement Si votre client paie la facture, l’état de l’abonnement passe à `active` et celui de la facture à `paid`. Écoutez l’événement [invoice.paid](https://docs.stripe.com/billing/subscriptions/webhooks.md#events) ou confirmez que l’état de l’abonnement est défini sur `active`. Si le client ne paie pas dans les 23 heures, l’abonnement passe à `incomplete_expired` et la facture passe à l’état `void`. Pour réactiver son accès, créez un nouvel abonnement. Pour en savoir plus, consultez les [états des abonnements](https://docs.stripe.com/billing/subscriptions/overview.md#subscription-statuses) et [des paiements](https://docs.stripe.com/billing/subscriptions/overview.md#payment-status). ### Fournir l’accès à votre produit Lorsqu’un abonnement devient `active`, Stripe crée un [entitlement](https://docs.stripe.com/billing/entitlements.md) actif pour chaque fonctionnalité associée au produit souscrit. Lorsqu’un client accède à vos services, utilisez ses droits d’accès actifs pour lui accorder l’accès aux fonctionnalités incluses dans son abonnement. Vous pouvez également [assurer le suivi des abonnements actifs](https://docs.stripe.com/billing/subscriptions/webhooks.md#active-subscriptions) à l’aide d’événements webhook et fournir le produit au client en fonction de cette activité. ### Mettre à jour l’abonnement Vous pouvez [modifier des Abonnement existantes](https://docs.stripe.com/billing/subscriptions/change.md) si nécessaire sans avoir à les annuler ni à les recréer. Parmi les changements les plus importants que vous pourriez apporter, citons le [passage à une](https://docs.stripe.com/billing/subscriptions/change-price.md) offre abonnement ou inférieure ou la [suspension paiement du collecter](https://docs.stripe.com/billing/subscriptions/pause-payment.md) d’un abonnement actif. Pour les intégrations [Stripe Checkout](https://docs.stripe.com/payments/checkout.md), vous ne pouvez pas mettre à jour l’abonnement ou sa facture si l’abonnement de la session est `incomplete`. Vous pouvez écouter l’événement [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) pour effectuer la mise à jour une fois la session terminée. Vous pouvez également [faire expirer la session](https://docs.stripe.com/api/checkout/sessions/expire.md) si vous souhaitez annuler l’abonnement de la session, annuler la facture d’abonnement ou marquer la facture comme irrécouvrable. ### Gérer les abonnement impayés Si le client ne paie pas une facture d’abonnement, Stripe suspend les tentatives de recouvrement ultérieures. L’abonnement continue de générer des factures à chaque période de facturation, qui conservent l’état `draft`. L’état de l’abonnement (`past_due` ou `unpaid`) dépend de vos [paramètres d’échec de paiement](https://dashboard.stripe.com/settings/billing/automatic) dans le Dashboard. Stripe ignore les factures annulées lors de la détermination de l’état de l’abonnement et utilise plutôt la facture non annulée la plus récente. Pour en savoir plus, consultez la section consacrée aux [Échecs des paiement d’abonnement](https://docs.stripe.com/billing/collection-method.md#failed-subscription-payments). ### Annuler l’abonnement Vous pouvez [résilier](https://docs.stripe.com/billing/subscriptions/cancel.md) un abonnement à tout moment, y compris à la [fin d’un cycle de facturation](https://docs.stripe.com/billing/subscriptions/cancel.md#cancel-at-the-end-of-the-current-billing-period) ou après un [nombre défini de cycles de facturation](https://docs.stripe.com/billing/subscriptions/cancel.md#subscription-schedules). Par défaut, l’annulation d’un abonnement désactive la création de nouvelles factures et [arrête le recouvrement automatique](https://docs.stripe.com/billing/subscriptions/cancel.md#handle-invoice-items-when-canceling-subscriptions) de toutes les factures en souffrance de l’abonnement. Elle supprime également l’abonnement et vous ne pouvez plus le mettre à jour, à l’exception de ses [metadata](https://docs.stripe.com/metadata.md) et `cancellation_details`. Si votre client souhaite se réabonner, vous devez recueillir de nouvelles informations de paiement auprès de lui et créer un nouvel abonnement. ## États des abonnements Subscriptions peuvent avoir les états suivants. Les actions que vous pouvez effectuer sur un abonnement dépendent de son état. | État | Description | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `trialing` | L’abonnement est actuellement en période d’essai et vous pouvez fournir votre produit à votre client en toute sécurité. L’abonnement passe automatiquement à l’état `active` lorsqu’un client effectue son premier paiement. | | `active` | L’abonnement est en règle. Pour les abonnements `past_due`, le paiement de la dernière facture associée ou sa mise en impayé fait passer l’abonnement à l’état `active`. Notez que `active` n’indique pas que toutes les factures en cours ont été réglées. Vous pouvez laisser d’autres factures ouvertes, les mettre en impayé ou les annuler. | | `incomplete` | Le client doit effectuer un paiement dans les 23 heures suivant la création de l’abonnement pour l’activer. Ou une [action est requise](https://docs.stripe.com/billing/subscriptions/overview.md#requires-action) pour le paiement, telle que l’authentification du client. Les abonnements peuvent également être à l’état `incomplete` si un paiement est en attente et que l’état du PaymentIntent est défini sur `processing`. | | `incomplete_expired` | Le paiement initial de l’abonnement a échoué et le client n’a pas effectué de paiement dans les 23 heures suivant la création de l’abonnement. Ces abonnements ne facturent pas les clients. Cet état vous permet de suivre les clients qui n’ont pas réussi à activer leur abonnement. | | `past_due` | Le paiement de la dernière facture *finalisée* a échoué ou n’a pas été tenté. L’abonnement continue de générer des factures. Les [paramètres d’abonnement](https://dashboard.stripe.com/settings/billing/automatic) de votre Dashboard déterminent le prochain état de l’abonnement. Si la facture reste impayée après toutes les tentatives de [relances intelligentes](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md), vous pouvez configurer l’abonnement pour qu’il passe à `canceled`, `unpaid` ou reste à `past_due`. Pour réactiver l’abonnement, demandez à votre client de régler la facture la plus récente. L’état de l’abonnement devient `active`, que le paiement soit effectué avant ou après la date d’échéance de la dernière facture. | | `canceled` | L’abonnement a été annulé. Lors de l’annulation, l’encaissement automatique de toutes les factures impayées est désactivé (`auto_advance=false`). Cet état est définitif et ne peut pas être mis à jour. | | `unpaid` | La dernière facture n’a pas été réglée, mais l’abonnement reste actif. La dernière facture reste ouverte et les factures continuent d’être générées, mais aucune tentative de paiement n’est effectuée. Révoquez l’accès à votre produit lorsque l’abonnement passe à l’état `unpaid`, car des tentatives de paiement ont déjà été effectués à plusieurs reprises lorsque qu’il était à l’état `past_due`. Pour passer l’abonnement à l’état `active`, la facture la plus récente doit être réglée avant sa date d’échéance. | | `paused` | L’abonnement a terminé sa période d’essai sans moyen de paiement par défaut et le paramètre [trial_settings.end_behavior.missing_payment_method](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#create-free-trials-without-payment) est défini sur `pause`. Les factures ne sont plus créées pour l’abonnement. Après avoir associé un moyen de paiement par défaut au client, vous pouvez [reprendre l’abonnement](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#resume-a-paused-subscription). | ## États des paiements Une [PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) suit le cycle de vie de chaque paiement. Lorsqu’un paiement est dû pour un abonnement, Stripe génère une [facture](https://docs.stripe.com/billing/invoices/subscription.md) et une PaymentIntent. L’ID de la PaymentIntent est associé à la facture et vous pouvez y accéder à partir des objets Invoice et Subscription. L’état du PaymentIntent affecte l’état de la facture et de l’abonnement. Voici comment les différents résultats d’un paiement correspondent aux différents états : | Résultat du paiement | État du PaymentIntent | État de la facture | État de l’abonnement | | ----------------------------------------- | ------------------------- | ------------------ | -------------------- | | Opération réussie | `succeeded` | `paid` | `active` | | Échecs dus à une erreur de carte bancaire | `requires_payment_method` | `open` | `incomplete` | | Échecs d’authentification | `requires_action` | `open` | `incomplete` | Les moyens de paiement asynchrones, comme le prélèvement automatique ACH Direct Debit, traitent les changements d’état des abonnements différemment des paiements instantanés. Avec un moyen de paiement asynchrone, un abonnement peut passer à l’état `active` immédiatement après sa création sans passer par l’état `incomplete`. En cas d’échec de paiement ultérieur, Stripe invalide la facture, tandis que l’abonnement reste à l’état `active`. Adaptez votre gestion des accès et votre logique de relance en fonction de ce fonctionnement. Les sections suivantes expliquent ces différents états et précisent les actions à mettre en œuvre pour chacun d’entre eux. ### Paiement réussi Lorsque le paiement du client aboutit : - Le `status` du PaymentIntent passe à `succeeded`. - Le `status` de l’abonnement est `active`. - Le `status` de la facture est `paid`. - Stripe envoie un événement `invoice.paid` aux endpoints de webhook que vous avez configurés. Pour les [moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) dont la période de traiter est plus longue, les Subscriptions sont immédiatement activées. Dans ce cas, l’état de la PaymentIntent peut être `processing` pour un abonnement `active` jusqu’à ce que le paiement aboutisse. Maintenant que votre abonnement est activé, [fournissez l’accès](https://docs.stripe.com/billing/subscriptions/overview.md#provision-access) à votre produit. ### Moyen de paiement requis Si le paiement échoue en raison d’une [erreur de carte bancaire](https://docs.stripe.com/api/errors.md#errors-card_error) telle qu’un [refus de paiement](https://docs.stripe.com/declines.md#issuer-declines) : - Le `status` de la PaymentIntent est `requires_payment_method`. - Le `status` de l’abonnement est `incomplet`. - Le `status` de la facture est `open`. Dans un tel scénario : - Prévenez votre client. - Collecter de nouvelles informations de paiement et [confirmez le PaymentIntent](https://docs.stripe.com/api/payment_intents/confirm.md). - Mettez à jour le [moyen de paiement par défaut](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-default_payment_method) de l’abonnement. - Stripe effectue une nouvelle tentative de paiement à l’aide de [Smart Retries](https://docs.stripe.com/invoicing/automatic-collection.md#smart-retries) ou établi vos [règles de relance](https://dashboard.stripe.com/account/billing/automatic) personnalisées. - Utilisez l’événement [invoice.payment_failed](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md#invoice-payment-failed-webhook) pour surveiller les échecs de paiement des abonnements et relancer les mises à jour des tentatives. Après une tentative de paiement sur une facture, sa valeur [next_payment_attempt](https://docs.stripe.com/api.md#invoice_object-next_payment_attempt) est définie à l’aide des paramètres d’abonnement actuels dans votre Dashboard. Découvrez comment [gérer les échecs de paiement dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/webhooks.md#payment-failures). ### Action requise Certains moyens de paiement nécessitent l’authentification du client avec [3D Secure](https://docs.stripe.com/payments/3d-secure.md) (3DS). La nécessité de l’authentification dépend de vos [règles Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) et de la banque émettrice de la carte bancaire. Si le paiement échoue parce que le client doit s’identifier un paiement : - Le `status` de la PaymentIntent est `requires_action`. - Le `status` de l’abonnement est `incomplet`. - Le `status` de la facture est `open`. Dans un tel scénario : - Surveillez la notification d’événement `invoice.payment_action_required` à l’aide des [endpoints de webhook](https://docs.stripe.com/billing/subscriptions/webhooks.md). Cela indique qu’une authentification est requise. - Avertissez votre client qu’une authentification est requise. - Récupérez la clé secrète du client pour le PaymentIntent et transmettez-la dans un appel à [stripe.ConfirmCardPayment](https://docs.stripe.com/js/payment_intents/confirm_card_payment). Cette action entraîne la présentation d’une fenêtre modale d’authentification à vos clients, une tentative de paiement, puis la fermeture de la fenêtre modale et le renvoi du contexte à votre formulaire d’inscription. - Surveillez l’événement `invoice.paid` sur votre destination d’événement pour vérifier que le paiement a abouti. Les utilisateurs peuvent quitter votre application avant que la fonction `confirmCardPayment()` ne se termine. Le fait de vérifier que le paiement a abouti vous permet de fournir l’accès à votre produit de manière adéquate. ## See also - [Concevoir une intégration d’abonnements](https://docs.stripe.com/billing/subscriptions/design-an-integration.md) - [Créer une intégration d’abonnements](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md) - [Abonnement quickstart](https://docs.stripe.com/billing/quickstart.md)