Mettre en place une facturation avancée à usage avec des offres tarifairesVersion bêta privée
Facturez vos clients en fonction de leur utilisation et des frais récurrents.
Vous pouvez regrouper différents composants tarifaires dans une seule offre tarifaire. Par exemple, vous pouvez créer une offre tarifaire qui inclut des cartes tarifaires pour la facturation à l’usage, des frais de licence pour les paiements récurrents et des actions de service liées aux crédits récurrents. Lorsqu’un client souscrit à une offre tarifaire, tous les composants récurrents sont automatiquement inscrits et facturés selon la fréquence que vous définissez. Les modèles tarifaires pris en charge incluent le paiement à l’utilisation et l’épuisement du crédit.
Les modèles de tarification pris en charge sont les suivants :
- Paiement à l’utilisation
- Consommation de crédit en temps réel avec recharges
- Frais de dépassement et frais forfaitaires
Version bêta privée
Les offres tarifaires sont actuellement en version bêta privée et peuvent changer en termes de fonctionnalités et de chemin d’intégration avant d’être généralement disponibles pour tous les utilisateurs Stripe. Contactez-nous pour demander l’accès.
Avant de commencer
You can also use a guided API (Blueprint) version of this guide in the Dashboard.
Les offres tarifaires utilisent des endpoints de l’API /v2. En savoir plus sur les espaces de noms /v2 et /v1.
Utilisez des bacs à sable pour tester l’intégration de vos offres tarifaires. Vous ne pouvez pas utiliser le mode test avec les API /v2.
Créer un plan tarifaire
Utilisez le Dashboard ou l’API Stripe pour créer une offre tarifaire qui contient toutes les composantes pertinentes de votre modèle de tarification.
Pour chaque offre tarifaire, vous pouvez configurer:
- Devise : indiquez la devise de tous les composants de votre offre tarifaire.
- Inclure les taxes dans le tarif : Indiquez si vous souhaitez inclure les taxes dans votre tarif (taxes comprises) ou les ajouter au sous-total de la facture (hors taxes). En savoir plus sur les régimes taxes comprises et hors taxes pour la facturation.
- Métadonnées : ajoutez éventuellement vos propres métadonnées à l’offre tarifaire.
Après avoir défini les paramètres de devise et les paramètres fiscaux, définissez les composants pertinents de votre offre. Les composants que vous incluez dépendent de votre modèle de tarification. Ce guide utilise les trois composantes (
Souscrire votre client à une offre tarifaire
une fois une offre tarifaire configurée, vous pouvez y abonner un client. vous pouvez créer un abonnement en utilisant l’api checkout sessions avec une page hébergée par Stripe ou des composants intégrés comme interface utilisateur de paiement (la checkout session crée également un client). vous pouvez aussi utiliser l’api pour créer directement un abonnement à une offre tarifaire. si vous optez pour la méthode directe, vous devez créer un client, un paramètre de recouvrement, une cadence de facturation et une intention de facturation, qui ensemble créent l’abonnement avec une offre tarifaire.
Enregistrer l’usage des clients
Après avoir souscrit un client à une offre tarifaire composée d’une carte tarifaire, enregistrez son utilisation de votre service en envoyant les événements de compteur à un compteur.
Créer un aperçu de la facture
Créez un aperçu de la facture pour afficher un aperçu de la facture d’un client. L’aperçu comprend les éléments d’exécution pertinents des différents composants du offre tarifaire.
Surveiller les événements de service
Les abonnements à l’offre tarifaire envoient des notifications d’événement chaque fois que les états de service et recouvrement changent.
Écoutez ces événements et utilisez-les pour construire votre logique métier :
v2. | L’utilisateur paie l’abonnement qui active le service. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | L’utilisateur met l’abonnement en pause. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | L’utilisateur annule le service. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | Le recouvrement de l’abonnement est en cours. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | Le recouvrement attend que le client fasse quelque chose. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | Le recouvrement est interrompu. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | Le recouvrement est exigible. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v2. | Le recouvrement est considéré comme impayé. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Pour traiter ces événements v2, configurez une destination d’événement et dirigez-la vers votre endpoint webhook. Vous pouvez soit :
- Créer la destination d’événement à partir de Workbench.
- Créez la destination de l’événement via l’API Stripe.
Une fois que vous avez créé une destination, vous pouvez configurer votre endpoint de webhook pour qu’il gère les événements suivants :
require 'stripe' post '/v2_webhook_endpoint' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e status 400 return rescue Stripe::SignatureVerificationError => e status 400 return end client = Stripe::StripeClient() case event.type when 'v2.billing.pricing_plan_subscription.servicing_activated' # The customer clicked Pay on Stripe Checkout, which activates the service. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_active(user, subscription) when 'v2.billing.pricing_plan_subscription.servicing_paused' # The customer paused the subscription. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_paused(user, subscription) when 'v2.billing.pricing_plan_subscription.servicing_canceled' # The customer canceled the subscription. subscription_id = event.related_object.id subscription = client.v2.billing.pricing_plan_subscriptions .retrieve(subscription_id) # Look up your user in the database using the metadata passed into # Checkout Session create user_id = subscription.metadata["my_user_id"] user = User.find_by_id(user_id) # Fill in your logic here: mark_subscription_canceled(user, subscription) end status 200 end"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
Tester l'intégration
Pour tester votre intégration :
- [Créer un environnement de test]](/sandboxes/dashboard/manage#create-a-sandbox).
- Créez une offre tarifaire test et au moins une composante tarifaire sous-jacente dans votre bac à sable.
- Utilisez les cartes de test pour simuler les paiements réussis et les échecs de paiement.
- Créez des événements de test pour simuler l’utilisation.
- Utilisez des horloges de simulation pour simuler la facturation.
Ne créez pas d'horloges de simulation dans le passé
Lorsque vous créez une horloge de test pour un abonnement à une offre tarifaire, ne créez des horloges qu’à l’avenir. Si vous créez une horloge dans le passé, les montants des factures ne seront pas corrects.
Créer un environnement de test avec un horodatage UNIX :
Notez l’ID de l’horloge de simulation. Ensuite, créez un client de test avec l’horloge :
Créer un profil de facturation :
Créez une période de facturation pour définir quand facturer le client. Enregistrez l’ID.
Créer une offre tarifaire pour le client concerné par le test.
Créez une intention de facturation pour suivre l’état de l’abonnement à l’offre tarifaire. Tout d’abord, commencez par créer un brouillon d’intention de facturation. Enregistrez ensuite l’ID de l’intention.
Ensuite, réservez l’intention de facturation :
Ensuite, validez l’intention de facturation pour activer l’abonnement à l’offre tarifaire et facturer le client selon l’offre tarifaire et la cadence. (Si vous avez configuré les paramètres d’encaissement sur automatic, vous devez disposer d’une PaymentIntent réussie pour valider l’intention. Si les paramètres d’encaissement sont définis sur send_, vous n’avez pas besoin de transmettre l’intention de paiement).
À des fins de test, vous pouvez attribuer à payment_ la valeur « pm_card_visa ».
Payez la facture générée par l’abonnement. Une fois la facture payée, vous pouvez simuler l’utilisation et faire avancer l’horloge, ce qui déclenche la facturation du mois suivant. Si vous utilisez Checkout, vous pouvez ouvrir l’url de la session Checkout renvoyée dans votre navigateur et effectuer le paiement à l’aide d’une carte de test.
Enregistrez quelques tests d’utilisation :
Avancez d’un mois le temps gelé de l’horloge de simulation. Dans cet exemple, l’horloge de test a actuellement un horodatage de 1577836800. Pour ajouter un mois, ajoutez 30 * 24 * 60 * 60, ou 2592000 secondes. Le nouvel horodatage par mois dans un mois est 1580428800.
FacultatifCollecter des taxes
Pour collecter automatiquement les taxes, créez une session Checkout incluant des checkout_items et définissez automatic_ sur true.
La page affiche les détails de votre offre tarifaire et rassemble les informations de paiement du client. Une fois la session terminée, le client est redirigé vers l’URL que vous avez spécifiée pour success_.
FacultatifConfigurer le portail client
Vous pouvez mettre à disposition des fonctions en libre-service pour vos clients en mettant en place un portail client.
L’utilisation du portail client avec les abonnements à des offres tarifaires est actuellement en lecture seule : les clients ne peuvent pas annuler, modifier les offres ou mettre à jour leurs moyens de paiement pour les abonnements à des offres tarifaires. Actuellement, vous ne pouvez configurer une session de portail client qu’à partir du Dashboard.
L’utilisation du portail client avec les abonnements aux offres tarifaires permet à vos clients de visualiser :
- L’offre à laquelle ils sont abonnés, y compris les détails de l’offre hybride que vous proposez.
- Des factures à venir qui les aident à comprendre combien ils seront facturés à la fin du mois.
- Le moyen de paiement enregistré pour l’Abonnement en question.
- Les factures antérieures pour lesquelles ils ont été débités.
- Leurs informations de facturation.
