Accéder directement au contenu
Créez un compte
ou
connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compte
Connectez-vous
Démarrer
Paiements
Revenue
Plateformes et places de marché
Gestion de fonds
Outils de développement
Aperçu
Billing
    Présentation
    À propos des API Billing
    Abonnements
      Fonctionnement des abonnements
      Démarrage rapide
      Cas d'usage
      Développer votre intégration
      Fonctionnalités d'abonnement
        Factures d'abonnements
        Planifications d'abonnements
        Tarification des abonnements
        Modèles tarifaires récurrents
        Intégrez une grille tarifaire
        Démarrer des abonnements
        Définir des quantités
        Définir des cycles de facturation
        Antidater des abonnements
        Abonnement à plusieurs articles
        Définir des périodes d'essai
        Appliquer des bons de réduction
        Migrer des abonnements vers Stripe
        Mode de calcul des crédits au prorata
        Paiements d'abonnement
        Moyens de paiement pour les abonnements
          Prélèvement automatique ACH
          Amazon Pay
          Prélèvement automatique Bacs au Royaume-Uni
          Virement bancaire
          Prélèvement automatique BECS en Australie
          Cash App Pay
          PayPal
          Revolut Pay
          Cartes bancaires coréennes
          Kakao Pay
          Naver Pay
          Débit préautorisé au Canada
          Prélèvement automatique SEPA dans l'UE
          iDEAL via un prélèvement SEPA
          Bancontact via un prélèvement SEPA
          Sofort via un prélèvement SEPA
        Intégrer le traitement des paiements par des tiers
        Méthodes d'encaissement
        Partager un lien de modification des informations de paiement
        Authentification forte du client (SCA)
        Gérer les abonnements
        Modifier des abonnements
        Gérer des mises à jour en attente
      Analyses
    Invoicing
    Facturation à la consommation
    Connect et Billing
    Tax et Billing
    Devis
    Recouvrement de revenus
    Automatisations
    Scripts
    Comptabilisation des revenus
    Gestion des clients
    Droits d'accès
    Tester votre intégration
Tax
Rapports
Données
Constitution de start-up
AccueilRevenueBillingSubscriptionsSubscription featuresSubscription payment methods

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.

Copier la page

Suivez ce guide pour configurer un abonnement avec le prélèvement automatique ACH.

Remarque

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 tarif
Dashboard

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 :

  1. Rendez-vous à la page Ajouter un produit.
  2. Saisissez un Nom pour le produit.
  3. Saisissez 15 pour le tarif.
  4. Sélectionnez la devise USD.
  5. 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'abonnement
Côté serveur

Remarque

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.

Command Line
curl
curl https://api.stripe.com/v1/subscriptions \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "customer"="{{CUSTOMER_ID}}" \ -d "items[0][price]"="price_F52b2UdntfQsfR" \ -d "payment_behavior"="default_incomplete" \ -d "payment_settings[payment_method_types][]"="us_bank_account" \ -d "expand[0]"="latest_invoice.payment_intent"

The response includes the subscription’s first Invoice. This contains the invoice’s payments, which includes a default PaymentIntent that Stripe generated for this invoice and the confirmation secret which you can use on the client side to securely complete the payment process instead of passing the entire PaymentIntent object. Return the latest_invoice.confirmation_secret.client_secret to the front end to complete payment.

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/v3/"></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" />

Collecter et envoyer l'accusé de réception du mandat
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.

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.

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.

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 microversements
Côté client

Remarque

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.

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" } }

If you supplied a billing email, Stripe notifies your customer through 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

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_with_microdeposits[hosted_verification_url] URL in the next_action object to direct your customer to complete the verification process.

  • 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], });

Configurer le moyen de paiement par défaut
Serveur

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.

server.rb
Ruby
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
if event.type == 'invoice.payment_succeeded' invoice = event.data.object if invoice['billing_reason'] == 'subscription_create' subscription_id = invoice['parent']['subscription_details']['subscription'] # This example assumes you're using the default PaymentIntent that Stripe generated for the invoice. invoice_payments = Stripe::InvoicePayment.list({invoice: invoice['id']}) payment_intent_id = invoice_payments.data[0].payment.payment_intent # Retrieve the payment intent used to pay the subscription payment_intent = Stripe::PaymentIntent.retrieve(payment_intent_id) # Set the default payment method Stripe::Subscription.update( subscription_id, default_payment_method: payment_intent.payment_method ) end end

Gérer l'état de l'abonnement
Cô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.

Send transaction emails in a sandbox

After you collect the bank account details and accept a mandate, send the mandate confirmation and microdeposit verification emails in a sandbox.

If your domain is “example.com,” use an email format such as info+testing@example.com for testing non-card payments. You can replace “info” with a standard local term such as “support.” This format ensures emails are routed correctly.

Erreur fréquente

You need to activate your Stripe account before you can trigger these emails while testing.

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

Test settlement behavior

Test transactions settle instantly and are added to your available test balance. This behavior differs from livemode, where transactions can take multiple days to settle in your available balance.

FacultatifConfiguration du cycle de facturation

FacultatifPériodes d'essai avant abonnement

FacultatifEnregistrement des informations de moyen de paiement pour utilisation ultérieure

Cette page vous a-t-elle été utile ?
OuiNon
Besoin d'aide ? Contactez le service Support.
Rejoignez notre programme d'accès anticipé.
Consultez notre log des modifications.
Des questions ? Contactez l'équipe commerciale.
LLM ? Lire llms.txt.
Propulsé par Markdoc