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.
Accepter un paiement par prélèvement automatique (PA) sur votre site Web consiste à créer un objet afin de suivre un paiement, à recueillir les informations de moyen de paiement et la confirmation du mandat, puis à envoyer le paiement à Stripe pour traitement et vérification du compte bancaire de votre client.
Stripe utilise cet objet de paiement, le Payment Intent, pour suivre et gérer l’ensemble des états du paiement jusqu’à son aboutissement.
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. 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.
Créer un PaymentIntentCôté serveur
Un PaymentIntent 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.
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.
Tout d’abord, créez un PaymentIntent sur votre serveur et spécifiez le montant à collecter et la devise (habituellement cad
). Si vous avez déjà une autre intégration utilisant l’API Payment Intents, ajoutez acss_
à la liste des types de moyen de paiement pour votre PaymentIntent. Spécifiez l’id de l’objet Customer.
Si vous souhaitez réutiliser le moyen de paiement dans le futur, fournissez le paramètre setup_future_usage avec une valeur de off_
.
Afin de définir une méthode de vérification et de planification de paiement sur le mandate pour ce PaymentIntent, incluez également les paramètres suivants :
Paramètre | Valeur | Obligatoire ? |
---|---|---|
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 PaymentIntent 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 et envoyer les informations du moyen de paiementCô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.confirmAcssDebitPayment 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_
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 {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.
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 PaymentIntent avec l’un des états suivants :
État | Description | Prochaine étape |
---|---|---|
processing | Le compte bancaire a été instantanément vérifié ou la vérification n’était pas nécessaire. | Étape 6 : Confirmer le PaymentIntent qui a réussi |
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 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.
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.
dans la configuration précédente est un PaymentIntent avec l’état requires_
. Le PaymentIntent 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.verifyMicrodepositsForPayment(clientSecret, { amounts: [32, 45], });
Lorsque le compte bancaire est vérifié, Stripe renvoie l’objet PaymentIntent avec un status
processing
et envoie un événement webhook payment_
.
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 payment_
(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. |
Confirmer l'aboutissement du PaymentIntentCôté serveur
Les prélèvements automatiques canadiens sont un moyen de paiement à notification différée. 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_ | Le paiement du client a été correctement envoyé à Stripe. | Attendez que le paiement effectué aboutisse ou échoue. |
payment_ | Le paiement du client a abouti. | Traitez la commande de biens ou de services du client. |
payment_ | Le paiement du client a été refusé. Ceci peut aussi s’appliquer à l’échec de vérification d’un micro-versement. | Contactez le client via une notification par e-mail ou push et demandez un autre moyen de paiement. Si le webhook a été envoyé suite à l’échec de vérification d’un micro-versement, l’utilisateur doit de nouveau saisir ses détails de compte bancaire et de nouveaux micro-versements seront déposés sur son compte. |
Nous vous recommandons d’utiliser des webhooks afin de confirmer 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.
Tester l'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. |