# Accepter un paiement par prélèvement automatique canadien Créez un formulaire de paiement personnalisé ou utilisez Stripe Checkout pour accepter des paiements avec prélèvement automatique au Canada. # Paiement > This is a Paiement for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/acss-debit/accept-a-payment?payment-ui=checkout. Pour accepter les paiements par débit pré-autorisé (DPA) canadiens sur votre site Web, vous devez créer un objet permettant de suivre un paiement, recueillir les informations relatives au moyen de paiement et la confirmation du mandat, soumettre le paiement à Stripe pour traitement et vérifier le compte bancaire de votre client. Avec Checkout, vous pouvez créer une session Checkout avec `acss_debit` comme type de moyen de paiement pour suivre et gérer les états du paiement jusqu’à ce qu’il aboutisse. > Pre-authorized debit in Canada est un **moyen de paiement à notification différée**, ce qui signifie que les fonds ne sont pas disponibles immédiatement après paiement. Il faut généralement **5 business days** pour qu’un paiement arrive sur votre compte. ## Déterminer la compatibilité **Région du client** : Canada **Devises prises en charge** : `cad, usd` **Devises de règlement** : `cad, usd` **Mode de paiement** : Yes **Mode de configuration** : Yes **Mode d’abonnement** : [Contact us](mailto:payment-methods-feedback@stripe.com?subject=PADs%20Subscription%20Mode%20User%20Interest) Pour prendre en charge les paiements par prélèvement automatique, une session Checkout doit remplir toutes les conditions suivantes : - Vous ne pouvez utiliser que des postes ponctuels (*les 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) ne sont pas encore pris en charge dans Checkout). - Les *tarifs* (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) de tous les postes doivent être exprimés en dollars canadiens ou américains (code de devise `cad` ou `usd`). - La devise doit être la même pour tous les postes. Si vous avez des postes dans diverses devises, créez des sessions Checkout distinctes pour chaque devise. ### Devise de présentation La plupart des comptes bancaires au Canada sont libellés en dollars canadiens (CAD), avec un petit nombre de comptes dans d’autres devises, notamment en dollars américains (USD). Il est possible d’accepter des paiements PAD en CAD ou en USD, mais il est important de choisir la devise adaptée à votre client afin d’éviter les échecs de paiement. Contrairement à de nombreux moyens de paiement par carte, vous pourriez ne pas être en mesure de prélever un montant en CAD d’un compte tenu en USD, ou inversement. La plupart du temps, ces tentatives de prélèvement engendre un échec de paiement différé dont la notification peut prendre jusqu’à cinq jours ouvrables. Pour éviter ces échecs, il est préférable d’accepter les paiements PAD en CAD, sauf si vous êtes certain que le compte de votre client accepte les prélèvements en USD. ## Accepter un paiement > Avant d’utiliser ce guide, commencez par créer une intégration permettant d’[accepter un paiement](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout) avec Checkout. Ce guide vous explique comment activer le prélèvement automatique canadien et présente les différences entre l’acceptation des paiements via des méthodes dynamiques et la configuration manuelle des moyens de paiement. ### Activer les paiements par prélèvement automatique canadien comme moyen de paiement Lors de la création d’une nouvelle [session Checkout](https://docs.stripe.com/api/checkout/sessions.md), vous devez : 1. Ajoutez `acss_debit` à la liste `payment_method_types`. - Si vous gérez les moyens de paiement dans le Dashboard, vous n’avez pas besoin d’inclure `payment_method_types` dans la session Paiement car les [moyens de paiement dynamiques](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) sont activés par défaut. Cependant, vous devez tout de même inclure `payment_method_options`. 1. Veiller à ce que tous vos `line_items` utilisent la devise `cad` 1. Définissez des paramètres [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit) supplémentaires pour décrire votre transaction. Découvrez plus d’informations à ce sujet ci-dessous. La [fréquence des paiements](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-acss_debit-mandate_options-payment_schedule) doit être définie, puis validée par les clients lors du paiement. Consultez la section [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates) pour obtenir plus d’informations l’option de mandat qui convient de sélectionner pour votre entreprise : | Paramètre | Valeur | Obligatoire | | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | `payment_method_options[acss_debit][mandate_options][payment_schedule]` | La fréquence des paiements définie dans le mandat. Les valeurs acceptées sont `interval`, `sporadic` ou `combined`. Consultez la section [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates) pour vous aider à sélectionner la fréquence la plus adaptée à votre entreprise. | Oui | | `payment_method_options[acss_debit][mandate_options][interval_description]` | Description textuelle de la fréquence des paiements. Consultez l’aperçu [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates) pour vous aider à élaborer la description de période la plus adaptée à votre entreprise. | Obligatoire si la valeur `payment_schedule` est définie sur `interval` ou `combined` | | `payment_method_options[acss_debit][mandate_options][transaction_type]` | Le type de transactions pour lesquelles vous utiliserez le mandat, qu’elles soient `personal` (si les transactions se font pour des raisons personnelles) ou `business` (si les transactions se font pour des raisons professionnelles). | Oui | ### Créer une session Checkout #### Une page hébergée par Stripe ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_types[0]=acss_debit" \ --data-urlencode "success_url=https://example.com/success" ``` #### Formulaire intégré ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_types[0]=acss_debit" \ --data-urlencode "return_url=https://example.com/return" \ -d ui_mode=embedded_page ``` Lors de la session Checkout, un modal d’interface utilisateur s’affiche pour le client. Il lui permet de gérer la collecte des informations de compte bancaire et la vérification instantanée, ainsi qu’une vérification supplémentaire facultative par microversements. Dans les rares situations où le client opte pour cette vérification par microversements, Stripe envoie automatiquement deux versements d’un faible montant au compte bancaire indiqué. Ces versements apparaissent au bout de un à deux jours ouvrables sur le relevé bancaire en ligne du client. Au moment de leur arrivée, le client reçoit un e-mail contenant un lien pour confirmer ces montants et vérifier le compte bancaire avec Stripe. Une fois terminé, le paiement est traité. ### Traiter vos commandes Maintenant que vous savez accepter des paiements, découvrez comment [traiter les commandes](https://docs.stripe.com/checkout/fulfillment.md). ## Tester l'intégration ### Recevoir un e-mail de vérification du micro-versement Pour recevoir l’e-mail de vérification du micro-versement 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) : 1. Dans Checkout, indiquez un e-mail au format `{any_prefix}+test_email@{any_domain}`. 1. Cliquez sur **Payer**. 1. Cliquez sur **Accepter** dans la fenêtre modale **Associer votre compte bancaire au paiement**. 1. Sélectionnez **Utiliser la vérification du micro-versements**. 1. Utilisez l’un des numéros de compte test suivants. 1. Cliquez sur **Confirmer**. 1. Cliquez sur **Accepter** pour accepter le **Contrat de prélèvement préautorisé**. ### 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. | ## Gérer les litiges et les remboursements La période de remboursement applicable aux prélèvements automatiques canadiens est limitée à 180 jours après le paiement d’origine. Le client a la possibilité de contester un paiement auprès de sa banque jusqu’à 90 jours calendaires après le paiement d’origine, et aucun recours n’est possible. Pour en savoir plus sur les [litiges liés à des prélèvements automatiques canadiens](https://docs.stripe.com/payments/acss-debit.md#disputed-payments). ## Autres considérations ### Échec de la vérification des microversements Lorsqu’un compte bancaire est en attente de vérification par micro-dépôts, le client peut ne pas parvenir à le vérifier pour deux raisons : - L’envoi des microversements au compte bancaire du client a échoué (en général, cela indique un compte bancaire fermé/non disponible ou un numéro de compte bancaire incorrect). - Le client a tenté trois vérifications ayant échoué pour le compte. Le dépassement de cette limite signifie que le compte bancaire ne peut plus être vérifié ou utilisé. - Le client n’a pas réussi à vérifier le compte bancaire dans les 10 jours. Si la vérification du compte bancaire échoue pour l’une de ces raisons, vous pouvez [gérer l’événement `checkout.session.async_payment_failed`](https://docs.stripe.com/api/events/types.md?event_types-invoice.payment_succeeded=#event_types-checkout.session.async_payment_failed) pour contacter le client et lui proposer de passer une nouvelle commande. ## Optional: Vérification instantanée uniquement [Côté serveur] Par défaut, les paiements par prélèvement préautorisé canadien permettent à vos clients d’utiliser soit la vérification instantanée du compte bancaire, soit les microdépôts. Vous pouvez exiger uniquement la vérification instantanée en utilisant le paramètre `payment_method_options[acss_debit][verification_method]` lors de la création de la session Checkout. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[0]=acss_debit" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ --data-urlencode "payment_method_options[acss_debit][mandate_options][interval_description]=On November 25, 2021" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=instant" \ --data-urlencode "success_url=https://example.com/success" ``` ## Optional: Vérification par microversements uniquement [Côté serveur] Par défaut, les paiements par prélèvement préautorisé canadien permettent à vos clients d’utiliser soit la vérification instantanée du compte bancaire, soit les microdépôts. Vous pouvez exiger uniquement la vérification par microdépôts en utilisant le paramètre `payment_method_options[acss_debit][verification_method]` lors de la création de la session Checkout. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[0]=acss_debit" \ -d "line_items[0][price_data][currency]=cad" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ --data-urlencode "payment_method_options[acss_debit][mandate_options][interval_description]=On November 25, 2021" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=microdeposits" \ --data-urlencode "success_url=https://example.com/success" ``` ## Optional: Configurer la date de prélèvement du client [Côté serveur] Vous pouvez contrôler la date à laquelle Stripe débite le compte bancaire d’un client à l’aide du paramètre [target date](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_options-acss_debit-target_date). La date cible doit être au moins trois jours dans le futur et ne pas dépasser 15 jours à compter de la date actuelle. La date cible permet de prévoir que l’argent quitte le compte du client à la date cible. Les dates cibles qui répondent à l’un des critères suivants retardent le débit jusqu’au prochain jour ouvrable disponible : - La date butoir est un week-end, un jour férié ou un autre jour non ouvrable. - La date butoir est fixée moins de trois jours ouvrables dans le futur. Ce paramètre fonctionne dans la mesure du possible. En effet, la banque de chaque client peut traiter les prélèvements à des dates différentes, en fonction des jours fériés locaux ou d’autres raisons. > Vous ne pouvez pas définir le [verification method](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_options-acss_debit-verification_method) to `microdeposits` lors de l’utilisation d’un [target date](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_options-acss_debit-target_date), car le processus de vérification pourrait prendre plus de temps que prévu, ce qui entraînerait des retards dans les paiements. ## See also - [En savoir plus sur le prélèvement automatique au Canada](https://docs.stripe.com/payments/acss-debit.md) - [Gestion des mandats](https://docs.stripe.com/payments/acss-debit.md#mandates) - [Exécution Checkout](https://docs.stripe.com/checkout/fulfillment.md) - [Personnaliser Checkout](https://docs.stripe.com/payments/checkout/customization.md) # API directe > This is a API directe for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/acss-debit/accept-a-payment?payment-ui=direct-api. Pour accepter les paiements par débit pré-autorisé (DPA) canadiens sur votre site Web, vous devez créer un objet permettant de suivre un paiement, recueillir les informations relatives au moyen de paiement et la confirmation du mandat, soumettre le paiement à Stripe pour traitement et vérifier le compte bancaire de votre client. Stripe utilise cet objet de paiement, le [Payment Intent](https://docs.stripe.com/payments/payment-intents.md), pour suivre et gérer l’ensemble des états du paiement jusqu’à son aboutissement. ## Configurer Stripe [Côté serveur] Pour commencer, il vous faut un compte Stripe. [S’inscrire](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 ou récupérer un objet Customer [Côté serveur] Pour réutiliser un compte bancaire à l’occasion de paiements ultérieurs, le compte en question doit être associé à 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). Vous devez créer un objet Customer lorsque votre client crée un compte auprès de votre entreprise. L’association de l’ID de l’objet Customer à votre propre représentation interne d’un client vous permet de récupérer et d’utiliser ultérieurement les informations stockées sur le moyen de paiement. Créez ou récupérez un objet Customer afin de l’associer à ce paiement. Pour créer un nouvel objet Customer, ajoutez le code ci-après sur votre serveur. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent [Côté serveur] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) est un objet qui représente votre intention de collecter un paiement auprès d’un client et qui suit le cycle de vie du processus de paiement [étape par étape](https://docs.stripe.com/payments/paymentintents/lifecycle.md). 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. Tout d’abord, créez un PaymentIntent sur votre serveur et spécifiez le montant à collecter et la devise ([habituellement `cad`](https://docs.stripe.com/payments/acss-debit.md#presentment-currency)). Si vous avez déjà une autre intégration utilisant l’[API Payment Intents](https://docs.stripe.com/payments/payment-intents.md), ajoutez `acss_debit` à la liste des [types de moyen de paiement](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) pour votre PaymentIntent. Spécifiez l’[id](https://docs.stripe.com/api/customers/object.md#customer_object-id) de l’objet Customer. Si vous souhaitez réutiliser le moyen de paiement dans le futur, fournissez le paramètre [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) avec une valeur de `off_session`. Pour définir une méthode de vérification et une fréquence de paiement sur l’objet [Mandate](https://docs.stripe.com/api/mandates.md) pour ce PaymentIntent, incluez également les paramètres suivants : | Paramètre | Valeur | Obligatoire | | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | `payment_method_options[acss_debit][mandate_options][payment_schedule]` | La fréquence des paiements définie dans le mandat. Les valeurs acceptées sont `interval`, `sporadic` ou `combined`. Consultez la section [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates) pour vous aider à sélectionner la fréquence la plus adaptée à votre entreprise. | Oui | | `payment_method_options[acss_debit][mandate_options][interval_description]` | Description textuelle de la période de fréquence des paiements. Consultez la section [Mandats de prélèvement automatique](https://docs.stripe.com/payments/acss-debit.md#mandates) pour vous aider à élaborer la description de période la plus adaptée à votre entreprise. | Si la valeur `payment_schedule` est définie sur `interval` ou `combined` | | `payment_method_options[acss_debit][mandate_options][transaction_type]` | Le type de transactions pour lesquelles vous utiliserez le mandat, qu’elles soient `personal` (si les transactions se font pour des raisons personnelles) ou `business` (si les transactions se font pour des raisons professionnelles). | Oui | ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" ``` ### Récupérer la clé secrète du client Le PaymentIntent contient une *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)) à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client. #### Application monopage Récupérez la clé secrète du client à partir d’un endpoint sur votre serveur, à l’aide de la fonction `fetch` du navigateur. Cette approche est recommandée si votre côté client est une application d’une seule page, en particulier si elle repose sur un framework front-end moderne tel que React. Créez l’endpoint de serveur qui gère la clé secrète du client : #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end ``` Récupérez ensuite la clé secrète du client à l’aide JavaScript côté client : ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Rendu côté serveur Transmettez la clé secrète à votre client depuis votre serveur. Cette approche fonctionne mieux si votre application génère du contenu statique sur le serveur avant de l’envoyer sur le navigateur. Ajoutez le [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) à votre formulaire de paiement. Dans votre code côté serveur, récupérez la clé secrète du client à partir du PaymentIntent : #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## Collecter et envoyer les informations du moyen de paiement [Côté client] 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. S’il réussit, Stripe renvoie un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) avec l’un des états suivants : | État | Description | Prochaine étape | | ----------------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `processing` | Le compte bancaire a été vérifié instantanément ou la vérification n’était pas nécessaire. | Étape 6 : [Confirmer le PaymentIntent qui a réussi](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md#web-confirm-paymentintent-succeeded) | | `requires_action` | Aucune action n’est requise pour effectuer la vérification du compte bancaire. | Étape 5 : [Vérifier le compte bancaire à l’aide de micro-versements](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md#web-verify-with-microdeposits) | Une fois la confirmation du PaymentIntent, une confirmation du mandat et des informations du compte bancaire collectées doivent être envoyées par e-mail à votre client. Stripe les gère par défaut mais, si vous le préférez, vous pouvez choisir d’[envoyer des notifications personnalisées](https://docs.stripe.com/payments/acss-debit.md#mandate-and-debit-notification-emails). > Les e-mails de confirmation de mandat ne sont pas envoyés à l’adresse e-mail du client lors des tests de l’intégration. Si le client choisit de fermer la boîte de dialogue modale sans terminer le flux de vérification, Stripe.js renvoie l’erreur suivante : ```json { "error": { "type": "validation_error", "code": "incomplete_payment_details", "message": "Please provide complete payment details." } } ``` ## Vérifier le compte bancaire à l'aide de micro-versements [Côté client] 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], }); ``` Lorsque le compte bancaire est vérifié, Stripe renvoie l’[objet PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) avec un `status` `processing` et envoie un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `payment_intent.processing`. La vérification peut échouer pour plusieurs raisons. L’échec peut survenir de manière synchrone sous la forme d’une réponse d’erreur directe, ou de manière asynchrone via un événement webhook `payment_intent.payment_failed` (présenté dans les exemples suivants). #### Erreur synchrone ```json { "error": { "code": "payment_method_microdeposit_verification_amounts_mismatch", "message": "The amounts provided do not match the amounts that were sent to the bank account. You have {attempts_remaining} verification attempts remaining.", "type": "invalid_request_error" } } ``` #### Événement webhook ```javascript { "object": { "id": "pi_1234", "object": "payment_intent", "customer": "cus_0246", ... "last_payment_error": { "code": "payment_method_microdeposit_verification_attempts_exceeded", "message": "You have exceeded the number of allowed verification attempts." }, ... "status": "requires_payment_method" } } ``` | Code d’erreur | Synchrone ou asynchrone | Message | Changement d’état | | ------------------------------------------------------------ | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | `payment_method_microdeposit_failed` | De façon synchrone ou asynchrone à travers un événement webhook | Les micro-versements ont échoué. Veuillez vérifier la validité des numéros de compte, de l’établissement et de transit fournis. | `status` est défini sur `requires_payment_method` et `last_payment_error` est défini. | | `payment_method_microdeposit_verification_amounts_mismatch` | De façon synchrone | Les montants fournis ne correspondent pas à ceux envoyés au compte bancaire. Il vous reste {attempts_remaining} tentative(s) de vérification. | Inchangé | | `payment_method_microdeposit_verification_attempts_exceeded` | De façon synchrone et asynchrone à travers un événement webhook | Dépassement du nombre de tentatives de vérification autorisé | `status` est défini sur `requires_payment_method` et `last_payment_error` est défini. | | `payment_method_microdeposit_verification_timeout` | De façon asynchrone à travers un événement webhook | Expiration du microversement. Le client n’a pas vérifié son compte bancaire dans le délai de 10 jours prévu. | `status` est défini sur `requires_payment_method` et `last_payment_error` est défini. | ## Confirmer l'aboutissement du PaymentIntent [Côté serveur] Les prélèvements automatiques canadiens sont un moyen de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). Cela signifie que pour recevoir une notification concernant le succès ou l’échec d’un paiement, il faut compter jusqu’à cinq jours ouvrables après avoir effectué un débit sur le compte du client. Initialement, le PaymentIntent que vous créez présente l’état `processing`. Une fois le paiement abouti, l’état du PaymentIntent passe de `processing` à `succeeded`. Les événements suivants sont envoyés lorsque le PaymentIntent change d’état : | Événement | Description | Étape suivante | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `payment_intent.processing` | Le paiement du client a bien été envoyé à Stripe. | Attendez que le paiement effectué aboutisse ou échoue. | | `payment_intent.succeeded` | Le paiement du client a abouti. | Traitez la commande de biens ou de services du client. | | `payment_intent.payment_failed` | Le paiement du client a été refusé. Ceci peut aussi s’appliquer en cas d’échec de la vérification à l’aide de microversements. | Envoyez un e-mail ou une notification push au client pour lui demander d’utiliser un autre moyen de paiement. Si le webhook a été envoyé suite à l’échec de la vérification à l’aide de micro-versements, l’utilisateur doit à nouveau saisir ses coordonnées bancaires. De nouveaux micro-versements seront déposés sur son compte. | Nous vous recommandons d’utiliser des [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) afin de *confirmer* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) que le paiement a réussi et d’informer le client que le paiement a été effectué. Vous pouvez également afficher les événements sur le [Dashboard Stripe](https://dashboard.stripe.com/test/events). ## Tester l'intégration ### Recevoir un e-mail de vérification du micro-versement Afin de recevoir l’e-mail de vérification du micro-versement dans l’*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) une fois la collecte des informations du compte bancaire et l’acceptation d’un mandat effectuées, fournissez un e-mail dans le champ `payment_method[billing_details][email]` dans le formulaire de `{any_prefix}+test_email@{any_domain}` lors de la confirmation des informations du moyen de paiement. ### 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: Vérification instantanée uniquement [Côté serveur] Par défaut, les paiements par prélèvement préautorisé canadien permettent à vos clients d’utiliser soit la vérification instantanée du compte bancaire, soit les microdépôts. Vous pouvez exiger uniquement la vérification instantanée en utilisant le paramètre [verification_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-verification_method) lors de la création du PaymentIntent. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=instant" ``` ## Optional: Vérification par microversements uniquement [Côté serveur] Par défaut, les paiements par prélèvement préautorisé canadien permettent à vos clients d’utiliser soit la vérification instantanée du compte bancaire, soit les microdépôts. Vous pouvez exiger uniquement la vérification par microdépôts en utilisant le paramètre [verification_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-verification_method) lors de la création du PaymentIntent. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=cad \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=acss_debit" \ -d "payment_method_options[acss_debit][mandate_options][payment_schedule]=interval" \ -d "payment_method_options[acss_debit][mandate_options][interval_description]=First day of every month" \ -d "payment_method_options[acss_debit][mandate_options][transaction_type]=personal" \ -d "payment_method_options[acss_debit][verification_method]=microdeposits" ``` ## Optional: Configurer la date de prélèvement du client [Côté serveur] Vous pouvez contrôler la date à laquelle Stripe débite le compte bancaire d’un client à l’aide de la [date butoir](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-acss_debit-target_date). La date cible doit être fixée au moins trois jours dans le futur et pas plus de 15 jours après la date actuelle. La date butoir indique la date à laquelle les fonds doivent avoir quitté le compte du client. Vous pouvez [annuler un PaymentIntent](https://docs.stripe.com/api/payment_intents/cancel.md) créé avec une date butoir jusqu’à trois jours ouvrables avant la date configurée. Si la date butoir indiquée répond à l’un des critères suivants, le débit a lieu le jour ouvrable suivant : - La date butoir est un week-end, un jour férié ou un autre jour non ouvrable. - La date butoir est fixée moins de trois jours ouvrables dans le futur. Ce paramètre fonctionne dans la mesure du possible. En effet, la banque de chaque client peut traiter les prélèvements à des dates différentes, en fonction des jours fériés locaux ou d’autres raisons. > Vous ne pouvez pas définir la [méthode de vérification](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options--acss_debit-verification_method) sur `microdeposits` lorsque vous utilisez une [date butoir](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-acss_debit-target_date), car le processus de vérification pourrait dépasser la date butoir, entraînant un retard des paiements. ## See also - [Enregistrer les informations des prélèvements automatiques canadiens pour de futurs paiements](https://docs.stripe.com/payments/acss-debit/set-up-payment.md)