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
Revenus
Plateformes et places de marché
Gestion de fonds
Ressources pour les développeurs
Aperçu
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageManaged Payments
Utiliser Payment Links
Créer une page de paiement
Développer une intégration avancée
Développer une intégration dans l'application
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
    Cryptomonnaies
    Prélèvements bancaires
      Prélèvement automatique ACH
      Prélèvement automatique Bacs
        Accepter un paiement
        Importer des données Bacs dans Stripe
        Enregistrer les informations bancaires
      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
Interfaces de paiement
Payment Links
Checkout
Elements pour le web
Elements intégrés à l'application
Scénarios de paiement
Gérer plusieurs devises
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Paiements par TPE
Terminal
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Financial Connections
Climate
AccueilPaiementsAdd payment methodsBank debitsBacs Direct Debit

Paiements par prélèvement automatique Bacs

Comment accepter les paiements par prélèvement automatique Bacs.

Mise en garde

Stripe propose automatiquement à vos clients des options de moyens de paiement selon leur devise, les restrictions sur les moyens de paiement et d’autres paramètres. Nous vous recommandons de configurer vos moyens de paiement à partir du Dashboard Stripe en suivant les instructions indiquées dans Accepter un paiement.

Si vous souhaitez continuer à configurer manuellement les moyens de paiement proposés à vos clients avec Checkout, utilisez ce guide. Sinon, mettez à jour votre intégration pour configurer les moyens de paiement dans le Dashboard.

Les utilisateurs de Stripe au Royaume-Uni peuvent utiliser Checkout en mode paiement pour accepter les paiements par prélèvement automatique Bacs.

Une session Checkout représente les détails de l’intention d’achat de votre client. Vous créez une session Checkout lorsque votre client souhaite effectuer un paiement. Après avoir redirigé votre client vers une session Checkout, Stripe affiche un formulaire de paiement qui permet à votre client d’effectuer son achat. Une fois le paiement finalisé, Stripe redirige le client vers votre site.

Configurer Stripe
Côté serveur

Pour commencer, il vous faut un compte Stripe. Inscrivez-vous.

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

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Créer des produits et des tarifs

Pour pouvoir utiliser Checkout, vous devez d’abord créer un produit et un tarif. Vous devez créer un produit pour chacune de vos marchandises ou chacun de vos niveaux de service. Un produit peut être associé à un ou plusieurs tarifs.

Par exemple, vous pouvez créer un produit T-shirt associé à deux tarifs dans deux devises différentes : 20 GBP et 25 EUR. Vous pouvez ainsi modifier et ajouter des tarifs sans devoir changer les détails des produits sous-jacents. Il est possible de créer un produit et un tarif via l’API ou dans le Dashboard.

Si vous déterminez votre tarif au moment du paiement (par exemple si le client fixe le montant d’une donation) ou si vous ne souhaitez pas créer de tarif en amont, vous pouvez également créer des tarifs ponctuels au moment de la création d’une session Checkout pour un produit existant.

Mise en garde

Si vous disposez d’une intégration Checkout existante qui n’utilise pas Prices, l’API Checkout a évolué depuis l’introduction de Prices. Vous pouvez utiliser ce guide de migration pour procéder à une mise à niveau, ou bien conserver votre intégration existante en l’état.

Remarque

Les produits créés dans un environnement de test peuvent être copiés en mode production afin que vous n’ayez pas à les recréer. Dans la vue détaillée du produit du Dashboard, cliquez sur Copier en mode production dans en haut à droite. Vous ne pouvez effectuer cette opération qu’une seule fois pour chaque produit créé dans un environnement de test. Les mises à jour ultérieures du produit de test ne sont pas répercutées sur le produit en production.

Vérifiez que vous êtes dans un environnement de test, puis définissez les articles que vous souhaitez vendre. Pour créer un nouveau produit et un nouveau prix :

  • Accédez à la section Produits du Dashboard.
  • Cliquez sur Ajouter un produit.
  • Sélectionnez Ponctuel lors de la définition du tarif.

Le nom de produit, la description et l’image que vous indiquez sont présentées aux clients dans Checkout.

Créer une session Checkout
Côté client
Côté serveur

Ajoutez sur votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une session Checkout.

index.html
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>

Créez une session Checkout avec line_items. Les postes de facture représentent la liste des articles achetés par le client.

Une fois le paiement effectué, votre client est redirigé vers le success_url, à savoir une page de votre site Web lui confirmant que ses informations de paiement ont bien été recueillies et que son paiement est en cours de traitement.

Si lors d’une session Checkout, votre client clique sur votre logo sans finaliser son paiement, Checkout le redirige vers votre site Web sur la page cancel_url. Cette page est généralement celle que le client a consultée sur votre site avant d’être redirigé vers Stripe Checkout.

Checkout peut accepter un paiement et enregistrer le moyen de paiement utilisé pour réutilisation ultérieure. Les moyens de paiement enregistrés ainsi peuvent être utilisés pour de futurs paiements à l’aide d’un PaymentIntent. Une fois la session Checkout créée, redirigez votre client vers l’URL renvoyée dans la réponse.

