# Configurer un abonnement par prélèvement automatique Bacs Découvrez comment créer et facturer un abonnement avec le prélèvement automatique Bacs. Découvrez l’[exemple GitHub](https://github.com/stripe-samples/checkout-single-subscription) ou explorez la [démo](https://checkout.stripe.dev/checkout). Suivez ce guide pour configurer un *abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) avec le [prélèvement automatique Bacs](https://docs.stripe.com/payments/payment-methods/bacs-debit.md) comme moyen de paiement et *Checkout* (A low-code payment integration that creates a customizable form for collecting payments. You can embed Checkout directly in your website, redirect customers to a Stripe-hosted payment page, or create a customized checkout page with Stripe Elements). ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Créer des produits et tarifs récurrents > L’API Prices unifie la modélisation des abonnements et des achats ponctuels sur Stripe. Les intégrations qui n’utilisent pas cette API restent [prises en charge](https://support.stripe.com/questions/prices-api-and-existing-checkout-integrations), mais certaines fonctionnalités de Checkout ne sont compatibles qu’avec Prices. Pour passer à l’API Prices, consultez le [guide de migration](https://docs.stripe.com/payments/checkout/migrating-prices.md). Pour utiliser Checkout, vous devez d’abord créer un *produit* (Products represent what your business sells—whether that's a good or a service) et un *tarif* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions). Vous devez créer un produit pour chacune de vos marchandises ou chacun de vos niveaux de service. Un produit peut être associé à un ou plusieurs tarifs. Par exemple, vous pouvez créer un *produit* logiciel qui dispose de quatre *tarifs* : 10 € par mois, 100 € par an, 9 GBP par mois et 90 GBP par an. Vous pouvez ainsi modifier et ajouter des tarifs sans modifier les informations de vos produits sous-jacents. Pour créer des produits et des tarifs, vous pouvez passer [par l’API](https://docs.stripe.com/api/prices.md) ou utiliser [le Dashboard Stripe](https://dashboard.stripe.com/products). Si votre tarif est déterminé au moment du paiement (par exemple, lorsque le client fixe le montant d’un don) ou si vous ne souhaitez pas créer de tarif prédéfini, vous pouvez créer des [tarifs en série](https://docs.stripe.com/billing/subscriptions/bacs-debit.md#creating-prices-inline) lors de la création d’une session Checkout. #### Dashboard Avant de commencer à configurer les produits, assurez-vous que vous êtes dans un environnement de test. Ensuite, définissez les biens et services que vous prévoyez de vendre. Pour créer un nouveau produit et un nouveau prix : - Accédez à la section [Produits](https://dashboard.stripe.com/products) du Dashboard. - Cliquez sur **Ajouter un produit**. - Sélectionnez « Récurrent » lors de la définition du tarif. - Configurez le plan tarifaire. Vous pouvez définir plusieurs plans tarifaires avec différents paramètres pour chaque produit récurrent. Un ID est généré pour chaque tarif, que vous pouvez utiliser comme référence pendant le processus de paiement. > Les produits créés en environnement de test peuvent être copiés en mode production pour vous éviter d’avoir à les recréer. Dans la vue Détails du produit du Dashboard, cliquez sur **Copier vers le mode production** en haut à droite. Vous ne pouvez effectuer cette opération qu’une seule fois par produit créé en environnement de test. Si vous modifiez un produit test par la suite, ces modifications ne seront pas répercutées en mode production. #### API Lors de la création d’un [produit](https://docs.stripe.com/api/products.md) de base avec l’API, seul le champ `name` est obligatoire. Les attributs `name`, `description` et `images` que vous indiquez sont présentés aux clients sur Checkout. ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d "name=Blue banana" ``` Créez ensuite une API [Price](https://docs.stripe.com/api/prices.md) pour définir le montant à facturer pour votre produit, et à quelle fréquence. Cela inclut le prix du produit, la devise à utiliser et sa période de facturation. #### curl ```bash curl https://api.stripe.com/v1/prices \ -u <>: \ -d "product"="{{ PRODUCT_ID }}" \ -d "unit_amount"=1000 \ -d "currency"="gbp" \ -d "recurring[interval]=month" ``` Cet ID de tarif est la façon dont vous faites référence au produit lorsque vous commencez le processus de paiement avec Checkout. ## Créer une session Checkout [Côté client] [Côté serveur] Ajoutez à votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une session Checkout. ```html Checkout
``` ### Paramètres de la session Checkout Reportez-vous à la section [Créer une session Checkout](https://docs.stripe.com/api/checkout/sessions/create.md) pour obtenir la liste complète des paramètres pouvant être utilisés. Créez une session Checkout avec l’ID d’un [tarif](https://docs.stripe.com/api/prices.md) existant. Assurez-vous d’avoir défini le mode sur `subscription` et d’avoir transmis au moins un tarif récurrent. Vous pouvez ajouter des tarifs ponctuels en plus des tarifs récurrents. Après avoir créé la session Checkout, redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse. #### cURL ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Une fois le paiement effectué, votre client est redirigé vers `success_url`. Il s’agit d’une page de votre site Web indiquant au client que le paiement a réussi. Mettez l’ID de session à disposition sur votre page de confirmation de paiement en incluant la variable de modèle `{CHECKOUT_SESSION_ID}` dans l’URL `success_url`, comme illustré ci-dessus. Par défaut, les sessions Checkout expirent 24 heures après leur création. Dans le [Dashboard](https://dashboard.stripe.com/settings/payment_methods), activez les moyens de paiement que vous souhaitez accepter de vos clients. Checkout prend en charge [plusieurs moyens de paiement](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support). > Ne vous fiez pas uniquement à la redirection vers `success_url` pour détecter l’initiation d’un paiement, car : > > - Des utilisateurs malveillants pourraient accéder directement au `success_url` sans payer et obtenir l’accès à vos biens ou à vos services. - Après un paiement réussi, les clients peuvent fermer l’onglet de leur navigateur avant d’être redirigés vers `success_url`. ## Confirmer le paiement Une fois que votre client a mené à bien son paiement, Stripe le redirige vers l’URL que vous avez spécifiée dans le paramètre `success_url`. En général, il s’agit d’une page de votre site Web qui l’informe que son paiement a abouti. Cependant, Bacs Direct Debit est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas immédiatement disponibles. Pour cette raison, il convient de retarder le *traitement* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) de la commande jusqu’à ce que les fonds soient disponibles. Une fois le paiement effectué, l’état sous-jacent de la *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) passe de `processing` à `succeeded`. Vous pouvez confirmer la réussite du paiement de différentes manières : #### Dashboard Les paiements réussis apparaissent dans la [liste des paiements](https://dashboard.stripe.com/payments) du Dashboard. Lorsque vous cliquez sur un paiement, vous accédez à la page des détails de ce paiement. La section **Récapitulatif du Checkout** contient les informations de facturation et la liste des articles achetés, que vous pouvez utiliser pour traiter manuellement la commande. ![](https://b.stripecdn.com/docs-statics-srv/assets/source.16d3029596357c80a8efdbbfe106108a.png) > Stripe peut vous aider à rester informé sur les paiements entrants en vous envoyant des notifications par e-mail chaque fois qu’un client effectue un paiement. Utilisez le Dashboard pour [configurer les notifications par e-mail](https://dashboard.stripe.com/settings/user). #### Webhooks Nous envoyons les événements de paiement suivants lorsque l’état du paiement change : | Nom de l’événement | Description | Étapes suivantes | | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Le client a autorisé le paiement par prélèvement en envoyant le formulaire Checkout. | Attendez que le paiement aboutisse ou échoue. | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Le moyen de paiement différé a finalement abouti. | Traitez la commande de biens ou de services de votre client. | | [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Le moyen de paiement différé a finalement échoué. | Contactez le client par e-mail et demandez-lui de retenter le paiement. | | [invoice.paid](https://docs.stripe.com/api/events/types.md#event_types-invoice.paid) | Le paiement du client a abouti. | Traitez la commande de biens ou de services de votre client. | | [invoice.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-invoice.payment_failed) | Le paiement du client a été refusé, ou il a échoué pour une autre raison. | Contactez votre client par e-mail et demandez-lui de retenter le paiement. | Votre code webhook doit gérer tous ces événements Checkout. Chaque charge utile de webhook Checkout inclut l’[objet Checkout Session](https://docs.stripe.com/api/checkout/sessions.md) et les webhooks de facture incluent l’objet [Invoice](https://docs.stripe.com/api/invoices/object.md). Les deux contiennent des informations sur le *client* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et le *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods). Stripe envoie le webhook `checkout.session.completed` à votre serveur avant de rediriger votre client. Votre confirmation du webhook (tout code d’état `2xx`) déclenche la redirection du client vers l’URL `success_url`. Si Stripe ne reçoit pas de confirmation dans les 10 secondes suivant la réussite d’un paiement, votre client est automatiquement redirigé vers la page `success_url`. Nous vous recommandons [d’utiliser des webhooks](https://docs.stripe.com/webhooks.md) pour confirmer que le paiement a abouti et exécuter les biens et services que le client a acheté. Ci-dessous est un exemple d’endpoint de webhook qui gère la réussite et l’échec d’un paiement : #### Ruby ```ruby # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. client = Stripe::StripeClient.new('<>') # You can find your endpoint's secret in your webhook settings endpoint_secret = 'whsec_...' # Using Sinatra post '/webhook' do payload = request.body.read event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. sig_header = request.env['HTTP_STRIPE_SIGNATURE'] begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e # Invalid payload status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature status 400 return end case event['type'] when 'checkout.session.completed' session = event['data']['object'] subscription_id = session.subscription # Find the subscription or save it to your database. # invoice.paid may have fired before this so there # could already be a subscription. find_or_create_subscription(subscription_id) when 'invoice.paid' invoice = event['data']['object'] subscription_id = invoice.parent.subscription_details.subscription # Find the subscription or save it to your database. # checkout.session.completed may not have fired yet # so we may need to create the subscription. subscription = find_or_create_subscription(subscription_id) # Fulfill the purchase fulfill_order(invoice) # Record that the subscription has been paid for # this payment period. invoice.paid will fire every # time there is a payment made for this subscription. record_as_paid_for_this_period(subscription) when 'invoice.payment_failed' invoice = event['data']['object'] # Send an email to the customer asking them to retry their payment email_customer_about_failed_payment(invoice) end status 200 end ``` Vous pouvez obtenir des informations concernant le client, le paiement et l’abonnement en récupérant les objets `Customer`, `PaymentIntent`, o `Subscription` référencés par les propriétés `customer`, `payment_intent`, et `subscription` dans la charge utile du webhook. ### Récupération des postes de facture à partir d’un webhook Par défaut, les webhooks Checkout ne renvoient pas de `line_items`. Pour récupérer les postes créés avec la session Checkout, effectuez une autre requête avec l’ID de session Checkout : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \ -u <>: ``` #### CLI Stripe ```bash stripe get /v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items ``` ### Test des webhooks en local Pour tester des webhooks localement, vous pouvez utiliser l’[interface de ligne de commande Stripe](https://docs.stripe.com/stripe-cli.md). Après l’avoir installée, vous pouvez transférer les événements à votre serveur : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit) ``` En savoir plus sur [la configuration des webhooks](https://docs.stripe.com/webhooks.md). #### Plugins tiers Vous pouvez utiliser des plugins comme [Zapier](https://stripe.com/works-with/zapier) pour automatiser la mise à jour de vos systèmes de réalisation des achats avec les informations provenant des paiements Stripe. Voici quelques exemples d’automatisation prise en charge par les plugins : - Mise à jour des feuilles de calcul utilisées pour le suivi de commandes suite à des paiements ayant abouti - Mise à jour des systèmes de gestion d’inventaire suite à des paiements ayant abouti - Déclenchement de notifications aux équipes internes du service client en utilisant des applications de messagerie ou de chat ## Tester l'intégration Vous avez à votre disposition plusieurs [numéros de compte bancaire de test](https://docs.stripe.com/keys.md#test-live-modes) dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) pour vérifier que cette intégration est prête. | Code guichet | Numéro de compte | Description | | ------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 10-88-00 | 00012345 | Le paiement aboutit et la facture bascule sur `paid`. | | 10-88-00 | 90012345 | Le paiement aboutit au bout de trois minutes et la facture bascule sur `paid`. | | 10-88-00 | 33333335 | Le paiement échoue avec le code d’échec `debit_not_authorized`, et la facture passe à l’état `open`. Le Mandat devient `inactive` et le PaymentMethod ne peut plus être utilisé. | | 10-88-00 | 93333335 | Le paiement échoue après trois minutes avec le code d’échec `debit_not_authorized`, et la facture passe à l’état `open`. Le mandat devient `inactive` et le PaymentMethod ne peut plus être utilisé. | | 10-88-00 | 22222227 | Le paiement échoue avec un code d’échec `insufficient_funds` et l’objet Invoice bascule sur `open`. L’objet Mandate reste `active` et le PaymentMethod peut à nouveau être utilisé. | | 10-88-00 | 92222227 | Le paiement échoue au bout de trois minutes avec un code d’échec `insufficient_funds` et l’objet Invoice bascule sur `open`. L’objet Mandate reste `active` et le PaymentMethod peut à nouveau être utilisé. | | 10-88-00 | 55555559 | Le paiement aboutit au bout de trois minutes et l’état de la facture passe à `paid`, mais un litige est immédiatement créé. | | 10-88-00 | 00033333 | La création du moyen de paiement aboutit, mais le mandat est refusé par la banque du client et passe immédiatement à l’état inactif. | | 10-88-00 | 00044444 | La demande de configuration de Bacs Direct Debit échoue immédiatement en raison d’un numéro de compte invalide, et le client est invité à mettre à jour ses informations avant l’envoi. Les informations de paiement ne sont pas collectées. | Pour vos tests, vous pouvez utiliser l’un des numéros de compte fournis ci-dessus. Cependant, dans la mesure où le traitement des paiements par prélèvement automatique Bacs prend plusieurs jours, privilégiez les numéros de compte de test qui fonctionnent avec un délai de trois minutes, de manière à mieux simuler le comportement en situation réelle. > Par défaut, Stripe envoie automatiquement des [e-mails](https://docs.stripe.com/payments/payment-methods/bacs-debit.md#debit-notifications) de notification au client lors de la collecte initiale de ses données de paiement et chaque fois qu’un débit est ensuite effectué sur son compte. Ces notifications ne sont pas envoyées dans les environnements de test. ## Optional: Ajouter des frais de configuration ponctuels [Côté serveur] En mode `subscription`, vous pouvez transmettre des tarifs récurrents, mais également ajouter des tarifs ponctuels. Ces tarifs ne s’appliquent qu’à la première *facture* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) générée par un abonnement. Cette fonctionnalité permet d’ajouter des frais initiaux ou d’autres types de frais ponctuels à un abonnement. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[0][price]"="{{RECURRING_PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "line_items[1][price]"="{{ONE_TIME_PRICE_ID}}" \ -d "line_items[1][quantity]"=1 \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" ``` ## Optional: Créer des tarifs et produits en série [Côté serveur] Lors de la création d’une session Checkout, vous pouvez transmettre des ID de tarifs existants, mais aussi définir des tarifs. Commencez par définir un [Product](https://docs.stripe.com/api/products.md), puis créez une session Checkout à l’aide de l’ID de produit et transmettez-le dans le paramètre [price_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data) avec les informations `unit_amount`, `currency`, et `recurring` : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=bacs_debit \-d line_items[0][price_data][unit_amount]=5000 \ -d line_items[0][price_data][currency]=gbp\ -d line_items[0][price_data][product]="{{PRODUCT_ID}}" \ -d line_items[0][price_data][recurring][interval]=month \ -d line_items[0][quantity]=1 \ -d mode=subscription \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Si vous avez également besoin de créer des produits en série, vous pouvez le faire à l’aide du paramètre [product_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product_data) : #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=bacs_debit \-d "line_items[][price_data][currency]"=gbp\ -d "line_items[][price_data][product_data][name]"=T-shirt \ -d "line_items[][price_data][unit_amount]"=2000 \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` ## Optional: Clients existants [Côté serveur] Si vous avez déjà créé un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) pour représenter un client, utilisez l’argument [customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer) pour transmettre son ID lors de la création d’une Checkout Session. Vous pouvez ainsi vous assurer que tous les objets créés pendant la Session seront associés au bon objet Customer. Lorsque vous transmettez un ID de client, Stripe utilise également l’adresse e-mail enregistrée dans l’objet Customer pour renseigner automatiquement le champ correspondant de la page Checkout. Si le client change son adresse e-mail sur la page Checkout, l’objet Customer sera mis à jour une fois qu’un paiement aura été traité. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "customer"="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" ``` ## Optional: Renseigner les données automatiquement [Côté serveur] Si vous avez précédemment collecté l’adresse e-mail de votre client et que vous souhaitez la renseigner automatiquement dans la session Checkout, transmettez le paramètre [customer_email](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_email) lors de la création de la session. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d customer_email="customer@example.com" \ -d "payment_method_types[]"=bacs_debit \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ## Optional: Gérer les périodes d'essai [Côté serveur] Vous pouvez utiliser [trial_end](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-trial_end) ou [trial_period_days](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-trial_period_days) sur la session Checkout pour spécifier la durée de la période d’essai. Dans cet exemple, nous utilisons `trial_period_days` pour créer une session Checkout pour un abonnement avec une période d’essai de 30 jours. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=bacs_debit \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "subscription_data[trial_period_days]"=30 \ -d mode=subscription \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Checkout affiche les informations suivantes automatiquement pour les abonnements avec essais : - Période d’essai - Fréquence et montant des frais après expiration de la période d’essai Pour en savoir plus sur les exigences de conformité, consultez les [guides sur la gestion des exigences de conformité](https://docs.stripe.com/billing/subscriptions/trials/manage-trial-compliance.md) ou [ de prise en](https://support.stripe.com/questions/2020-visa-trial-subscription-requirement-changes-guide) charge. ## Optional: Taux de taxe [Côté serveur] Pour appliquer des taxes aux *abonnements* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis), vous pouvez préciser des [taux de taxe](https://docs.stripe.com/billing/taxes/tax-rates.md) (taxe de vente, TVA, GST, etc.) dans les sessions Checkout. - Utilisez des taux de taxe fixes lorsque vous connaissez le taux de taxe exact applicable à vos clients avant qu’ils n’engagent le processus de paiement (par exemple, si vous ne vendez qu’à des clients basés au Royaume-Uni et que vous facturez toujours une TVA de 20 %). - Avec l’API *Prices* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions), vous pouvez utiliser des taux de taxe dynamiques lorsque vous avez besoin de davantage d’informations sur votre client (par exemple, son adresse de facturation ou de livraison) pour déterminer le taux de taxe à lui appliquer. Avec les taux de taxe dynamiques, vous créez des taux de taxe propres à chaque région : par exemple, un taux de TVA de 20 % pour vos clients basés au Royaume-Uni et de 7,25 % pour vos clients basés en Californie. Stripe tente ensuite d’apparier la localisation de vos clients à l’un de ces taux de taxe. #### Taux de taxe fixes Configurez [subscription_data.default_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-default_tax_rates) pour appliquer un taux de taxe par défaut à un abonnement utilisant Checkout. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=bacs_debit \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "subscription_data[default_tax_rates][]"="{{TAX_RATE_ID}}" \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` Vous pouvez également spécifier des [line_items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-tax_rates) ou des [subscription_data.items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-items-tax_rates) pour appliquer des taux de taxe à des plans ou des postes de facture spécifiques. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "line_items[][tax_rates][0]"="{{TAX_RATE_ID}}" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` #### Taux de taxe dynamiques Transmettez le tableau de [taux de taxes](https://docs.stripe.com/api/tax_rates/object.md) à [line_items.dynamic_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates). Chaque taux doit être associé à un paramètre `country` [pris en charge](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates), et pour les États-Unis, à un paramètre `state`. Cette liste met en correspondance les taux de taxe avec l’[adresse de livraison](https://docs.stripe.com/payments/collect-addresses.md), l’adresse de facturation ou le pays de votre client. L’adresse de livraison est prioritaire sur l’adresse de facturation pour déterminer le taux de taxe à appliquer. Si vous ne collectez pas l’adresse de livraison ou de facturation de vos clients, le taux de taxe est déterminé en fonction de leur pays de résidence (et de leur code postal, le cas échéant). Si vous ne transmettez pas de taux de taxe pour l’adresse de livraison, l’adresse de facturation ou le pays de vos clients, aucun taux n’est appliqué. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "line_items[][dynamic_tax_rates][]"="{{FIRST_TAX_RATE_ID}}" \ -d "line_items[][dynamic_tax_rates][]"="{{SECOND_TAX_RATE_ID}}" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` > [subscription_data.default_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-subscription_data-default_tax_rates) et [line_items.tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-tax_rates) ne peuvent pas être utilisés avec [line_items.dynamic_tax_rates](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-dynamic_tax_rates). Vous pouvez utiliser les exportations de données de Stripe pour renseigner les rapports périodiques nécessaires dans le cadre du reversement des taxes. Veuillez consulter la page [Déclaration et versement des taxes](https://docs.stripe.com/billing/taxes/tax-rates.md#remittance) pour obtenir plus d’informations. ## Optional: Ajouter des bons de réduction [Côté serveur] Vous pouvez appliquer des [bons de réduction](https://docs.stripe.com/billing/subscriptions/coupons.md) aux abonnements dans une session Checkout en configurant des [ristournes](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts). Les bons de réduction priment sur tous les autres bons du client. Si vous créez un abonnement pour un [client existant](https://docs.stripe.com/billing/subscriptions/bacs-debit.md#handling-existing-customers), tout bon de réduction associé au client est appliqué aux *factures* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) à l’abonnement. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"=bacs_debit \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \-d "discounts[][coupon]"="{{COUPON_ID}}" \ -d "mode"="subscription" \ -d success_url="https://example.com/success" \ ``` ### Ajouter des codes promotionnels destinés aux clients Vous pouvez également activer des [codes promotionnels](https://docs.stripe.com/billing/subscriptions/coupons.md#promotion-codes) en utilisant le paramètre [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) dans les sessions Checkout. Lorsque `allow_promotion_codes` est activé sur une session Checkout, vos clients voient une case de code promotionnel s’afficher. Créez vos [bons de réduction](https://docs.stripe.com/billing/subscriptions/coupons.md) et codes promotionnels via le Dashboard ou l’API afin que vos clients puissent les utiliser dans Checkout. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][price_data][currency]"="gbp" \ -d "line_items[0][price_data][product]={{PRODUCT_ID}}" \ -d "line_items[0][price_data][recurring][interval]=month" \ -d "line_items[0][quantity]"=1 \-d "allow_promotion_codes"="true" \ -d "mode"="subscription" \ -d "success_url"="https://example.com/success" \ ``` ## See also - [Personnaliser votre intégration](https://docs.stripe.com/payments/checkout/customization.md) - [Gérer les abonnements avec le portail client](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md?payment-ui=checkout&ui=stripe-hosted)