Accéder directement au contenu
Créez un compte ou connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compteConnectez-vous
Démarrer
Paiements
Revenus
Plateformes et places de marché
Gestion de fonds
Ressources pour les développeurs
API et SDKAide
Aperçu
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageUtiliser Managed Payments
Utiliser Payment Links
Utiliser une page de paiement préconfiguré
Créer une intégration personnalisée avec Elements
Développer une intégration dans l'application
Paiements par TPE
Terminal
Moyens de paiement
Ajouter des moyens de paiement
    Présentation
    Options d'intégration des moyens de paiement
    Gérer les moyens de paiement par défaut dans le Dashboard
    Types de moyens de paiement
    Cartes bancaires
    Payer avec le solde Stripe
    Paiements en stablecoins
    Prélèvements bancaires
      Prélèvement automatique ACH
        Accepter un paiement
        Enregistrer les informations bancaires
        Migration des ACH Direct Debit depuis Charges vers les API plus récents.
        Migrer depuis un autre prestataire de services de paiement
        Comptes bancaires bloqués
        Codes SEC
      Prélèvement automatique Bacs
      Débit préautorisé au Canada
      Prélèvement automatique BECS en Australie
      Prélèvement automatique BECS en Nouvelle-Zélande
      Prélèvement automatique SEPA
    Virements avec redirection bancaire
    Virements bancaires
    Virements (Sources)
    Achetez maintenant, payez plus tard
    Paiements en temps réel
    Coupons
    Portefeuilles
    Activer des moyens de paiement locaux par pays
    Moyens de paiement personnalisés
Gérer les moyens de paiement
Paiement accéléré avec Link
Scénarios de paiement
Gérer plusieurs devises
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Commerce agentique
Financial Connections
Climate
Comprendre la fraude
Radar pour la protection contre la fraude
Gestion des litiges
Vérifier l'identité
États-Unis
Français (France)
AccueilPaiementsAdd payment methodsBank debitsACH Direct Debit

Accepter un paiement par prélèvement automatique ACH

Créez un formulaire de paiement personnalisé ou utilisez Stripe Checkout pour accepter des paiements à l'aide d'un compte bancaire américain.

Voici les différentes étapes nécessaires pour accepter des paiements par prélèvement automatique ACH sur votre site Web :

  • Création d’un objet de suivi du paiement
  • Collecter des informations sur un moyen de paiement avec les vérifications instantanées activées par Stripe Financial Connections
  • Soumission du paiement à Stripe pour traitement
  • Vérification du compte bancaire de votre client

Remarque

Le prélèvement automatique ACH est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas immédiatement disponibles après le paiement. Il faut généralement compter 4 jours ouvrables pour qu’un paiement arrive sur votre compte.

Stripe utilise l’objet de paiement, le Payment Intent, pour suivre et gérer l’ensemble des états du paiement jusqu’à son aboutissement.

Configurer Stripe
Côté serveur

Pour commencer, vous devez créer un compte Stripe.

Utilisez nos bibliothèques officielles pour accéder à l’API Stripe à partir de votre application :

Command Line
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Créer ou récupérer un objet Customer
Recommandé
Côté serveur

Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise, ou récupérez l’objet Customer existant associé à cet utilisateur. 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 de paiement enregistrées. Ajoutez une adresse e-mail à l’objet Customer pour activer l’optimisation des utilisateurs connus de Financial Connections.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d email={{CUSTOMER_EMAIL}}

Créer un PaymentIntent
Côté serveur

Un PaymentIntent est un objet qui représente votre intention d’encaisser le paiement d’un client et qui suit le cycle de vie du processus de paiement étape par étape.

Créez un PaymentIntent sur votre serveur et spécifiez le montant à collecter et la devise usd. Si vous possédez déjà une autre intégration utilisant l’API Payment Intents, ajoutez us_bank_account à la liste des types de moyens de paiement de votre PaymentIntent. Précisez aussi 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 la valeur off_session.

Pour en savoir plus sur les frais Financial Connections, consultez les Tarifs.

