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.
If you want to continue manually configuring the payment methods you present to your customers with Checkout, use this guide. Otherwise, update your integration to configure payment methods in the 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 affiche les informations afférentes à l’intention d’achat de votre client. Vous créez une session lorsque votre client veut payer une transaction. Après avoir redirigé votre client vers une session Checkout, Stripe affiche un formulaire de paiement afin que le client puisse finaliser son achat. Ce n’est qu’alors que le client est redirigé vers votre site.
Configurer StripeCô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 :
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.
Créer une session CheckoutCôté clientCô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.
<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 avec des 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_
, à 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_
. 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.
Note
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_
dans l’URL success_
, comme illustré ci-dessus.
Mise en garde
Ne vous fiez pas uniquement à la redirection vers le success_
pour détecter l’initiation du paiement, sachant que :
- Des utilisateurs malveillants pourraient accéder directement au
success_
sans payer et obtenir l’accès à vos biens ou à vos services.url - Il peut arriver que le client n’aboutisse pas au
success_
à l’issue de son paiement. Il peut par exemple lui arriver de fermer l’onglet de son navigateur avant que la redirection n’intervienne.url
Gérer les événements post-paiementCô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_
. 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énement | Description | Étapes suivantes |
---|---|---|
checkout.session.completed | Le 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_succeeded | Le paiement du client a abouti. | Traitez la commande de biens ou de services du client. |
checkout.session.async_payment_failed | Le paiement du client a été refusé, ou il a échoué pour une autre raison. | Contactez votre 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.
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_
. 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_
.
Sur votre page success_
, il sera opportun d’afficher 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 de crédit, 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.
.
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_
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 :
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.
Stripe met à votre disposition plusieurs numéros de compte bancaire de test que vous pouvez utiliser en mode test pour vous assurer que votre intégration est opérationnelle.
Code guichet | Numéro de compte | Description |
---|---|---|
108800 | 00012345 | Le paiement aboutit et l’état du PaymentIntent passe de processing à succeeded . |
108800 | 90012345 | Le paiement aboutit au bout de trois minutes et l’état du PaymentIntent passe de processing à succeeded . |
108800 | 33333335 | Le paiement est accepté, mais échoue immédiatement avec un code d’échec debit_ et le PaymentIntent bascule de processing à requires_ . L’objet Mandate devient inactive et le PaymentMethod ne peut plus être utilisé. |
108800 | 93333335 | Le paiement échoue au bout de trois minutes avec un code d’échec debit_ et le PaymentIntent bascule de processing à requires_ . L’objet Mandate devient inactive et le PaymentMethod ne peut plus être utilisé. |
108800 | 22222227 | Le paiement échoue avec un code d’échec insufficient_ et le PaymentIntent bascule de processing à requires_ . L’objet Mandate reste active et le PaymentMethod peut à nouveau être utilisé. |
108800 | 92222227 | Le paiement échoue au bout de trois minutes avec un code d’échec insufficient_ et le PaymentIntent bascule de processing à requires_ . L’objet Mandate reste active et le PaymentMethod peut à nouveau être utilisé. |
108800 | 55555559 | Le paiement aboutit au bout de trois minutes et l’état du PaymentIntent passe de processing à succeeded , mais un litige est immédiatement créé. |
108800 | 00033333 | La création du moyen de paiement aboutit, mais le mandat est refusé par la banque du client et passe immédiatement à l’état inactif. |
108800 | 00044444 | La 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. |
108800 | 34343434 | The payment fails with a charge_ failure code due to the payment amount causing the account to exceed its weekly payment volume limit. |
108800 | 12121212 | The payment fails with a charge_ failure code due to the payment amount exceeding the account’s transaction volume limit. |
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.
Note
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 en mode 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’échec | Description | Nouvelle tentative possible |
---|---|---|
account_ | Le compte bancaire a été clôturé. | Non |
bank_ | Le 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_ | Le client a informé sa banque que le paiement n’était pas autorisé ou la banque payeuse ne détient aucun mandat. | Non |
generic_ | Le paiement n’a pas pu être traité. | Oui |
insufficient_ | Le compte du client ne dispose pas de fonds suffisants pour couvrir le paiement. | Oui |
invalid_ | Le numéro de compte n’est pas valide. Cela peut signifier qu’il ne s’agit pas d’un compte 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.