# Enregistrer les coordonnées bancaires de prélèvement automatique Bacs Découvrez comment utiliser Checkout pour enregistrer les informations du moyen de paiement de vos clients pour leurs paiements futurs par prélèvement automatique Bacs. > #### Utiliser l’API Accounts v2 pour représenter les clients > > L’API Accounts v2 est généralement disponible pour les utilisateurs de Connect et en aperçu public pour les autres utilisateurs de Stripe. Si vous avez accès à l’aperçu Accounts v2, vous devez [spécifier une version d’aperçu](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dans votre code. > > Pour demander l’accès à l’aperçu Accounts v2, > > Dans la plupart des cas d’usage, nous vous recommandons de [modéliser vos clients en tant qu’objets Account configurés par le client](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), plutôt que d’utiliser des objets [Customer](https://docs.stripe.com/api/customers.md). Utilisez [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) pour collecter les informations du moyen de paiement par prélèvement automatique Bacs en amont, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Ceci est utile aux fins suivantes : - Enregistrement des moyens de paiement dans un portefeuille pour faciliter les achats ultérieurs. - Encaissement de suppléments de facturation après la fourniture d’un service. - [Démarrer une période d’essai gratuit dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/trials.md). ## Configurer Stripe [Côté serveur] Pour commencer, il vous faut un compte Stripe. [Inscrivez-vous](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Créer un client [Côté serveur] Pour que la réutilisation d’un moyen de paiement par prélèvement automatique Bacs soit possible pour de futurs paiements, celui-ci doit être rattaché à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsqu’un client ouvre un compte sur votre site et associez l’ID de l’objet Customer à votre propre représentation interne du client afin de pouvoir utiliser ultérieurement les données du moyen de paiement stockées. Si vous possédez déjà un objet Customer, ignorez cette étape. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer une session Checkout [Côté client] [Côté serveur] [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) propose une page de paiement hébergée qui satisfait aux exigences applicables aux prélèvements automatiques Bacs. Si vous souhaitez créer votre propre formulaire de prélèvement automatique Bacs, veuillez [contacter](https://stripe.com/contact/sales) notre équipe commerciale. Pour que vous puissiez accepter les paiements par prélèvement automatique, votre client doit au préalable vous fournir ses coordonnées bancaires et vous donner l’autorisation de débiter son compte (au moyen de ce que l’on appelle un [mandat](https://docs.stripe.com/payments/payment-methods/bacs-debit.md#mandates)) via Stripe Checkout. Ajoutez sur votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une session Checkout. ```html Checkout
``` Créez une session Checkout en mode `setup` pour recueillir les informations requises. Après avoir créé la session Checkout, redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d mode=setup \ -d customer="{{CUSTOMER_ID}}" \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Quand votre client fournit les informations de son moyen de paiement, il est redirigé vers l’URL `success_url`, une page de votre site Web qui l’informe que son moyen de paiement a bien été enregistré. Mettez l’ID de session à disposition sur votre page de confirmation de paiement en incluant la variable de modèle `{CHECKOUT_SESSION_ID}` dans l’URL `success_url`, comme illustré ci-dessus. > Ne vous fiez pas uniquement à la redirection vers `success_url` pour détecter l’initiation d’un paiement, car : > > - Des utilisateurs malveillants pourraient accéder directement au `success_url` sans payer et obtenir l’accès à vos biens ou à vos services. - Après un paiement réussi, les clients peuvent fermer l’onglet de leur navigateur avant d’être redirigés vers `success_url`. > Les règles applicables aux prélèvements automatiques Bacs prévoient l’envoi obligatoire au client d’une notification par e-mail à la collecte de ses informations de paiement. Par défaut, ces e-mails sont envoyés automatiquement par Stripe, mais vous pouvez également choisir d’[envoyer vos propres notifications Bacs](https://docs.stripe.com/payments/payment-methods/bacs-debit.md#debit-notifications) à vos clients. ## Récupérer le moyen de paiement [Côté serveur] Une fois que le client a soumis ses informations de paiement, récupérez l’objet [PaymentMethod](https://docs.stripe.com/payments/payment-methods.md). Un *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) stocke les informations bank account du client pour ses paiements ultérieurs. Vous pouvez récupérer cet objet de manière synchrone en utilisant la `success_url` ou de manière asynchrone au moyen de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests). La décision de récupérer l’objet PaymentMethod de manière synchrone ou asynchrone dépend de votre tolérance aux abandons de paiement. En effet, 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). L’utilisation de webhooks vous permet d’éviter que votre intégration ne subisse ce type d’abandon. #### Webhooks Gérez des webhooks `checkout.session.completed`, qui contiennent un objet Session. Pour en savoir plus, consultez la page sur la [configuration de webhooks](https://docs.stripe.com/webhooks.md). Voici un exemple de réponse `checkout.session.completed` : ```json { "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "client_reference_id": null, "customer": null, "customer_email": null, "display_items": [], "mode": "setup","setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" } ``` Notez la valeur de la clé `setup_intent`, qui est l’identifiant du SetupIntent créé avec la Checkout Session. Un [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) est un objet utilisé pour configurer les informations du client bank account pour les futurs paiements. [Récupérez](https://docs.stripe.com/api/setup_intents/retrieve.md) l’objet SetupIntent avec l’ID. L’objet renvoyé contient l’identifiant `payment_method`. ```curl curl https://api.stripe.com/v1/setup_intents/seti_1EzVO3HssDVaQm2PJjXHmLlM \ -u "<>:" ``` #### URL après paiement réussi Récupération du `session_id` depuis l’URL lorsque l’utilisateur est redirigé vers votre site et [récupération](https://docs.stripe.com/api/checkout/sessions/retrieve.md) de l’objet Session. ```curl curl -G https://api.stripe.com/v1/checkout/sessions/{{SESSION_ID}} \ -u "<>:" \ -d "expand[]=setup_intent" ``` > Pour faire en sorte que le `session_id` soit disponible depuis l’URL, incluez la variable de modèle `session_id={CHECKOUT_SESSION_ID}` dans le `success_url` lors de la création de la session Checkout. Notez le SetupIntent créé pendant la Checkout Session. Un [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) est un objet utilisé pour configurer les informations du client bank account pour les futurs paiements. L’objet renvoyé contient l’identifiant `payment_method`. ## Gérer les événements post-configuration [Côté serveur] Une fois la session Checkout terminée, les informations de paiement sont soumises à la banque sous forme de mandat. Un mandat peut changer à tout moment après avoir été collecté. Par exemple, le client peut demander à sa banque de le modifier ou peut changer de banque. Lorsqu’un mandat est modifié, Stripe envoie les événements suivants : | Nom de l’événement | Description | Peut accepter les paiements ? | | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | `mandate.updated` | Déclenché lorsque le mandat est rejeté, annulé ou réactivé par le réseau Bacs. Consultez le [mandate.status](https://docs.stripe.com/api/mandates/object.md#mandate_object-status) pour déterminer si le mandat peut continuer à être utilisé. | Oui, si le nouvel état est `active` | | `payment_method.automatically_updated` | Déclenché lorsque les coordonnées bancaires du client changent. | Oui | These events are available in the [Dashboard](https://dashboard.stripe.com/events), but you can set up a *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) to handle these programmatically. ## Tester l'intégration Il existe plusieurs [numéros de compte bancaire de test](https://docs.stripe.com/keys.md#test-live-modes) que vous pouvez utiliser dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) pour vérifier que cette intégration est prête. Vous pouvez également utiliser le token correspondant pour éviter la saisie manuelle des informations du compte. | Code guichet | Numéro de compte | Token | Description | | ------------ | ---------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `108800` | `00012345` | `pm_bacsDebit_success` | Le paiement aboutit et l’état du PaymentIntent passe de `processing` à `succeeded`. | | `108800` | `90012345` | `pm_bacsDebit_successDelayed` | Le paiement aboutit au bout de trois minutes et l’état du PaymentIntent passe de `processing` à `succeeded`. | | `108800` | `33333335` | `pm_bacsDebit_debitNotAuthorized` | Le paiement est accepté, puis échoue immédiatement avec le code d’échec `debit_not_authorized`, et le PaymentIntent passe de l’état `processing` à l’état `requires_payment_method`. Le Mandat devient `inactive` et le PaymentMethod ne peut plus être réutilisé. | | `108800` | `93333335` | `pm_bacsDebit_debitNotAuthorizedDelayed` | Le paiement échoue après trois minutes avec le code d’échec `debit_not_authorized`, et le PaymentIntent passe de l’état `processing` à l’état `requires_payment_method`. Le Mandat devient `inactive` et le PaymentMethod ne peut plus être utilisé. | | `108800` | `22222227` | `pm_bacsDebit_insufficientFunds` | Le 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é. | | `108800` | `92222227` | `pm_bacsDebit_insufficientFundsDelayed` | Le 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é. | | `108800` | `55555559` | `pm_bacsDebit_dispute` | 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` | `pm_bacsDebit_mandateRefused` | La création du moyen de paiement aboutit, mais le mandat est refusé par la banque du client et passe immédiatement à l’état `inactive`. | | `108800` | `00044444` | — | La demande de configuration du prélèvement automatique Bacs échoue immédiatement en raison d’un numéro de compte invalide, et le client est invité à mettre à jour ses informations avant de soumettre à nouveau. Aucune donnée de paiement n’est collectée, donc aucun token synthétique ne correspond à ce scénario. | | `108800` | `34343434` | `pm_bacsDebit_exceedsWeeklyLimit` | Le 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. | | `108800` | `12121212` | `pm_bacsDebit_exceedsTransactionLimit` | Le paiement échoue avec le code d’échec `charge_exceeds_transaction_limit` en raison d’un montant supérieur à la limite de 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. > Par défaut, Stripe envoie automatiquement des [e-mails](https://docs.stripe.com/payments/payment-methods/bacs-debit.md#debit-notifications) 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. ## Utiliser le moyen de paiement pour les paiements ultérieurs [Côté serveur] Une fois le *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) configuré, vous pouvez accepter les paiements ultérieurs par prélèvement automatique Bacs en créant et confirmant un [PaymentIntent](https://docs.stripe.com/payments/payment-intents.md). #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "payment_method_types[]"="bacs_debit" \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d customer="{{CUSTOMER_ID}}" \ -d confirm=true \ -d amount=100 \ -d currency=gbp ```