Configurer un abonnement par prélèvement automatique ACH
Note
Contrairement à ce qui est indiqué dans ce guide, nous recommandons aux nouveaux utilisateurs d’utiliser le composant Payment Element plutôt que Stripe Elements. Le composant Payment Element propose un chemin d’intégration avec peu de code et des optimisations de conversion intégrées. Pour connaître la procédure à suivre, consultez la documentation consacrée à la création d’un abonnement.
Créer un produit et un tarifDashboard
Les produits correspondent aux articles ou services que vous vendez. Les tarifs 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 USD pour un abonnement mensuel. Pour modéliser ceci :
- Rendez-vous à la page Ajouter un produit.
- Saisissez un Nom pour le produit.
- Saisissez 15 pour le tarif.
- Sélectionnez la devise USD.
- Cliquez sur Enregistrer le 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'abonnementCôté serveur
Note
Pour créer un abonnement avec une période d’essai gratuite, consultez la documentation relative aux périodes d’essai des abonnements.
Créez un abonnement avec le tarif et le client à l’état incomplete
en fournissant le paramètre payment_behavior défini sur la valeur default_incomplete
.
La réponse inclut le premier PaymentIntent de l’abonnement, qui contient une clé secrète à utiliser côté client pour finaliser le processus de paiement en toute sécurité, plutôt que de transmettre l’objet PaymentIntent dans son intégralité. Renvoyez le client_secret
au front-end pour finaliser le paiement.
Collecter les informations du moyen de paiementCôté client
Lorsqu’un client clique pour payer avec ACH Direct 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.
Utilisez la clé secrète du client avec prudence, car elle peut servir à finaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne la dévoilez à personne d’autre que votre client.
Utilisez stripe.collectBankAccountForPayment pour collecter les coordonnées bancaires avec Financial Connections, créer un objet PaymentMethod et l’associer au PaymentIntent. Pour créer un PaymentMethod par prélèvement automatique ACH, vous devez obligatoirement inclure le nom du titulaire du compte dans le paramètre billing_details
.
// Use the form that already exists on the web page. const paymentMethodForm = document.getElementById('payment-method-form'); const confirmationForm = document.getElementById('confirmation-form'); paymentMethodForm.addEventListener('submit', (ev) => { ev.preventDefault(); const accountHolderNameField = document.getElementById('account-holder-name-field'); const emailField = document.getElementById('email-field'); // Calling this method will open the instant verification dialog. stripe.collectBankAccountForPayment({ clientSecret: clientSecret, params: { payment_method_type: 'us_bank_account', payment_method_data: { billing_details: { name: accountHolderNameField.value, email: emailField.value, }, }, }, expand: ['payment_method'], }) .then(({paymentIntent, error}) => { if (error) { console.error(error.message); // PaymentMethod collection failed for some reason. } else if (paymentIntent.status === 'requires_payment_method') { // Customer canceled the hosted verification modal. Present them with other // payment method type options. } else if (paymentIntent.status === 'requires_confirmation') { // We collected an account - possibly instantly verified, but possibly // manually-entered. Display payment method details and mandate text // to the customer and confirm the intent once they accept // the mandate. confirmationForm.show(); } }); });
Le flux d’authentification de Stripe Financial Connections gère automatiquement la collecte et la vérification des informations de compte bancaire. Lorsque votre client termine le flux d’authentification, le PaymentMethod est automatiquement associé au PaymentIntent, et créée un compte Financial Connections.
Erreur fréquente
Les comptes bancaires que vos clients associent par saisie manuelle ou par le biais de microversements ne fourniront pas d’accès à certaines données supplémentaires comme le solde, le propriétaire et les transactions.
Afin de proposer une expérience utilisateur optimale quel que soit l’appareil utilisé, définissez le paramètre minimum-scale
de la fenêtre d’affichage de votre page sur 1 à l’aide de la balise meta
.
<meta name="viewport" content="width=device-width, minimum-scale=1" />
Collecter et envoyer l'accusé de réception du mandatCôté client
Avant de pouvoir initier le paiement, vous devez obtenir l’autorisation de votre client en affichant les conditions du mandat pour qu’il les accepte.
Pour vous conformer aux règles de la Nacha, vous devez obtenir l’autorisation d’initier le paiement auprès de votre client. Pour ce faire, présentez-lui les conditions du mandat et demandez-lui de les accepter. Pour en savoir plus sur les mandats, consultez la page correspondante.
Lorsque le client accepte les conditions du mandat, vous devez confirmer le PaymentIntent. Utilisez stripe.confirmUsBankAccountPayment pour mener à bien le paiement une fois que le client a soumis le formulaire.
confirmationForm.addEventListener('submit', (ev) => { ev.preventDefault(); stripe.confirmUsBankAccountPayment(clientSecret) .then(({paymentIntent, error}) => { if (error) { console.error(error.message); // The payment failed for some reason. } else if (paymentIntent.status === "requires_payment_method") { // Confirmation failed. Attempt again with a different payment method. } else if (paymentIntent.status === "processing") { // Confirmation succeeded! The account will be debited. // Display a message to customer. } else if (paymentIntent.next_action?.type === "verify_with_microdeposits") { // The account needs to be verified via microdeposits. // Display a message to consumer with next steps (consumer waits for // microdeposits, then enters a statement descriptor code on a page sent to them via email). } }); });
Note
L’exécution de stripe.confirmUsBankAccountPayment peut prendre plusieurs secondes. Pendant ce temps, désactivez la possibilité de soumettre à nouveau votre formulaire et affichez un indicateur d’attente (une boucle de progression, par exemple). 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 bascule automatiquement sur active
. Sinon, consultez la section Vérifier le compte bancaire à l’aide de microversements pour apprendre à gérer la vérification à l’aide de microversements pendant que l’abonnement reste incomplete
.
Vérifier le compte bancaire à l'aide de microversementsCôté client
Note
Dans le cadre d’un abonnement, les clients ont 10 jours pour vérifier les microversements, au lieu des 23 heures habituellement accordées dans le cycle de vie d’un abonnement. Toutefois, cette date d’expiration ne peut pas être postérieure à la date de début du cycle de facturation.
Not all customers can verify the bank account instantly. This step only applies if your customer has elected to opt out of the instant verification flow in the previous step.
Dans ce cas, Stripe envoie un microversement descriptor_code
ou amount
si un problème survient au cours de la vérification du compte bancaire. Ces microversements apparaissent sur le relevé en ligne du client sous 1 à 2 jours ouvrables.
- Code de libellé : Stripe envoie un microversement unique de 0,01 USD sur le compte bancaire du client avec un
descriptor_code
unique à 6 chiffres qui commence par SM. Votre client utilise cette chaîne pour vérifier son compte bancaire. - Montant : Stripe envoie deux microversements distincts sur le compte bancaire du client avec un code de libellé indiquant
ACCTVERIFY
. Votre client utilise les montants de ces versements pour vérifier son compte bancaire.
L’appel stripe.confirmUsBankAccountPayment effectué à l’étape précédente renvoie un PaymentIntent avec l’état requires_action
. Le champ next_action
du PaymentIntent contient des informations utiles à la vérification.
next_action: { type: "verify_with_microdeposits", verify_with_microdeposits: { arrival_date: 1647586800, hosted_verification_url: "https://payments.stripe.com/…", microdeposit_type: "descriptor_code" } }
If you supplied a billing email, Stripe notifies your customer via this email when the deposits are expected to arrive. The email includes a link to a Stripe-hosted verification page where they can confirm the amounts of the deposits and complete verification.
Avertissement
Les tentatives de vérification sont limitées à dix pour les microversements basés sur des libellés et à trois pour ceux basés sur des montants. Si vous atteignez cette limite, nous ne pouvons plus vérifier le compte bancaire. En outre, les vérifications à l’aide de microversements expirent au bout de 10 jours. Si vous ne vérifiez pas les microversements pendant ce laps de temps, le PaymentIntent réitère sa demande d’informations sur le moyen de paiement. En informant clairement vos clients sur le fonctionnement de ces microversements, vous évitez d’éventuels problèmes liés à la vérification.
Facultatif : Envoi de notifications personnalisées par e-mail
Si vous le souhaitez, vous pouvez envoyer des notifications personnalisées par e-mail à votre client. Après avoir configuré des e-mails personnalisés, vous devez préciser la manière dont le client doit répondre à l’e-mail de vérification. Pour ce faire, choisissez l’une des options suivantes :
Utilisez la page de vérification hébergée par Stripe. Pour ce faire, utilisez l’URL
verify_with_microdeposits[hosted_verification_url]
dans l’objetnext_action
pour diriger votre client vers la procédure de vérification.Si vous préférez ne pas utiliser la page de vérification hébergée par Stripe, créez un formulaire sur votre site. Vos clients pourront ensuite utiliser ce formulaire pour vous transmettre les montants des microversements et vérifier le compte bancaire à l’aide de Stripe.js.
- Configurez au moins le formulaire pour qu’il gère le paramètre
descriptor code
, qui comporte une chaîne à 6 chiffres à des fins de vérification. - Stripe vous recommande également de configurer votre formulaire pour qu’il gère le paramètre
amounts
, car certaines banques utilisées par vos clients peuvent l’exiger.
Les intégrations transmettent uniquement le code de libellé,
descriptor_code
, ou les montants,amounts
. Pour savoir quel paramètre votre intégration utilise, vérifiez la valeur deverify_with_microdeposits[microdeposit_type]
dans l’objetnext_action
.- Configurez au moins le formulaire pour qu’il gère le paramètre
stripe.verifyMicrodepositsForPayment(clientSecret, { // Provide either a descriptor_code OR amounts, not both descriptor_code: 'SMT86W', amounts: [32, 45], });
Configurer le moyen de paiement par défautServeur
Vous disposez à présent d’un abonnement 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 pour écouter l’événement invoice.payment_succeeded
pour votre nouvel abonnement et pour définir le moyen de paiement par défaut.
Gérer l'état de l'abonnementCôté client
Si le paiement initial aboutit, l’abonnement prend l’état active
et aucune action supplémentaire n’est nécessaire. Si le paiement échoue, l’état passe à l’État de l’abonnement que vous avez configuré dans vos paramètres d’encaissement automatique. Prévenez votre client que le paiement a échoué et débitez-le avec un autre moyen de paiement.
Tester votre intégration
Découvrez comment tester des scénarios avec des vérifications instantanées à l’aide de Financial Connections.
Envoyer des e-mails de transaction en mode test
Après avoir collecté les coordonnées bancaires et obtenu l’acceptation du mandat, envoyez les e-mails de confirmation du mandat et de vérification du microversement en mode test. Pour cela, saisissez une adresse e-mail dans le champ payment_method_data.billing_details[email]
au format {any-prefix}+test_email@{any_domain}
au moment de collecter les informations du moyen de paiement.
Erreur fréquente
Pour déclencher ces e-mail en mode test, vous devez d’abord activer votre compte Stripe.
Test account numbers
Stripe fournit plusieurs numéros de compte de test et les tokens correspondants que vous pouvez utiliser pour vous assurer que votre intégration pour les comptes bancaires saisis manuellement est prête à passer en mode production.
Account number | Token | Routing number | Comportement |
---|---|---|---|
000123456789 | pm_usBankAccount_success | 110000000 | Le paiement aboutit. |
000111111113 | pm_usBankAccount_accountClosed | 110000000 | Le paiement échoue parce que le compte est clôturé. |
000111111116 | pm_usBankAccount_noAccount | 110000000 | Le paiement échoue car aucun compte n’est trouvé. |
000222222227 | pm_usBankAccount_insufficientFunds | 110000000 | Le paiement échoue en raison de fonds insuffisants. |
000333333335 | pm_usBankAccount_debitNotAuthorized | 110000000 | Le paiement échoue parce que les débits ne sont pas autorisés. |
000444444440 | pm_usBankAccount_invalidCurrency | 110000000 | Le paiement échoue en raison d’une devise non valide. |
000666666661 | pm_usBankAccount_failMicrodeposits | 110000000 | Le paiement ne parvient pas à envoyer les microversements. |
000555555559 | pm_usBankAccount_dispute | 110000000 | Le paiement déclenche un litige. |
000000000009 | pm_usBankAccount_processing | 110000000 | Le paiement reste en cours de traitement pour une durée indéterminée. Cela est utile pour tester l’annulation d’un PaymentIntent. |
Avant d’effectuer les transactions de test, vous devez vérifier tous les comptes de test pour lesquels le paiement aboutit ou échoue automatiquement. Pour ce faire, utilisez les codes de libellé ou les montants de microversements de test ci-dessous.
Tester des codes de libellé et des montants de microversements
Pour simuler différents scénarios, utilisez ces montants de microversements ou ces codes de libellé 0.01.
Valeurs de microversement | Valeurs de code de libellé 0.01 | Scénario |
---|---|---|
32 and 45 | SM11AA | Simule la vérification du compte. |
10 et 11 | SM33CC | Simule le dépassement du nombre de tentatives de vérification autorisé. |
40 et 41 | SM44DD | Simule l’expiration du délai de validité d’un microversement. |