Configurer un abonnement par prélèvement automatique ACH
Comment créer un abonnement et débiter votre client avec un compte bancaire américain.
Suivez ce guide pour configurer un abonnement avec le 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_
.
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_
.
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 paramètre client_
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_
.
// 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 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.
To be compliant with Nacha rules, you must obtain authorization from your customer before you can initiate payment by displaying mandate terms for them to accept. For more information on mandates, see Mandates.
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
Les clients disposent de 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_
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_
unique à 6 chiffres qui commence par SM. Votre client utilise cette chaîne pour vérifier son compte bancaire.code - 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_
. Le champ next_
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" } }
Si vous avez fourni une adresse e-mail de facturation, Stripe utilise cette dernière pour notifier votre client de la date d’arrivée prévue des versements. L’e-mail envoyé inclut un lien vers la page de vérification hébergée par Stripe, sur laquelle il peut confirmer les montants des versements et effectuer la vérification.
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
Optionally, you can send custom email notifications to your customer. After you set up custom emails, you need to specify how the customer responds to the verification email. To do so, choose one of the following:
Use the Stripe-hosted verification page. To do this, use the
verify_
URL in the next_action object to direct your customer to complete the verification process.with_ microdeposits[hosted_ verification_ url] 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_
, ou les montants,code amounts
. Pour savoir quel paramètre votre intégration utilise, vérifiez la valeur deverify_
dans l’objetwith_ microdeposits[microdeposit_ type] next_
.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.
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 de recouvrement 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_
au format {any-prefix}+test_
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_ | 110000000 | Le paiement aboutit. |
000111111113 | pm_ | 110000000 | Le paiement échoue parce que le compte est clôturé. |
000111111116 | pm_ | 110000000 | Le paiement échoue car aucun compte n’est trouvé. |
000222222227 | pm_ | 110000000 | Le paiement échoue en raison de fonds insuffisants. |
000333333335 | pm_ | 110000000 | Le paiement échoue parce que les débits ne sont pas autorisés. |
000444444440 | pm_ | 110000000 | Le paiement échoue en raison d’une devise non valide. |
000666666661 | pm_ | 110000000 | Le paiement ne parvient pas à envoyer les microversements. |
000555555559 | pm_ | 110000000 | Le paiement déclenche un litige. |
000000000009 | pm_ | 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. |
000777777771 | pm_ | 110000000 | The payment fails due to payment amount causing the account to exceed its weekly payment volume limit. |
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. |