Par défaut, lors de la collecte des coordonnées bancaires, Financial Connections est utilisé pour vérifier instantanément le compte de votre client. Une option de secours comprenant la saisie manuelle du numéro de compte et la vérification par microversement peut être utilisée. Consultez la documentation relative à Financial Connections pour savoir comment configurer Financial Connections et accéder à des données de compte supplémentaires de façon à optimiser votre intégration ACH. Par exemple, vous pouvez utiliser Financial Connections pour consulter le solde d’un compte avant d’initier le paiement ACH.

Remarque

Pour accéder à des données supplémentaires après qu’un client a authentifié son compte, celui-ci doit associer de nouveau son compte avec des autorisations étendues.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]"=us_bank_account

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.

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 :

main.rb
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
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 :

(async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })();

Collecter les informations du moyen de paiement
Cô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.

checkout.html
<head> <title>Checkout</title> <script src="https://js.stripe.com/clover/stripe.js"></script> </head>

Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement.

client.js
// 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.

script.js
// 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" />

FacultatifAccéder aux données sur un compte bancaire Financial Connections
Côté serveur

Vous ne pouvez accéder aux données Financial Connections que si vous demandez des autorisations d’accès supplémentaires lors de la création de votre PaymentIntent .

Une fois que votre client a terminé le flux d’authentification Stripe Financial Connections, l’objet PaymentMethod us_bank_account renvoyé inclut un ID de financial_connections_account correspondant à un compte Financial Connections. Utilisez cet ID pour accéder aux données du compte.

Erreur fréquente

Les comptes bancaires que vos clients associent par saisie manuelle ou par le biais de microversements n’ont pas d’ID financial_connections_account au niveau du moyen de paiement.

Pour déterminer l’ID du compte Financial Connections, récupérez le PaymentIntent et développez l’attribut payment_method :

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl -G https://api.stripe.com/v1/payment_intents/
{{PAYMENT_INTENT_ID}}
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "expand[]"=payment_method
{ "id": "{{PAYMENT_INTENT_ID}}", "object": "payment_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", // ... "type": "us_bank_account" "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", "fingerprint": "q9qchffggRjlX2tb", "last4": "6789", "routing_number": "110000000" } } // ... }

Si vous avez choisi de recevoir des autorisations balances, nous vous recommandons de vérifier l’état du solde à ce moment-là afin de vous assurer de disposer de fonds suffisants avant de confirmer un paiement.

Découvrez comment utiliser des données de compte supplémentaires pour optimiser votre intégration ACH avec Financial Connections.

Collecter l'accusé de réception du mandat et effectuer le paiement
Cô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, consultez la page sur les mandats.

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.

script.js
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 through 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 through email). } }); });

Remarque

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.

Sauf échec de l’opération, Stripe renvoie un objet PaymentIntent présentant l’un des états suivants :

StatutDescriptionÉtapes suivantes
requires_actionUne action supplémentaire est requise pour finaliser la vérification du compte bancaire.Étape 6 : Vérification des comptes bancaires à l’aide de microversements
processingLe compte bancaire a été vérifié instantanément ou la vérification n’est pas nécessaire.Étape 7 : Confirmation du succès du PaymentIntent

Après avoir confirmé le PaymentIntent, un e-mail de confirmation du mandat et les coordonnées bancaires recueillies doivent être envoyés à votre client. Par défaut, Stripe gère cette étape, mais vous pouvez choisir d’envoyer des notifications personnalisées si vous préférez.

Vérifier le compte bancaire à l'aide de microversements
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 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" } }

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

Si vous le souhaitez, vous pouvez envoyer des notifications personnalisées par e-mail à votre client. Après avoir configuré les e-mails personnalisés, vous devez préciser comment le client doit répondre à l’e-mail de vérification. Pour ce faire, choisissez 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] de l’objet next_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 de verify_with_microdeposits[microdeposit_type] dans l’objet next_action.