Command Line
curl
curl https://api.stripe.com/v1/checkout/sessions \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "payment_method_types[]"="bacs_debit" \ -d "line_items[][price]"="{{PRICE_ID}}" \ -d "line_items[][quantity]"=1 \ -d "mode"="payment" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "payment_intent_data[setup_future_usage]"="off_session" \ -d "success_url"="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ -d "cancel_url"="https://example.com/cancel"

Remarque

Les règles applicables aux prélèvements automatiques Bacs prévoient l’envoi obligatoire au client d’une notification de prélèvement par e-mail à la collecte initiale de ses informations de paiement et lorsque son compte est débité. Par défaut, ces e-mails sont envoyés automatiquement par Stripe.

La création d’une session Checkout renvoie un ID de session. Mettez l’ID de session à disposition sur votre page de confirmation en incluant le modèle de variable {CHECKOUT_SESSION_ID} dans l’URL success_url, comme illustré ci-dessus.

Mise en garde

Ne vous fiez pas uniquement à la redirection vers le success_url pour détecter l’initiation du paiement, sachant que :

  • Des utilisateurs malveillants pourraient accéder directement au success_url sans payer et obtenir l’accès à vos biens ou à vos services.
  • Il peut arriver que le client n’aboutisse pas au success_url à l’issue de son paiement. Il peut par exemple lui arriver de fermer l’onglet de son navigateur avant que la redirection n’intervienne.

Gérer les événements post-paiement
Côté serveur

Une fois que votre client a mené à bien son paiement, Stripe le redirige vers l’URL que vous avez spécifiée dans le paramètre success_url. En général, il s’agit d’une page de votre site Web qui l’informe que son paiement a abouti.

Toutefois, le prélèvement automatique Bacs est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas immédiatement disponibles. En effet, la mise à disposition des fonds prend généralement 3 jours ouvrés. Il importe donc que vous retardiez le traitement de la commande jusqu’à ce que les fonds parviennent sur votre compte. Une fois le paiement effectué, l’état du PaymentIntent sous-jacent passe de processing à succeeded.

Les événements Checkout suivants sont envoyés lorsque l’état du paiement change :

Nom de l’événementDescriptionÉtapes suivantes
checkout.session.completedLe client a autorisé le paiement par prélèvement en envoyant le formulaire Checkout.Attendez que le paiement aboutisse ou échoue.
checkout.session.async_payment_succeededLe paiement du client a abouti.Traitez la commande de biens ou de services du client.
checkout.session.async_payment_failedLe paiement du client a été refusé, ou il a échoué pour une autre raison.Contactez le client par e-mail et demandez-lui de passer une nouvelle commande.

Votre code de webhook doit gérer ces trois événements Checkout.

La charge utile de chaque webhook Checkout inclut l’objet Session Checkout, qui contient des informations sur l’objet Customer et le PaymentIntent.

Le webhook checkout.session.completed est envoyé à votre serveur avant que votre client ne soit redirigé. Votre acceptation du webhook (tout code d’état 2xx) déclenche la redirection du client vers la page success_url. Si Stripe ne reçoit pas de confirmation dans les 10 secondes suivant un paiement ayant abouti, votre client est automatiquement redirigé vers la page success_url.

Sur votre page success_url, affichez un message de confirmation à votre client, en l’informant du délai de quelques jours qui vous sera nécessaire pour le traitement de sa commande, compte tenu du fait que les prélèvements automatiques Bacs ne sont pas instantanés.

Si vous acceptez les paiements instantanés (par carte bancaire, par exemple) en plus des paiements à notification différée, vous devrez modifier votre endpoint de webhook de façon à ce que les deux types de paiements soient gérés lors de la réception d’un événement checkout.session.completed.

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'
# You can find your endpoint's secret in your webhook settings endpoint_secret = 'whsec_...' # Using Sinatra post '/webhook' do payload = request.body.read event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. sig_header = request.env['HTTP_STRIPE_SIGNATURE'] begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e # Invalid payload status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature status 400 return end case event['type'] when 'checkout.session.completed' session = event['data']['object'] # Check if the order is paid (for example, from a card payment) payment_intent = Stripe::PaymentIntent.retrieve(session.payment_intent) # A delayed notification payment will have the status 'processing' order_paid = payment_intent.status == "succeeded" # Save an order in your database, marked as 'awaiting payment' create_order(session) if order_paid fulfill_order(session) end when 'checkout.session.async_payment_succeeded' session = event['data']['object'] # Fulfill the purchase... fulfill_order(session) when 'checkout.session.async_payment_failed' session = event['data']['object'] # Send an email to the customer asking them to retry their order email_customer_about_failed_payment(session) end status 200 end

Vous pouvez obtenir des informations concernant le client et le paiement en récupérant les objets Customer et PaymentIntent référencés par les propriétés customer, payment_intent dans la charge utile du webhook.

Test des webhooks en local

Pour tester des webhooks localement, vous pouvez utiliser l’interface de ligne de commande Stripe. Après l’avoir installée, vous pouvez transférer les événements à votre serveur :

