Enregistrez vos informations pour vos futurs paiements par prélèvement automatique canadien
Enregistrez les informations du moyen de paiement pour vos futurs paiements par prélèvement automatique canadien.
Vous pouvez utiliser l’API Setup Intents pour collecter à l’avance les données d’un moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Cette possibilité est utile pour :
- Enregistrer des moyens de paiement dans un portefeuille pour faciliter les futurs achats
- Encaisser des suppléments de facturation après la prestation d’un service
- Mettre en place une période d’essai gratuite pour un abonnement
Au Canada, la majorité des comptes bancaires sont libellés en dollars canadiens (CAD). Quelques comptes sont cependant libellés dans d’autres devises, comme le dollar américain (USD). Il est possible d’accepter les paiements par prélèvement automatique en CAD ou USD, mais il est essentiel de choisir la devise adaptée à vos clients pour éviter tout échec 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 ce genre d’échec, le plus sûr est de configurer les comptes bancaires associés au prélèvement automatique en CAD, à moins d’être certain que les comptes de vos clients acceptent les prélèvements en USD.
Configurer StripeCôté serveur
Pour commencer, il vous faut un compte Stripe. S’inscrire.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
Créer ou récupérer un objet CustomerCôté serveur
Pour réutiliser un compte bancaire à l’occasion de paiements ultérieurs, le compte en question doit être associé à un objet Customer.
Vous devez créer un objet Customer lorsque votre client crée un compte auprès de votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne d’un client, vous pourrez récupérer et utiliser ultérieurement les informations du moyen de paiement sauvegardées. Si votre client n’a pas encore créé de compte, vous pouvez toujours créer un objet Customer dès maintenant et l’associer ultérieurement à votre représentation interne du compte de ce client.
Créez ou récupérez un objet Customer client afin de l’associer à ces informations de paiement. Ajoutez le code suivant à votre serveur pour créer un objet Customer.
Créer un SetupIntentCôté serveur
Un SetupIntent est un objet qui représente votre intention de configurer le moyen de paiement d’un client en vue de futurs paiements. Le SetupIntent
suit les étapes de ce processus de configuration.
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). L’objet Mandate enregistre le mandat et l’autorisation.
Créez un SetupIntent sur votre serveur en définissant payment_method_types sur acss_
et indiquez l’ID du client. Pour définir la fréquence des paiements sur l’objet Mandate pour ce SetupIntent, intégrez également les paramètres suivants :
Paramètre | Valeur | Obligatoire ? |
---|---|---|
payment_ | Devise à utiliser pour les futurs paiements effectués avec ce moyen de paiement. Elle doit correspondre à la devise du compte bancaire du client. Les valeurs acceptées sont cad ou usd . | Oui |
payment_ | 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 pour vous aider à sélectionner la fréquence la plus adaptée à votre entreprise. | Oui |
payment_ | Description textuelle de la période de fréquence des paiements. Consultez la section Mandats de prélèvement automatique pour vous aider à élaborer la description de période la plus adaptée à votre entreprise. | Si la valeur payment_ est définie sur interval ou combined |
payment_ | Le type de mandat que vous créez, qu’il s’agisse d’un mandat personal (si votre client est un particulier) ou business (si votre client est une entreprise). | Oui |
Récupérer la clé secrète du client
Le SetupIntent contient une clé secrète à 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.
Collecter les informations du moyen de paiement et obtenir la confirmation du mandatCô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 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.
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>
Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement.
// 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(
);'pk_test_TYooMQauvdEDq54NiTphI7jx'
Plutôt que d’envoyer la totalité de l’objet PaymentIntent au client, utilisez sa clé secrète 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.
La clé secrète du client doit être utilisée avec prudence, car elle peut servir à finaliser le paiement. Elle ne doit être ni enregistrée, ni intégrée dans des URL, ni dévoilée à d’autres personnes que votre client.
Utilisez stripe.confirmAcssDebitSetup pour collecter les informations du compte bancaire et effectuer la vérification, confirmer le mandat et lancer la configuration 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_
du paramètre payment_
pour créer un moyen de paiement pour le prélèvement préautorisé.
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 {setupIntent, error} = await stripe.confirmAcssDebitSetup( 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 SetupIntent's status. console.log("SetupIntent ID: " + setupIntent.id); console.log("SetupIntent status: " + setupIntent.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.
Note
stripe.
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 SetupIntent avec l’un des possibles états suivants :
État | Description | Prochaine étape |
---|---|---|
succeeded | Le compte bancaire a été instantanément vérifié ou la vérification n’était pas nécessaire. | Aucune action requise |
requires_ | 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 |
Une fois le SetupIntent confirmé, une confirmation de mandat et les informations du compte bancaire collectées doivent être envoyées par e-mail à votre client. Stripe gère cette étape par défaut, mais vous pouvez choisir, si vous préférez, d’envoyer des notifications personnalisées.
Note
Aucun e-mail de confirmation de mandat ne sera envoyé à 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 :
{ "error": { "type": "validation_error", "code": "incomplete_payment_details", "message": "Please provide complete payment details." } }
Vérifier le compte bancaire à l'aide de micro-versementsCô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.
In this case, Stripe automatically sends two micro-deposits to the customer’s bank account. These deposits take 1–2 business days to appear on the customer’s online statement and have statement descriptors that include ACCTVERIFY
.
Le résultat de l’appel du moyen de paiement stripe.
est un SetupIntent avec l’état requires_
. Le SetupIntent contient un champ next_
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. 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.
La limite pour la vérification est fixée à trois tentatives. Si cette limite est dépassée, le compte bancaire ne peut plus être vérifié. De plus, les vérifications des microversements expirent sous 10 jours. Si les micro-versements ne sont pas vérifiés dans ce laps de temps, le Paymentintent rétablit les informations du nouveau moyen de paiement. Une communication claire à propos de ces microversements et leur utilisation peut aider vos clients à éviter des difficultés liées à la 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, vous devez à la place envoyer un e-mail à votre client. Pour ce faire, vous pouvez utiliser l’URL verify_
dans l’objet next_
pour que votre client puisse effectuer le processus de vérification.
Si vous envoyez des e-mails personnalisés et que vous ne souhaitez pas utiliser la page de vérification hébergée par Stripe, vous pouvez créer un formulaire sur votre site pour que vos clients puissent vous indiquer ces montants et vérifier le compte bancaire à l’aide de Stripe.js.
stripe.verifyMicrodepositsForSetup(clientSecret, { amounts: [32, 45], });
Lorsque le compte bancaire est vérifié, Stripe renvoie l’objet SetupIntent avec un status
succeeded
et envoie un événement webhook setup_
.
La vérification peut échouer pour plusieurs raisons. L’échec peut se produire de manière synchrone comme une réponse d’erreur directe, ou de manière asynchrone à travers un événement webhook setup_
(voir les exemples suivants).
Code d’erreur | Synchrone ou asynchrone | Message | Changement d’état |
---|---|---|---|
payment_ | 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_ et last_ est défini. |
payment_ | De façon synchrone | Les montants fournis ne correspondent pas à ceux envoyés au compte bancaire. Il vous reste {attempts_remaining} tentatives de vérification du compte. | Inchangé |
payment_ | 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_ et last_ est défini. |
payment_ | 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_ et last_ est défini. |
Tester votre intégration
Recevoir un e-mail de vérification du micro-versement
Afin de recevoir l’e-mail de vérification du microversement dans le mode test 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_
dans le formulaire de {any_
lors de la confirmation des informations du moyen de paiement.
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 | Fails the payment due to the payment amount causing the account to exceed its weekly payment volume limit. |
000 | 11000 | 000888888881 | Fails the payment due to the payment amount exceeding the account’s transaction limit. |
Pour simuler les réussites ou les échecs de la vérification des comptes bancaires dans le mode test, utilisez ces montants représentatifs pour les microversements :
Valeurs des micro-versements | Scénario |
---|---|
32 et 45 | Vérification du compte réussie. |
Toute autre combinaison de montants | Échec de la vérification du compte. |