stripe.verifyMicrodepositsForPayment(clientSecret, { // Provide either a descriptor_code OR amounts, not both descriptor_code: 'SMT86W', amounts: [32, 45], });

Dès que le compte bancaire a été vérifié, Stripe renvoie l’objet PaymentIntent avec l’état status défini sur processing, et envoie un événement webhook payment_intent.processing.

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_intent.payment_failed (voir les exemples ci-après).

{ "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" } }
Code d’erreurSynchrone ou asynchroneMessageChangement d’état
payment_method_microdeposit_failedDe façon synchrone ou asynchrone via un événement de webhookLes microversements ont échoué. Veuillez vérifier la validité des numéros de compte, de l’établissement et de transit fournis.status est à l’état requires_payment_method et le paramètre last_payment_error est défini.
payment_method_microdeposit_verification_amounts_mismatchDe façon synchroneLes montants fournis ne correspondent pas à ceux envoyés au compte bancaire. Il vous reste {attempts_remaining} tentatives de vérification du compte.Inchangé
payment_method_microdeposit_verification_attempts_exceededDe façon synchrone ou asynchrone via un événement de webhookDépassement du nombre de tentatives de vérification autoriséstatus est à l’état requires_payment_method et le paramètre last_payment_error est défini.
payment_method_microdeposit_verification_timeoutDe façon asynchrone via un événement de webhookExpiration du microversement. Le client n’a pas vérifié son compte bancaire dans le délai de 10 jours prévu.status est à l’état requires_payment_method et le paramètre last_payment_error est défini.

Confirmer l'aboutissement du PaymentIntent
Côté serveur

Le prélèvement automatique ACH est un moyen de paiement à notification différée. Ceci signifie que pour recevoir une notification du succès ou de l’échec d’un paiement, il faut compter jusqu’à quatre jours ouvrables après le déclenchement du prélèvement 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.

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.

Les événements suivants sont envoyés lorsque le PaymentIntent change d’état :

ÉvénementDescriptionÉtape suivante
payment_intent.processingLe paiement du client a bien été envoyé à Stripe.Attendez que le paiement aboutisse ou échoue.
payment_intent.succeededLe paiement du client a abouti.Traitez la commande de biens ou de services.
payment_intent.payment_failedLe 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.

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 dans un environnement de test

Une fois que vous avez collecté les coordonnées bancaires et accepté un mandat, envoyez les courriels de confirmation du mandat et de vérification du microversement dans un environnement de bac à sable.

Si votre domaine est {domain} et que votre nom d’utilisateur est {username}, utilisez le format d’e-mail suivant pour envoyer des e-mails de transaction de test : {username}+test_email@{domain}.

Par exemple, si votre domaine est example.com et que votre nom d’utilisateur est info, utilisez le format info+test_email@example.com pour tester les paiements ACH Direct Debit. Ce format garantit que les e-mails sont acheminés correctement. Si vous n’incluez pas le suffixe +test_email, nous n’enverrons pas l’e-mail.

Erreur fréquente

Pour déclencher ces e-mails pendant le test, vous devez d’abord activer votre compte Stripe.

Numéros de comptes de test

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.

Numéro de compteTokenNuméro de routageComportement
000123456789pm_usBankAccount_success110000000Le paiement aboutit.
000111111113pm_usBankAccount_accountClosed110000000Le paiement échoue parce que le compte est clôturé.
000000004954pm_usBankAccount_riskLevelHighest110000000Le paiement est bloqué par Radar en raison d’un risque élevé de fraude.
000111111116pm_usBankAccount_noAccount110000000Le paiement échoue car aucun compte n’est trouvé.
000222222227pm_usBankAccount_insufficientFunds110000000Le paiement échoue en raison de fonds insuffisants.
000333333335pm_usBankAccount_debitNotAuthorized110000000Le paiement échoue parce que les débits ne sont pas autorisés.
000444444440pm_usBankAccount_invalidCurrency110000000Le paiement échoue en raison d’une devise non valide.
000666666661pm_usBankAccount_failMicrodeposits110000000Le paiement ne parvient pas à envoyer les microversements.
000555555559pm_usBankAccount_dispute110000000Le paiement déclenche un litige.
000000000009pm_usBankAccount_processing110000000Le paiement reste en cours de traitement pour une durée indéterminée. Cela est utile pour tester l’annulation d’un PaymentIntent.
000777777771pm_usBankAccount_weeklyLimitExceeded110000000Le paiement échoue, car son montant entraîne un dépassement de la limite hebdomadaire de volume de paiement du compte.

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 microversementValeurs de code de libellé 0.01Scénario
32 et 45SM11AASimule la vérification du compte.
10 et 11SM33CCSimule le dépassement du nombre de tentatives de vérification autorisé.
40 et 41SM44DDSimule l’expiration du délai de validité d’un microversement.

Comportement de règlement des tests

Les transactions de test sont réglées instantanément et ajoutées à votre solde de test disponible. Ce comportement diffère de celui du mode production, où les transactions peuvent prendre plusieurs jours pour être réglées dans votre solde disponible.

FacultatifVérification instantanée uniquement
Côté serveur

Par défaut, le paiement à l’aide d’un compte bancaire américain permet à vos clients d’utiliser la vérification instantanée du compte bancaire ou les microversements. Vous pouvez aussi exiger la vérification instantanée du compte bancaire uniquement en utilisant le paramètre verification_method à la création du PaymentIntent.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d setup_future_usage=off_session \ -d customer=
"{{CUSTOMER_ID}}"
\ -d "payment_method_types[]"=us_bank_account \ -d "payment_method_options[us_bank_account][verification_method]"=instant \ -d "payment_method_options[us_bank_account][financial_connections][permissions][]"=payment_method \ -d "payment_method_options[us_bank_account][financial_connections][permissions][]"=balances

Ainsi, vous n’avez pas besoin de gérer la vérification à l’aide de microversements. Cependant, si la vérification instantanée échoue, l’état du PaymentIntent est requires_payment_method, indiquant l’échec de la vérification instantanée du compte bancaire de votre client.

FacultatifVérification à l'aide de microversements uniquement
Côté serveur

Par défaut, le paiement à l’aide d’un compte bancaire américain permet à vos clients d’utiliser la vérification instantanée du compte bancaire ou les microversements. Vous pouvez aussi exiger la vérification du compte bancaire à l’aide de microversements uniquement en utilisant le paramètre verification_method à la création du PaymentIntent.

Mise en garde

Si vous utilisez un formulaire de paiement personnalisé, vous devez développer votre propre interface utilisateur pour collecter les coordonnées bancaires des clients. De la même manière, si vous désactivez l’envoi d’e-mails par Stripe en cas de microversements, vous devez développer votre propre interface utilisateur pour que votre client puisse confirmer le code ou le montant du microversement.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d setup_future_usage=off_session \ -d customer=
"{{CUSTOMER_ID}}"
\ -d "payment_method_types[]"=us_bank_account \ -d "payment_method_options[us_bank_account][verification_method]"=microdeposits

Collectez ensuite le compte bancaire de votre client avec votre propre formulaire et appelez stripe.confirmUsBankAccountPayment avec ces informations pour mener à bien le PaymentIntent.

script.js
var form = document.getElementById('payment-form'); var accountholderName = document.getElementById('accountholder-name'); var email = document.getElementById('email'); var accountNumber = document.getElementById('account-number'); var routingNumber = document.getElementById('routing-number'); var accountHolderType= document.getElementById('account-holder-type'); var submitButton = document.getElementById('submit-button'); var clientSecret = submitButton.dataset.secret; form.addEventListener('submit', function(event) { event.preventDefault(); stripe.confirmUsBankAccountPayment(clientSecret, { payment_method: { billing_details: { name: accountholderName.value, email: email.value, }, us_bank_account: { account_number: accountNumber.value, routing_number: routingNumber.value, account_holder_type: accountHolderType.value, // 'individual' or 'company' }, }, }) .then(({paymentIntent, error}) => { if (error) { // Inform the customer that there was an error. console.log(error.message); } else { // Handle next step based on the intent's status. console.log("PaymentIntent ID: " + paymentIntent.id); console.log("PaymentIntent status: " + paymentIntent.status); } }); });

FacultatifRésoudre les litiges
Côté serveur

En règle générale, les clients peuvent contester un paiement ACH Direct Debit auprès de leur banque sous 60 jours calendaires après un prélèvement sur un compte personnel, ou sous 2 jours ouvrables pour un compte professionnel. Dans de rares cas, le client peut contester un paiement par prélèvement en dehors de ces délais de litige standard.

Lorsqu’un client conteste un paiement, Stripe envoie un événement webhook charge.dispute.closed, et l’autorisation du PaymentMethod est révoquée.

Il peut parfois arriver que Stripe reçoive un échec de paiement ACH de la banque alors que le PaymentIntent est déjà passé à l’état succeeded. Quand cela se produit, Stripe créée un litige dont le paramètre reason (motif) peut être :

  • insufficient_funds
  • incorrect_account_details
  • bank_can't_process

Dans ce cas de figure, Stripe prélève des frais d’échec de paiement.

Les futurs paiements qui réutilisent ce PaymentMethod renvoient l’erreur suivante :

{ "error": { "message": "This PaymentIntent requires a mandate, but no existing mandate was found. Collect mandate acceptance from the customer and try again, providing acceptance data in the mandate_data parameter.", "payment_intent": { ... } "type": "invalid_request_error" } }

Cette erreur comporte un PaymentIntent à l’état requires_confirmation. Pour que le paiement aboutisse, vous devez :

  1. Résolvez le litige avec le client pour vous assurer que les futurs paiements ne seront pas contestés.
  2. Confirmez de nouveau l’autorisation de votre client.

Pour confirmer l’autorisation de paiement, vous pouvez collecter la confirmation du mandat de votre client en ligne avec Stripe.js ou confirmer l’autorisation avec votre client hors ligne à l’aide de l’API Stripe.

Mise en garde

Si un client conteste plusieurs paiements issus du même compte bancaire, Stripe bloque son compte. Contactez le service Support de Stripe pour obtenir une solution.

Command Line
cURL
No results
curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "mandate_data[customer_acceptance][type]"=offline

FacultatifRéférence du paiement

Le numéro de référence du paiement est une valeur générée par la banque qui permet au titulaire du compte bancaire d’utiliser sa banque pour localiser des fonds. Lorsque le paiement aboutit, Stripe fournit le numéro de référence du paiement dans le Dashboard, ainsi que dans l’objet Charge.

État du paiementValeur de référence du paiement
En attenteIndisponibles
En échecIndisponibles
RéussiDisponible (par exemple, 091000015001234)

De plus, lorsque vous recevez le webhook charge.succeeded, consultez le contenu de payment_method_details pour localiser la payment_reference.

L’exemple d’événement suivant montre le rendu d’un paiement ACH abouti avec un numéro de référence de paiement.

{ "id": "{{EVENT_ID}}", "object": "event", // omitted some fields in the example "type": "charge.succeeded", "data": { "object": { "id": "{{PAYMENT_ID}}", "object": "charge", //... "paid": true, "payment_intent": "{{PAYMENT_INTENT_ID}}", "payment_method": "{{PAYMENT_METHOD_ID}}", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "fingerprint": "Ih3foEnRvLXShyfB", "last4": "1000", "payment_reference": "091000015001234", "routing_number": "110000000" } } // ... } } }

Consultez le contenu de destination_details pour localiser la référence du remboursement associée aux paiements ACH remboursés.

L’exemple d’événement suivant montre le rendu d’un remboursement de paiement ACH abouti avec un numéro de référence de remboursement. En savoir plus sur les remboursements.

{ "id": "{{EVENT_ID}}", "object": "event", "type": "charge.refund.updated", "data": { "object": { "id": "{{REFUND_ID}}", "object": "refund", //... "payment_intent": "{{PAYMENT_INTENT_ID}}", "destination_details": { "type": "us_bank_transfer", "us_bank_transfer": { "reference": "091000015001111", "reference_status": "available" } } // ... } } }

FacultatifConfigurer 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. 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 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.

Voir aussi

  • Enregistrer les coordonnées ACH Direct Debit pour les futurs paiements
Cette page vous a-t-elle été utile ?
OuiNon
  • Besoin d'aide ? Contactez le service Support.
  • Consultez notre log des modifications.
  • Des questions ? Contactez l'équipe commerciale.
  • LLM ? Lire llms.txt.
  • Propulsé par Markdoc