Command Line
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)

En savoir plus sur la configuration des webhooks.

Tester l'intégration

À ce stade, vous disposez théoriquement d’une intégration de prélèvement automatique Bacs de base, capable de recueillir les coordonnées bancaires de vos clients et d’accepter leurs paiements.

Vous avez à votre disposition plusieurs numéros de compte bancaire de test dans un environnement de test pour vérifier que cette intégration est prête.

Code guichetNuméro de compteDescription
10880000012345Le paiement aboutit et l’état du PaymentIntent passe de processing à succeeded.
10880090012345Le paiement aboutit au bout de trois minutes et l’état du PaymentIntent passe de processing à succeeded.
10880033333335Le paiement est accepté, mais échoue immédiatement avec un code d’échec debit_not_authorized et le PaymentIntent bascule de processing à requires_payment_method. L’objet Mandate devient inactive et le PaymentMethod ne peut plus être utilisé.
10880093333335Le paiement échoue au bout de trois minutes avec un code d’échec debit_not_authorized et le PaymentIntent bascule de processing à requires_payment_method. L’objet Mandate devient inactive et le PaymentMethod ne peut plus être utilisé.
10880022222227Le paiement échoue avec un code d’échec insufficient_funds et le PaymentIntent bascule de processing à requires_payment_method. L’objet Mandate reste active et le PaymentMethod peut à nouveau être utilisé.
10880092222227Le paiement échoue au bout de trois minutes avec un code d’échec insufficient_funds et le PaymentIntent bascule de processing à requires_payment_method. L’objet Mandate reste active et le PaymentMethod peut à nouveau être utilisé.
10880055555559Le paiement aboutit au bout de trois minutes et l’état du PaymentIntent passe de processing à succeeded, mais un litige est immédiatement créé.
10880000033333La création du moyen de paiement aboutit, mais le mandat est refusé par la banque du client et passe immédiatement à l’état inactif.
10880000044444La demande de mise en place d’un prélèvement automatique Bacs échoue immédiatement en raison d’un numéro de compte non valide et le client est invité à mettre à jour ses informations avant de soumettre sa demande. Les données de paiement ne sont pas collectées.
10880034343434Le paiement échoue avec un code d’erreur charge_exceeds_source_limit, car le montant du paiement entraîne un dépassement de la limite hebdomadaire de volume de paiement du compte.
10880012121212Le paiement échoue avec un code d’erreur charge_exceeds_weekly_limit, car le montant du paiement dépasse la limite du volume de transactions du compte.

Pour vos tests, vous pouvez utiliser l’un des numéros de compte fournis ci-dessus. Cependant, dans la mesure où le traitement des paiements par prélèvement automatique Bacs prend plusieurs jours, privilégiez les numéros de compte de test qui fonctionnent avec un délai de trois minutes, de manière à mieux simuler le comportement en situation réelle.

Remarque

Par défaut, Stripe envoie automatiquement des e-mails de notification au client lors de la collecte initiale de ses données de paiement et chaque fois qu’un débit est ensuite effectué sur son compte. Ces notifications ne sont pas envoyées dans les environnements de test.

Échecs de paiement

Un paiement peut échouer pour de nombreuses raisons. Le motif d’un échec est indiqué par son charge.failure_code. Seuls les paiements présentant certains codes d’échec peuvent être retentés. Lorsqu’une nouvelle tentative n’est pas possible, il convient de contacter votre client pour lui demander de renouveler son règlement avec un compte bancaire ou un moyen de paiement différent.

Les codes d’échec que nous envoyons actuellement pour les prélèvements automatiques Bacs sont indiqués ci-dessous. Cette liste est susceptible d’être enrichie à tout moment, et il importe donc de ne pas la considérer comme exhaustive dans le cadre du développement et de la maintenance de votre code.

Code d’échecDescriptionNouvelle tentative possible
account_closedLe compte bancaire a été clôturé.Non
bank_ownership_changedLe compte a été transféré à un nouveau prestataire de services de paiement (PSP). Vérifiez si les coordonnées du nouveau PSP vous ont été communiquées. Si ce n’est pas le cas, vous devez obtenir un nouveau mandat auprès du client.Non
debit_not_authorizedLe client a informé sa banque que le paiement n’était pas autorisé ou la banque payeuse ne détient aucun mandat.Non
generic_could_not_processLe paiement n’a pas pu être traité.Oui
insufficient_fundsLe compte du client ne dispose pas de fonds suffisants pour couvrir le paiement.Oui
invalid_account_numberLe numéro de compte n’est pas valide. Cela peut signifier qu’il ne s’agit pas d’un compte libellé en GBP ou que le compte ne peut pas traiter les paiements par prélèvement automatique.Non

Pour effectuer une nouvelle tentative de paiement, confirmez le PaymentIntent à nouveau à l’aide du même PaymentMethod.

Pour mettre toutes les chances de votre côté que le paiement aboutisse, nous vous conseillons de contacter le payeur avant la nouvelle tentative.

Voir aussi

  • Webhooks de PaymentIntent
  • Gestion des mandats
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