# Configurer un abonnement avec le prélèvement automatique canadien Comment créer et facturer un abonnement avec les prélèvements automatiques canadiens. > Le mode abonnement n’est pas encore pris en charge dans [Checkout](https://docs.stripe.com/payments/checkout.md). Pour être informé de l’accès anticipé lorsque cette fonctionnalité sera disponible, [contactez-nous](mailto:payment-methods-feedback@stripe.com?subject=PADs%20Subscription%20Mode%20User%20Interest) pour rejoindre la liste d’attente. ## Créer un produit et un tarif [Dashboard] Les [produits](https://docs.stripe.com/api/products.md) correspondent aux articles ou services que vous vendez. Les [tarifs](https://docs.stripe.com/api/prices.md) définissent le montant et la fréquence des paiements facturés pour un produit. Le tarif prend en compte la valeur du produit, la devise que vous acceptez et s’il s’agit d’un paiement ponctuel ou récurrent. Si vous n’avez que quelques produits et tarifs, créez-les et gérez-les dans le Dashboard. Ce guide prend comme exemple un service de banque d’images qui débite ses clients d’un montant de 15 CAD pour un abonnement mensuel. Pour modéliser ceci : 1. Go to the [Products](https://dashboard.stripe.com/products?active=true) page and click **Create product**. 1. Saisissez un **Nom** pour le produit. Vous pouvez éventuellement ajouter une **Description** et télécharger une image du produit. 1. Select a **Product tax code**. Learn more about [product tax codes](https://docs.stripe.com/tax/tax-codes.md). 1. Sélectionnez **Récurrent**. Saisissez ensuite **** pour le prix et sélectionnez **** comme devise. 1. Choose whether to **Include tax in price**. You can either use the default value from your [tax settings](https://dashboard.stripe.com/test/settings/tax) or set the value manually. In this example, select **Auto**. 1. Pour **Période de facturation**, sélectionnez **Mensuel**. 1. Click **More pricing options**. Then select **Flat rate** as the pricing model for this example. Learn more about [flat rate](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate) and other [pricing models](https://docs.stripe.com/products-prices/pricing-models.md). 1. Add an internal **Price description** and [Lookup key](https://docs.stripe.com/products-prices/manage-prices.md#lookup-keys) to organize, query, and update specific prices in the future. 1. Cliquez sur **Suivant**. Cliquez ensuite sur **Ajouter un produit**. Après avoir créé le produit et le tarif, enregistrez l’ID de tarif de manière à pouvoir l’utiliser dans les étapes ultérieures. La page des tarifs affiche l’ID dont le format est similaire à ce qui suit : `price_G0FvDp6vZvdwRZ`. ## Créer l'abonnement [Côté serveur] > Pour créer un abonnement avec une période d’essai, consultez la documentation relative aux [périodes d’essai des abonnements](https://docs.stripe.com/billing/subscriptions/acss-debit.md#trial-periods). Créez un [abonnement](https://docs.stripe.com/api/subscriptions.md) avec le tarif et le client à l’état `incomplete` en fournissant le paramètre [payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) défini sur la valeur `default_incomplete`. #### curl ```bash curl https://api.stripe.com/v1/subscriptions \ -u <>: \ -d "customer"="{{CUSTOMER_ID}}" \ -d "items[0][price]"="price_F52b2UdntfQsfR" \ -d "payment_behavior"="default_incomplete" \ -d "payment_settings[payment_method_types][]"="acss_debit" \ -d "expand[0]"="latest_invoice.payment_intent" ``` La réponse inclut la première [facture](https://docs.stripe.com/api/invoices.md) de l’*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). Celui-ci contient les paiements de la facture, qui inclut un PaymentIntent par défaut que Stripe a généré pour cette facture et la clé secrète de confirmation que vous pouvez envoyer au client afin qu’il finalise le processus de paiement en toute sécurité au lieu de lui transmettre la totalité de l’objet PaymentIntent. Renvoyez le `latest_invoice.confirmation_secret.client_secret` au front-end pour finaliser le paiement. ## Recueillir les informations du moyen de paiement et la confirmation du mandat [Côté client] Pour recourir aux prélèvements pré-autorisés canadiens, vous devez obtenir l’autorisation de vos clients pour les paiements ponctuels et récurrents à l’aide d’un mandat de prélèvement automatique (consultez la section [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates)). L’objet [Mandate](https://docs.stripe.com/api/mandates.md) enregistre le mandat et l’autorisation. Stripe configure automatiquement les mandats d’abonnement et de *facture* pour vous. Votre client n’a besoin d’accepter les conditions du mandat qu’une seule fois, les frais d’abonnement ultérieurs seront appliqués sans qu’aucune autre intervention ne soit nécessaire. Lorsqu’un client clique pour payer avec Canadian pre-authorized debit, nous vous recommandons d’utiliser Stripe.js pour soumettre le paiement à Stripe. [Stripe.js](https://docs.stripe.com/payments/elements.md) est notre bibliothèque JavaScript de base pour créer les tunnels de paiement : elle gère automatiquement les opérations complexes d’intégration et vous permettra de facilement étendre votre intégration à d’autres moyens de paiement par la suite. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. ```html Checkout ``` Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement. ```javascript // Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` Plutôt que d’envoyer la totalité de l’objet PaymentIntent au client, utilisez sa *clé secrète* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) provenant de l’étape précédente. Il ne s’agit pas de vos clés API qui authentifient les requêtes de l’API de Stripe. Le clé secrète du client doit néanmoins être manipulée avec précaution, car elle peut permettre de finaliser le paiement. Ne l’enregistrez pas dans les logs, ne l’intégrez pas dans des URL et ne l’exposez à personne d’autre que le client. Utilisez [stripe.confirmAcssDebitPayment](https://docs.stripe.com/js/payment_intents/confirm_acss_debit_payment) pour collecter les informations du compte bancaire et effectuer la vérification, confirmer le mandat et lancer le paiement lorsque l’utilisateur envoie le formulaire. Il est nécessaire d’inclure l’adresse électronique et le nom du client dans la propriété `billing_details` du paramètre `payment_method` pour créer un moyen de paiement pour le prélèvement préautorisé. ```javascript const form = document.getElementById('payment-form'); const accountholderName = document.getElementById('accountholder-name'); const email = document.getElementById('email'); const submitButton = document.getElementById('submit-button'); const clientSecret = submitButton.dataset.secret; form.addEventListener('submit', async (event) => { event.preventDefault(); const {paymentIntent, error} = await stripe.confirmAcssDebitPayment( clientSecret, { payment_method: { billing_details: { name: accountholderName.value, email: email.value, }, }, } ); if (error) { // Inform the customer that there was an error. console.log(error.message); } else { // Handle next step based on PaymentIntent's status. console.log("PaymentIntent ID: " + paymentIntent.id); console.log("PaymentIntent status: " + paymentIntent.status); } }); ``` Stripe.js charge ensuite une interface utilisateur du modal sur la page qui gère la collecte et la vérification des informations du compte bancaire, présente un accord de mandat hébergé et collecte l’autorisation. > `stripe.confirmAcssDebitPayment` peut prendre plusieurs secondes. Pendant ce temps, bloquez le renvoi de votre formulaire et affichez un indicateur d’attente. Si vous recevez une erreur, montrez-la au client, réactivez le formulaire et masquez l’indicateur d’attente. Si le client termine le processus de vérification instantanée, l’abonnement devient automatiquement `active`. Sinon, consultez la section suivante pour gérer la vérification à l’aide de microversements pendant que l’abonnement reste `incomplete`. ## Vérifier le compte bancaire à l'aide de microversements [Côté client] > Les clients disposent de 10 jours pour vérifier les micro-virements pour un abonnement, au lieu des 23 heures normalement accordées dans le [cycle de vie de l’abonnement](https://docs.stripe.com/billing/subscriptions/overview.md#subscription-lifecycle). Cependant, cette expiration ne peut pas être postérieure à la [date de la période de facturation](https://docs.stripe.com/billing/subscriptions/acss-debit.md#billing-cycle). Tous les clients ne peuvent pas vérifier instantanément le compte bancaire. Cette étape ne s’applique que si votre client a choisi de se désinscrire du flux de vérification instantanée dans l’étape précédente. Dans ce cas, Stripe envoie automatiquement deux microversements sur le compte bancaire du client. Ces versements sont effectués sous un à deux jours ouvrables avant d’apparaître sur le relevé en ligne du client et sont accompagnés de libellés de relevé bancaire contenant `ACCTVERIFY`. Le résultat de l’appel du moyen de paiement `stripe.confirmAcssDebitPayment` dans la configuration précédente est un PaymentIntent avec l’état `requires_action`. Le PaymentIntent contient un champ `next_action` qui contient des informations utiles pour effectuer la vérification. Stripe informe votre client de la date à laquelle les versements devraient arriver en envoyant un message à [l’adresse e-mail de facturation](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-billing_details-email). L’e-mail inclut un lien vers la page de vérification hébergée par Stripe où il peut confirmer les montants des versements et effectuer la vérification. Le nombre de tentatives de vérification infructueuses est limité à trois. Si cette limite est dépassée, le compte bancaire ne peut plus être vérifié. Par ailleurs, les vérifications par micro-dépôts expirent au bout de 10 jours. Si les micro-dépôts ne sont pas vérifiés dans ce délai, le PaymentIntent revient à l’état exigeant de nouvelles informations de moyen de paiement. Des messages clairs expliquant ce que sont ces micro-dépôts et comment vous les utilisez peuvent aider vos clients à éviter les problèmes de vérification. ### Facultatif : un e-mail et une page de vérification personnalisés Si vous avez préalablement choisi d’envoyer des [notifications personnalisées par e-mail](https://docs.stripe.com/payments/acss-debit.md#mandate-and-debit-notification-emails), vous devez à la place envoyer un e-mail à votre client. Pour ce faire, vous pouvez utiliser l’URL `verify_with_microdeposits[hosted_verification_url]` dans l’objet `next_action` pour que votre client puisse effectuer le processus de vérification. Si vous envoyez des e-mails personnalisés et ne souhaitez pas utiliser la page de vérification hébergée par Stripe, vous pouvez créer un formulaire sur votre site afin que vos clients vous communiquent ces montants et vérifier le compte bancaire à l’aide de [Stripe.js](https://docs.stripe.com/js/payment_intents/verify_microdeposits_for_payment). ```javascript stripe.verifyMicrodepositsForPayment(clientSecret, { amounts: [32, 45], }); ``` ## Configurer le moyen de paiement par défaut [Serveur] Vous disposez à présent d’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) actif appartenant à un client avec un moyen de paiement défini, mais ce dernier ne sera pas automatiquement utilisé pour les futurs paiements. À l’avenir, si vous souhaitez débiter automatiquement ce moyen de paiement, utilisez un consommateur de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) pour écouter l’événement `invoice.payment_succeeded` pour votre nouvel abonnement et pour définir le moyen de paiement par défaut. #### 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. Stripe.api_key = '<>' if event.type == 'invoice.payment_succeeded' invoice = event.data.object if invoice['billing_reason'] == 'subscription_create' subscription_id = invoice['parent']['subscription_details']['subscription'] # This example assumes you're using the default PaymentIntent that Stripe generated for the invoice. invoice_payments = Stripe::InvoicePayment.list({invoice: invoice['id']}) payment_intent_id = invoice_payments.data[0].payment.payment_intent # Retrieve the payment intent used to pay the subscription payment_intent = Stripe::PaymentIntent.retrieve(payment_intent_id) # Set the default payment method Stripe::Subscription.update( subscription_id, default_payment_method: payment_intent.payment_method ) end end ``` ## Gérer l'état de l'abonnement [Côté client] Lorsque le paiement initial aboutit, l’état de l’abonnement est `active` et aucune action supplémentaire n’est requise. Lorsque le paiement échoue, l’état passe à l’**état de l’abonnement** configuré dans vos [paramètres d’encaissement automatique](https://docs.stripe.com/invoicing/automatic-collection.md). Informez le client en cas d’échec et [débiter le avec un autre moyen de paiement](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). > Les paiements par prélèvement automatique canadien ne sont jamais automatiquement relancés, même si vous avez configuré une [planification de relance](https://docs.stripe.com/invoicing/automatic-collection.md) pour les autres moyens de paiement. ## Tester votre intégration ### Tokens de moyens de paiement de test Utilisez des tokens de moyens de paiement de test pour tester votre intégration sans avoir à saisir manuellement les informations du compte bancaire. Ces tokens contournent les étapes de collecte et de vérification du compte bancaire. | Token | Scénario | | --------------------------------- | --------------------------------------------------------------------- | | `pm_acssDebit_success` | Le paiement est effectué immédiatement après l’acceptation du mandat. | | `pm_acssDebit_noAccount` | Le paiement échoue car aucun compte n’est trouvé. | | `pm_acssDebit_accountClosed` | Le paiement échoue parce que le compte est clôturé. | | `pm_acssDebit_insufficientFunds` | Le paiement échoue en raison de fonds insuffisants. | | `pm_acssDebit_debitNotAuthorized` | Le paiement échoue parce que les débits ne sont pas autorisés. | | `pm_acssDebit_dispute` | Le paiement est effectué mais déclenche un litige | ### Numéros de comptes de test Stripe fournit plusieurs numéros de compte test que vous pouvez utiliser pour vous assurer que votre intégration pour les comptes bancaires saisis manuellement sont prêts pour le mode production. Tous les comptes test avec un paiement qui réussit ou échoue automatiquement doivent être vérifiés à l’aide des montants de microversement test ci-dessous avant de pouvoir être effectués. | Numéro d’établissement | Numéro de transit | Numéro de compte | Scénario | | ---------------------- | ----------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `000` | `11000` | `000123456789` | Réussite immédiate du paiement après la vérification des microversements. | | `000` | `11000` | `900123456789` | Réussite du paiement avec un délai de trois minutes après la vérification des microversements. | | `000` | `11000` | `000222222227` | Échec immédiat du paiement après la vérification des microversements. | | `000` | `11000` | `900222222227` | Échec du paiement avec un délai de trois minutes après la vérification des microversements. | | `000` | `11000` | `000666666661` | Échec d’envoi des microversements de vérification. | | `000` | `11000` | `000777777771` | Échec du paiement, car le montant du paiement a entraîné le dépassement de la limite de volume de paiement hebdomadaire du compte. | | `000` | `11000` | `000888888881` | Échec du paiement, car son montant dépasse la limite du volume de transactions du compte. | Pour simuler les réussites ou les échecs de la vérification des comptes bancaires dans un environnement de test, utilisez ces montants représentatifs pour les microversements : | Valeurs des micro-versements | Scénario | | ----------------------------------- | ----------------------------------------------------------------------- | | `32` et `45` | Vérification du compte réussie. | | `10` et `11` | Simule le dépassement du nombre de tentatives de vérification autorisé. | | Toute autre combinaison de montants | Échec de la vérification du compte. | ## Optional: Définition de la période de facturation Lorsque vous créez un abonnement, le système définit automatiquement le cycle de facturation par défaut. Par exemple, si un client s’abonne à un plan mensuel le 7 septembre, il est ensuite facturé le 7 de chaque mois. Certaines entreprises préfèrent définir le cycle de facturation manuellement afin de pouvoir facturer leurs clients conjointement à chaque cycle. L’argument [billing cycle anchor](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_cycle_anchor) vous permet d’effectuer cette opération. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d billing_cycle_anchor=1611008505 ``` La définition manuelle du cycle de facturation facture automatiquement au client un montant au prorata pour la période écoulée entre la création de l’abonnement et la date de début du cycle de facturation. Si vous ne souhaitez pas que les clients soient facturés pour cette période, vous pouvez définir l’argument [proration_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-proration_behavior) sur `none`. Vous pouvez également combiner la date de début du cycle de facturation avec des [périodes d’essai](https://docs.stripe.com/billing/subscriptions/acss-debit.md#trial-periods) pour permettre aux clients d’accéder gratuitement à votre produit et ensuite leur facturer un montant au prorata. ## Optional: Périodes d'essai avant abonnement Les essais gratuits permettent aux clients d’accéder à votre produit pendant une certaine période sans être facturés. Pour définir une période d’essai, transmettez un horodatage dans [trial_end](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-trial_end). > Utiliser des essais gratuits ne produit pas les mêmes résultats que de régler le paramètre [proration_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-proration_behavior) sur `none` car vous pouvez personnaliser la durée de la période gratuite. Lorsque vous lancez un abonnement comportant une période d’essai avec la valeur du paramètre [payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) définie sur `default_incomplete`, Stripe renvoie une valeur `pending_setup_intent` dans l’objet Subscription. Consultez la documentation pour en savoir plus sur l’objet [SetupIntent](https://docs.stripe.com/api/setup_intents.md). #### curl ```bash curl https://api.stripe.com/v1/subscriptions \ -u <>: \ -d "customer"="cus_4fdAW5ftNQow1a" \ -d "items[0][price]"="price_CBb6IXqvTLXp3f" \ -d "payment_behavior"="default_incomplete" \ -d "payment_settings[payment_method_types][]"="acss_debit" \ -d "trial_end"=1610403705 \ -d "expand[0]"="pending_setup_intent" ``` Renvoyez le `client_secret` du `pending_setup_intent` de l’abonnement au front-end pour terminer la configuration. Cette étape est nécessaire pour réussir à initier un paiement pour le premier cycle de facturation. Suivez les instructions des sections [Recueillir les informations du moyen de paiement et la confirmation du mandat](https://docs.stripe.com/billing/subscriptions/acss-debit.md#collect-payment-and-mandate) et [Vérifier le compte bancaire à l’aide de microversements](https://docs.stripe.com/billing/subscriptions/acss-debit.md#verify-with-microdeposits), mais utilisez `Stripe.confirmAcssDebitSetup` instead of `Stripe.confirmAcssDebitPayment`. Si votre client choisit la vérification à l’aide de microversements, utilisez `Stripe.verifyMicrodepositsForSetup` au lieu de `Stripe.verifyMicrodepositsForPayment`. Après vérification, le SetupIntent passe immédiatement à l’état `succeeded`, et Stripe définit automatiquement le `default_payment_method` de l’abonnement sur le nouveau *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs). Vous pouvez également combiner une [ancre du cycle de facturation](https://docs.stripe.com/billing/subscriptions/acss-debit.md#billing-cycle) avec une période d’essai gratuite. Par exemple, le 15 septembre, vous souhaitez offrir à votre client une période d’essai gratuite de sept jours, puis commencer la période de facturation normale le 1er octobre. Vous pouvez définir la fin de la période d’essai gratuite au 22 septembre et l’ancre du cycle de facturation au 1er octobre. Le client bénéficie ainsi d’une période d’essai gratuite de sept jours, puis se voit facturer un montant au prorata pour la période comprise entre la fin de la période d’essai et le 1er octobre. Le 1er octobre, vous lui facturez le montant normal de l’abonnement pour sa première période de facturation complète. ## Optional: Enregistrement des informations de moyen de paiement pour utilisation ultérieure Vous pouvez également enregistrer le moyen de paiement par prélèvement automatique canadien de votre client en vue d’une utilisation automatique avec les factures, les abonnements ou les calendriers d’abonnement que vous créerez ultérieurement. Vous pouvez le faire à l’aide d’un objet [SetupIntent](https://docs.stripe.com/api/setup_intents.md), qui représente votre intention de sauvegarder le moyen de paiement d’un client en vue de paiements futurs. Le `SetupIntent` suivra les étapes de ce processus de configuration. Suivez les instructions relatives à la [sauvegarde des informations pour les paiements ultérieurs par prélèvement automatique au Canada](https://docs.stripe.com/payments/acss-debit/set-up-payment.md), mais fournissez un ensemble différent de `mandate_options` pour recueillir l’autorisation pour les abonnements et les factures. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=acss_debit" \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_options[acss_debit][currency]=cad" \ -d "payment_method_options[acss_debit][mandate_options][default_for][]=invoice" \ -d "payment_method_options[acss_debit][mandate_options][default_for][]=subscription" ``` Une fois que le `SetupIntent` atteint l’état `succeeded`, mettez à jour le `default_payment_method` de votre client. #### 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. Stripe.api_key = '<>' if event.type == 'setup_intent.succeeded' setup_intent = event.data.object customer_id = setup_intent['customer'] payment_method_id = setup_intent['payment_method'] # Set the default payment method Stripe::Customer.update( customer_id, { invoice_settings: { default_payment_method: payment_method_id } } ) end ```