# Accepter un virement bancaire Utilisez l'API Payment Intents pour accepter les paiements par virements bancaires. La première fois que vous acceptez un paiement par virement bancaire de la part d’un client, Stripe génère un compte bancaire virtuel pour lui, que vous pouvez ensuite partager directement avec lui. Tous les futurs paiements par virement bancaire de ce client seront envoyés vers ce compte bancaire. Dans certains pays, Stripe vous fournit également un numéro de référence de virement unique que votre client doit associer à chaque virement afin de faciliter la comparaison entre le virement et les paiements en attente. Notez que certains pays limitent le nombre de numéros de comptes bancaires virtuels que vous pouvez créer gratuitement. Le diagramme de séquence suivant propose un aperçu des étapes courantes à suivre lors de l’acceptation d’un paiement par virement bancaire : #### Avec facture Étapes courantes à suivre lors de l'acceptation d'un paiement par virement bancaire (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Sans facture ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-1.a17fe04695ef532427f25a9e1276ee2e.svg) ## Gérer les paiements insuffisants et les trop-perçus Avec les paiements par virement bancaire, il peut arriver que le montant des fonds envoyés par le client soit inférieur ou supérieur à celui attendu. Si la somme est insuffisante, Stripe règle partiellement le PaymentIntent ouvert. Les factures ne font pas l’objet d’un règlement partiel et restent ouvertes jusqu’à ce que les fonds entrants couvrent l’intégralité de leur montant. Si le client envoie un montant supérieur au montant attendu, Stripe tente de rapprocher les fonds entrants avec un paiement en cours et conservera le montant excédentaire restant dans le solde de trésorerie du client. En savoir davantage sur [comment Stripe gère les opérations de rapprochement](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Avec facture Lorsqu’un client verse un montant insuffisant : Un client a effectué un virement bancaire avec un montant inférieur à celui attendu (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) Lorsqu’un client verse un montant trop élevé : Un client a effectué un virement bancaire avec un montant supérieur à celui attendu (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Sans facture ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-2.464fe916d5822422144c8aea0f31ed45.svg) ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-3.b1992851a5f3492d14eaa35e336b0e9f.svg) ## Gérer plusieurs paiements ou factures ouvert(e)s Vous pouvez avoir plusieurs paiements ou factures ouvert(e)s payables par virement bancaire. Par défaut, Stripe tentera de [rapprocher automatiquement](https://docs.stripe.com/payments/customer-balance/reconciliation.md) le virement bancaire en utilisant certaines informations telles que le code de référence du virement ou le montant viré. Vous pouvez désactiver le rapprochement automatique et [rapprocher manuellement](https://docs.stripe.com/payments/customer-balance/reconciliation.md#cash-manual-reconciliation) des paiements et des factures. Vous pouvez contourner le rapprochement automatique, selon le client, en définissant le [mode de rapprochement](https://docs.stripe.com/api/customers/create.md#create_customer-cash_balance-settings-reconciliation_mode) sur manuel. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=checkout. > Stripe peut automatiquement proposer les moyens de paiement pertinents à vos clients en évaluant la devise, les restrictions liées aux moyens de paiement et d’autres paramètres. > > - Suivez le guide [Accepter un paiement](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=stripe-hosted) pour créer une intégration de paiement qui utilise des [moyens de paiement dynamiques](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). - Si vous ne souhaitez pas utiliser de moyens de paiement dynamiques, suivez les étapes ci-dessous pour configurer manuellement les moyens de paiement dans votre intégration Checkout. Le virement bancaire est un moyen de paiement [à usage unique](https://docs.stripe.com/payments/payment-methods.md#usage) pour Checkout via lequel les clients paient par virement bancaire en utilisant les instructions de paiement présentées. Lorsqu’il choisit de payer, l’utilisateur est redirigé vers une page hébergée qui affiche les instructions de virement bancaire et l’état du paiement par virement. Le virement bancaire est également un *moyen de paiement à notification différée* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods), ce qui signifie que les fonds ne sont pas disponibles immédiatement après le paiement. > Les transferts bancaires ne sont pas disponibles pour les sessions Checkout sans [objet Customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer) existant dans la requête de création de la session. ## Déterminer la compatibilité **Lieux d’implantation pris en charge** : Europe (SEPA area), UK, JP, MX, US **Devises prises en charge** : `eur, gbp, jpy, mxn, usd` **Devises de règlement** : `eur, gbp, jpy, mxn, usd` **Mode de paiement** : Yes **Mode de configuration** : No **Mode d’abonnement** : No Une session Checkout doit remplir toutes les conditions suivantes pour prendre en charge les paiements Bank Transfer : - Les *tarifs* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) de tous les postes de facture doivent être exprimés dans la même devise. Pour définir des postes dans différentes devises, créez des sessions Checkout distinctes pour chacune d’entre elles. - Vous ne pouvez utiliser que les postes ponctuels (les sessions Checkout avec virement bancaire ne prennent pas en charge les plans d’*abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) récurrents). ## Accepter un paiement > Avant d’utiliser ce guide, commencez par créer une intégration permettant d’[accepter un paiement](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout) avec Checkout. Utilisez ce guide pour activer Bank Transfer. ### Créer ou récupérer un Customer Vous devez associer un objet [Customer](https://docs.stripe.com/api/customers.md) à chaque paiement par virement bancaire à des fins de rapprochement. Si vous possédez déjà un objet Customer, vous pouvez ignorer cette étape. Sinon, créez un nouvel objet Customer. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ### Activer le moyen de paiement Bank Transfer Lors de la création d’une nouvelle [session Checkout](https://docs.stripe.com/api/checkout/sessions.md), vous devez : 1. Définir `customer` 1. Ajouter `customer_balance` à la liste des `payment_method_types` 1. Veiller à ce que tous vos `line_items` utilisent la même devise #### États-Unis ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_method_types[0]"=card \ -d "payment_method_types[1]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=us_bank_transfer \ --data-urlencode success_url="https://example.com/success" ``` #### Royaume-Uni ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]"=gbp \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_method_types[0]"=card \ -d "payment_method_types[1]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=gb_bank_transfer \ --data-urlencode success_url="https://example.com/success" ``` #### UE ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]"=eur \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_method_types[0]"=card \ -d "payment_method_types[1]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=eu_bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]"=FR \ --data-urlencode success_url="https://example.com/success" ``` Définissez [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) sur `BE`, `DE`, `FR`, `IE` ou `NL` pour afficher l’IBAN localisé au client. #### Japon ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]"=jpy \ -d "line_items[0][price_data][product_data][name]"="Tシャツ" \ -d "line_items[0][price_data][unit_amount]"=19000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_method_types[0]"=card \ -d "payment_method_types[1]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=jp_bank_transfer \ --data-urlencode success_url="https://example.com/success" ``` #### Mexique ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]"=mxn \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=18000 \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d "payment_method_types[0]"=card \ -d "payment_method_types[1]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=mx_bank_transfer \ --data-urlencode success_url="https://example.com/success" ``` ### Rediriger vers la page d’instruction concernant les virements bancaires hébergée par Stripe > Contrairement aux paiements par carte bancaire, le paiement n’est pas toujours redirigé vers le lien [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url) pour les paiements par virement bancaire. Une fois le formulaire Checkout *envoyé* (Submitting an order indicates that the customer intends to pay. Upon submission, the order can no longer be updated and is ready for payment), - Si le solde du client permet de payer le montant requis, le paiement est effectué immédiatement et le client est redirigé vers le lien [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url). - Si le solde du client n’est pas suffisant pour payer le montant requis, il est redirigé vers la [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url). Cette page contient des instructions pour aider votre client à effectuer le virement. Stripe vous permet de personnaliser les interfaces utilisateur sur la page [Adaptation à votre marque](https://dashboard.stripe.com/account/branding). Vous pouvez appliquer les paramètres de marque suivants à la page d’instructions hébergée : - **Icône** : image représentant votre marque et votre dénomination sociale publique - **Couleur de marque** : utilisée comme couleur d’arrière-plan ### Traiter vos commandes Le virement bancaire étant un *moyen de paiement à notification différée* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods), vous devez utiliser une méthode telle que des *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) pour suivre l’état des paiements et gérer le *traitement* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) des commandes. En savoir plus sur la [configuration des webhooks et le traitement des commandes](https://docs.stripe.com/checkout/fulfillment.md). Les événements suivants sont envoyés lorsque l’état du paiement change : | Nom de l’événement | Description | Étapes suivantes | | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------- | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Le client a bien envoyé le formulaire Checkout. Il est redirigé vers `hosted_instructions_url`. | Attendez que le client ait effectué le virement bancaire. | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Le client a effectué le virement bancaire. Le `PaymentIntent` bascule sur `succeeded`. | Traitez la commande de biens ou de services du client. | ## Optional: Envoyer des instructions sur les paiements par e-mail Vous pouvez activer les e-mails d’instruction sur les paiements par virement bancaire depuis le [Dashboard](https://dashboard.stripe.com/settings/emails). Une fois que vous avez activé les e-mails d’instruction sur les paiements, Stripe envoie un e-mail à votre client dans les cas suivants°: - Un PaymentIntent est confirmé, mais le client ne dispose pas d’un solde suffisant. - Le client envoie un virement bancaire mais ne dispose pas de fonds suffisants pour finaliser les paiements en attente. Un e-mail d’instruction sur les paiements par virement bancaire contient le montant dû, les informations bancaires pour le transfert de fonds, ainsi qu’un lien vers la page d’instructions hébergée par Stripe. > Dans un environnement de test, seules les adresses e-mail associées à un compte Stripe reçoivent des instructions sur les paiements par e-mail. ## Tester votre intégration Vous pouvez tester votre intégration en simulant un virement bancaire entrant à l’aide de l’API, du Dashboard ou d’une version bêta de l’interface de ligne de commande Stripe. #### Dashboard Pour simuler un virement bancaire à l’aide du Dashboard, accédez à la page du client dans le *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). Dans la section **Moyens de paiement**, cliquez sur **Ajouter** et sélectionnez **Ajouter des fonds au solde disponible (mode test uniquement)**. #### Inscription des utilisateurs reposant sur l'API Pour simuler un virement bancaire à l’aide de l’API : #### États-Unis ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### Royaume-Uni ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### Japon ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### Mexique ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### CLI Stripe Pour simuler un virement bancaire avec l’interface de ligne de commande Stripe : 1. [Installer la CLI Stripe](https://docs.stripe.com/stripe-cli.md). 1. Connectez-vous à l’interface de ligne de commande en utilisant le même compte que pour vous connecter au Dashboard Stripe. ```bash stripe login ``` 1. Simulez un virement bancaire entrant pour un client existant. #### États-Unis ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### Royaume-Uni ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### Japon ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### Mexique ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. ## See also - [Exécution Checkout](https://docs.stripe.com/checkout/fulfillment.md) - [Personnaliser Checkout](https://docs.stripe.com/payments/checkout/customization.md) # Elements > This is a Elements for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=elements. ## Configurer Stripe [Côté serveur] Pour commencer, vous devez [créer un compte](https://dashboard.stripe.com/register) Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe à partir de 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 ou récupérer un objet Customer [Côté serveur] Vous devez associer un objet [Customer](https://docs.stripe.com/api/customers.md) à chaque paiement par virement bancaire à des fins de rapprochement. Si vous possédez déjà un objet Customer, vous pouvez ignorer cette étape. Sinon, créez un nouvel objet Customer. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent [Côté serveur] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) est un objet qui représente votre intention de collecter un paiement auprès d’un client et qui suit le cycle de vie du processus de paiement à chaque étape. Créez un PaymentIntent sur le serveur et précisez le montant à encaisser ainsi que la devise. Vous devez également renseigner le [paramètre customer](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) de la requête de création du PaymentIntent. Les transferts bancaires ne sont pas disponibles sur les PaymentIntents sans client. #### Gérer les moyens de paiement depuis le Dashboard Avant de créer un Payment Intent, veillez à activer les **virements bancaires** dans les [paramètres des moyens de paiement](https://dashboard.stripe.com/settings/payment_methods) de votre Dashboard. > Avec les [moyens de paiement dynamiques](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe gère l’affichage des moyens de paiement admissibles en fonction de facteurs tels que le montant de la transaction, la devise et le tunnel de paiement. #### États-Unis ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true ``` #### Royaume-Uni ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]"=true ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]"=true ``` Pour localiser le numéro IBAN affiché au client, vous pouvez configurer le pays du client en définissant la propriété [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) ou en [modifiant le client dans le Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Nous prenons en charge la localisation de l’IBAN pour  : - Si vous n’avez pas configuré de pays pour votre client, ou si son pays ne prend pas en charge la localisation IBAN, nous utilisons le pays de votre compte Stripe. - Si la localisation de l’IBAN n’est pas prise en charge pour le pays de votre compte Stripe, nous utilisons `IE`. > La création de numéros de comptes bancaires virtuels localisés (VBAN) n’est actuellement pas disponible pour l’Espagne (ES). Utilisez plutôt des VBAN d’autres pays de l’UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" ``` Dans la dernière version de l’API, la spécification du paramètre `automatic_payment_methods` est facultative, car Stripe active sa fonctionnalité par défaut. Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Répertorier les moyens de paiement manuellement Pour spécifier manuellement des moyens de paiement avec l’API, ajoutez `customer_balance` à la liste des [types de moyens de paiement](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) de votre PaymentIntent. Spécifiez l’[ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) du client. #### États-Unis ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=us_bank_transfer ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `us_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### Royaume-Uni ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=gb_bank_transfer ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `gb_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=eu_bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]"=FR ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `eu_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. - Définissez [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) sur l’une des options suivantes : . L’IBAN que voit le client est localisé pour le pays choisi. > La création de numéros de comptes bancaires virtuels localisés (VBAN) n’est actuellement pas disponible pour l’Espagne (ES). Utilisez plutôt des VBAN d’autres pays de l’UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=jp_bank_transfer ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `jp_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=mx_bank_transfer ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `mx_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. > Veillez à spécifier systématiquement le paramètre `payment_method_types` lorsque vous créez un paiement. Vous ne pouvez pas utiliser `customer_balance` pour des [paiements futurs](https://docs.stripe.com/payments/save-and-reuse.md). ## Collecter les informations de paiement [Côté client] Collectez les informations de paiement du client avec le [Payment Element](https://docs.stripe.com/payments/payment-element.md). Le Payment Element est un composant d’interface utilisateur préconfiguré qui simplifie la collecte des informations pour de nombreux moyens de paiement. Le Payment Element contient un iframe qui envoie les informations de paiement à Stripe de manière sécurisée via une connexion HTTPS. Évitez de placer le Payment Element dans un autre iframe, car certains moyens de paiement nécessitent une redirection vers une autre page pour la confirmation du paiement. Si vous choisissez d’utiliser un iframe et que vous souhaitez accepter Apple Pay ou Google Pay, l’attribut [allow](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) de l’iframe doit être défini sur égal à `"payment *"`. Pour que votre intégration fonctionne, l’adresse de la page de paiement doit commencer par `https://` et non par `http://`. Vous pouvez tester votre intégration sans utiliser le protocole HTTPS, mais n’oubliez pas de l’[activer](https://docs.stripe.com/security/guide.md#tls) lorsque vous souhaitez commencer à accepter des paiements réels. #### HTML + JS ### Configurer Stripe.js Le composant Element Payment est automatiquement disponible en tant que fonctionnalité de Stripe.js. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. Chargez toujours Stripe.js directement à partir de js.stripe.com pour maintenir votre conformité PCI. Vous ne devez pas inclure le script dans une offre groupée ni en héberger de copie. ```html Checkout ``` Créez une instance de Stripe avec le code JavaScript suivant sur votre page de paiement : ```javascript // 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('<>'); ``` ### Ajouter le Payment Element à votre page de paiement Le composant Element Payment doit avoir un emplacement dédié dans votre page de paiement. Créez un nœud DOM (conteneur) vide doté d’un ID unique dans votre formulaire de paiement : ```html
``` Lors du chargement du formulaire précédent, créez une instance du composant Payment Element et intégrez-la au nœud DOM conteneur. Lorsque vous créez l’instance [Elements](https://docs.stripe.com/js/elements_object/create), transmettez la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) définie à l’étape précédente dans les `options` : 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. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` #### React ### Configurer Stripe.js Installez [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) et le [chargeur Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) à partir du registre public npm : ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Ajouter le fournisseur Elements à votre page de paiement et le configurer Pour utiliser le composant Payment Element, enveloppez votre composant de page de paiement dans un [fournisseur Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Appelez `loadStripe` avec votre clé publique, puis transmettez au fournisseur `Elements` l’élément `Promise` renvoyé. Transmettez également la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) de l’étape précédente en tant que `options`, toujours au fournisseur `Elements`. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { const options = { // passing the client secret obtained in step 3 clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Ajouter le composant Element Payment Utilisez le composant `PaymentElement` pour créer votre formulaire : ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
); }; export default CheckoutForm; ``` Stripe Elements est un ensemble de composants d’interface utilisateur modulables. Pour personnaliser davantage votre formulaire ou collecter d’autres informations client, consultez la [documentation relative à Elements](https://docs.stripe.com/payments/elements.md). Le composant Payment Element affiche un formulaire dynamique qui permet à votre client de choisir un moyen de paiement. Pour chaque moyen de paiement, le formulaire demande automatiquement au client de renseigner toutes les informations de paiement nécessaires. ### Personnaliser l’apparence Personnalisez le Payment Element pour qu’il corresponde à l’apparence de votre site en ajoutant l’[objet Appearance](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-appearance) dans `options` lors de la création du fournisseur `Elements`. ### Collecter les adresses Par défaut, le Payment Element ne collecte que les informations nécessaires à la facturation. Certaines opérations, telles que le [calcul des taxes](https://docs.stripe.com/api/tax/calculations/create.md) ou la saisie des informations de livraison, nécessitent l’adresse complète de votre client. Vous pouvez : - Utilisez l’[Address Element](https://docs.stripe.com/elements/address-element.md) pour tirer parti des fonctionnalités de saisie automatique et de localisation et recueillir l’adresse complète de votre client. Cela permet de garantir un calcul des taxes le plus précis possible. - Recueillez l’adresse à l’aide de votre propre formulaire personnalisé. Après la confirmation, votre client voit automatiquement s’afficher une fenêtre modale contenant les détails du virement bancaire. ## Soumettre le paiement à Stripe [Côté client] Utilisez [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) pour effectuer le paiement à l’aide des informations du composant Payment Element. Ajoutez un paramètre [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) à cette fonction pour indiquer la page vers laquelle Stripe doit rediriger l’utilisateur à l’issue du paiement. Votre utilisateur peut être redirigé en premier lieu vers un site intermédiaire, comme une page d’autorisation bancaire, avant d’être redirigé vers la page spécifiée par le paramètre `return_url`. L’utilisateur sera immédiatement redirigé vers la page `return_url` après un paiement réussi par carte. Si vous ne souhaitez pas effectuer de redirection à la fin des paiements par carte, vous pouvez assigner au paramètre [redirect](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) la valeur `if_required`. De cette manière, seuls les clients qui choisissent un moyen de paiement avec redirection seront redirigés. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Pour appeler [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) depuis votre composant de formulaire de paiement, utilisez les hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) et [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook). Si vous préférez les composants de classe traditionnels aux hooks, vous pouvez utiliser un [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer). ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Veillez à ce que le paramètre `return_url` corresponde à une page de votre site web qui indique l’état du paiement. Lorsque Stripe redirige le client vers la page `return_url`, nous fournissons les paramètres de requête d’URL suivants : | Paramètre | Description | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent` | L’identifiant unique du `PaymentIntent`. | | `payment_intent_client_secret` | La [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) de l’objet `PaymentIntent`. | > Si vous disposez d’outils qui assurent le suivi de la session navigateur du client, vous devrez peut-être ajouter le domaine `stripe.com` à la liste d’exclusion des sites référents. Les redirections font que certains outils créent de nouvelles sessions, ce qui empêche le suivi de la session dans son ensemble. Utilisez l’un des paramètres de requête pour récupérer le PaymentIntent. Consultez l’[état du PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md) pour déterminer les informations à présenter à vos clients. Vous pouvez également ajouter vos propres paramètres de requête lorsque vous ajoutez l’URL `return_url` ; ils seront conservés tout au long du processus de redirection. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Optional: Envoyer des instructions sur les paiements par e-mail Vous pouvez activer les e-mails d’instruction sur les paiements par virement bancaire depuis le [Dashboard](https://dashboard.stripe.com/settings/emails). Une fois que vous avez activé les e-mails d’instruction sur les paiements, Stripe envoie un e-mail à votre client dans les cas suivants°: - Un PaymentIntent est confirmé, mais le client ne dispose pas d’un solde suffisant. - Le client envoie un virement bancaire mais ne dispose pas de fonds suffisants pour finaliser les paiements en attente. Un e-mail d’instruction sur les paiements par virement bancaire contient le montant dû, les informations bancaires pour le transfert de fonds, ainsi qu’un lien vers la page d’instructions hébergée par Stripe. > Dans un environnement de test, seules les adresses e-mail associées à un compte Stripe reçoivent des instructions sur les paiements par e-mail. ## Confirmer l'aboutissement du PaymentIntent Le PaymentIntent reste à l’état `requires_action` jusqu’à ce que les fonds arrivent sur le compte bancaire. Dès réception du paiement, l’état du PaymentIntent associé passe de `requires_action` à `succeeded`. Vous devez configurer votre endpoint de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) pour recevoir l’événement `payment_intent.partially_funded`. Lorsque le PaymentIntent est partiellement financé, son état reste `requires_action`. Vous pouvez [ajouter un webhook depuis le Dashboard](https://dashboard.stripe.com/webhooks/create). Vous pouvez aussi utiliser l’[API Webhook Endpoints](https://docs.stripe.com/api/webhook_endpoints.md) pour recevoir l’événement [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). > La [CLI Stripe](https://docs.stripe.com/stripe-cli.md) ne prend pas en charge le déclenchement d’événements de la version bêta de l’API tels que `payment_intent.partially_funded`. Les événements suivants sont envoyés durant le flux de financement du paiement lorsque le PaymentIntent est mis à jour : | Événement | Description | Étapes suivantes | | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent.requires_action` | Envoyé pendant la confirmation lorsque le solde du client ne dispose pas de fonds suffisants pour rapprocher le PaymentIntent, le PaymentIntent passe à l’état `requires_action`. | Demandez à votre client d’effectuer un virement bancaire correspondant au montant `amount_remaining`. | | `payment_intent.partially_funded` | Le client a fait un virement bancaire qui a été appliqué au PaymentIntent, mais cela n’a pas suffi à finaliser le paiement. Cela peut arriver si le client a transféré un montant trop faible (pour cause de paiement insuffisant par erreur ou de frais facturés par sa banque) ou si un solde client restant a été appliqué à ce PaymentIntent. Les PaymentIntents partiellement financés ne sont pas visibles dans le solde de votre compte tant que le paiement n’a pas été effectué. | Demandez à votre client de réaliser un autre virement bancaire correspondant au nouveau `amount_remaining` pour finaliser le paiement. Si vous souhaitez effectuer le paiement avec les fonds partiellement appliqués, vous pouvez mettre à jour le champ `amount` et [confirmer](https://docs.stripe.com/api/payment_intents/confirm.md) à nouveau le PaymentIntent. | | `payment_intent.succeeded` | Le paiement du client a abouti. | Traitez la commande de biens ou de services du client. | > Lorsque vous modifiez le montant d’un PaymentIntent partiellement financé, les fonds sont reversés sur le solde du client. Si d’autres PaymentIntents sont ouverts, Stripe les finance automatiquement. Si le client est configuré pour le rapprochement manuel, vous devez [utiliser les fonds](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) à nouveau. Nous vous recommandons d’[utiliser des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) afin de confirmer que le paiement a abouti et pour signaler au client que le paiement a été effectué. ### Exemple de code #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Consulter les paiements en attente sur le Dashboard Vous pouvez consulter les PaymentIntents associés à des virements bancaires en attente dans le [Dashboard](https://dashboard.stripe.com/payments) en appliquant le filtre **En attente de financement** au champ **État**. ## Tester votre intégration Vous pouvez tester votre intégration en simulant un virement bancaire entrant à l’aide de l’API, du Dashboard ou d’une version bêta de l’interface de ligne de commande Stripe. #### Dashboard Pour simuler un virement bancaire à l’aide du Dashboard, accédez à la page du client dans le *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). Dans la section **Moyens de paiement**, cliquez sur **Ajouter** et sélectionnez **Ajouter des fonds au solde disponible (mode test uniquement)**. #### Inscription des utilisateurs reposant sur l'API Pour simuler un virement bancaire à l’aide de l’API : #### États-Unis ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### Royaume-Uni ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### Japon ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### Mexique ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### CLI Stripe Pour simuler un virement bancaire avec l’interface de ligne de commande Stripe : 1. [Installer la CLI Stripe](https://docs.stripe.com/stripe-cli.md). 1. Connectez-vous à l’interface de ligne de commande en utilisant le même compte que pour vous connecter au Dashboard Stripe. ```bash stripe login ``` 1. Simulez un virement bancaire entrant pour un client existant. #### États-Unis ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### Royaume-Uni ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. #### Japon ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### Mexique ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` Le paramètre `reference` est facultatif et simule la valeur renseignée par le client pour le champ de référence du virement bancaire. ## Gestion des problèmes de disponibilité temporaires Les codes d’erreur suivants indiquent que des problèmes temporaires affectent la disponibilité du moyen de paiement : | Code | Description | Gestion | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Un trop grand nombre de requêtes successives ont été effectuées pour ce moyen de paiement, dont les limites sont plus strictes que les [limites de débit à l’échelle de l’API](https://docs.stripe.com/rate-limits.md). | Lorsque de nombreux clients tentent d’utiliser le même moyen de paiement (par exemple, pendant la période des soldes), ces erreurs peuvent perdurer pendant plusieurs requêtes API. Dans ce cas, demandez à vos utilisateurs de choisir un autre moyen de paiement. | > Si vous prévoyez une utilisation intensive, que ce soit de manière générale ou pour un événement à venir, veillez à nous prévenir aussitôt que possible. # API directe > This is a API directe for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=direct-api. ## 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 ou récupérer un client [Côté serveur] Vous devez associer un objet [Customer](https://docs.stripe.com/api/customers.md) à chaque paiement par virement bancaire à des fins de rapprochement. Si vous possédez déjà un objet Customer, vous pouvez ignorer cette étape. Sinon, créez un nouvel objet Customer. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer et confirmer un PaymentIntent [Côté serveur] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) est un objet qui représente votre intention d’encaisser un paiement client et qui suit le cycle de vie du processus de paiement étape par étape. Créez et confirmez un PaymentIntent sur le serveur et précisez le montant à encaisser ainsi que la devise. Vous devez également remplir les [paramètres client](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) de la demande de création du Paymentintent. Les virements bancaires ne sont pas disponibles sur les PayentIntents sans client. #### Gérer les moyens de paiement depuis le Dashboard Avant de créer un Payment Intent, veillez à activer les **virements bancaires** dans les [paramètres des moyens de paiement](https://dashboard.stripe.com/settings/payment_methods) de votre Dashboard. > Avec les [moyens de paiement dynamiques](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe gère l’affichage des moyens de paiement admissibles en fonction de facteurs tels que le montant de la transaction, la devise et le tunnel de paiement. #### États-Unis ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" \ -d "payment_method_data[type]"=customer_balance \ -d confirm=true ``` #### Royaume-Uni ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" \ -d "payment_method_data[type]"=customer_balance \ -d confirm=true ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" \ -d "payment_method_data[type]"=customer_balance \ -d confirm=true ``` Pour localiser le numéro IBAN affiché au client, vous pouvez configurer le pays du client en définissant la propriété [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) ou en [modifiant le client dans le Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Nous prenons en charge la localisation de l’IBAN pour  : - Si vous n’avez pas configuré de pays pour votre client, ou si son pays ne prend pas en charge la localisation IBAN, nous utilisons le pays de votre compte Stripe. - Si la localisation de l’IBAN n’est pas prise en charge pour le pays de votre compte Stripe, nous utilisons `IE`. > La création de numéros de comptes bancaires virtuels localisés (VBAN) n’est actuellement pas disponible pour l’Espagne (ES). Utilisez plutôt des VBAN d’autres pays de l’UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" \ -d "payment_method_data[type]"=customer_balance \ -d confirm=true ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d customer="{{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]"=true \ --data-urlencode return_url="https://example.com/return_url" \ -d "payment_method_data[type]"=customer_balance \ -d confirm=true ``` Dans la dernière version de l’API, la spécification du paramètre `automatic_payment_methods` est facultative, car Stripe active sa fonctionnalité par défaut. Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Répertorier les moyens de paiement manuellement Pour spécifier manuellement des moyens de paiement avec l’API, ajoutez `customer_balance` à la liste des [types de moyens de paiement](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) de votre PaymentIntent. Spécifiez l’[ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) du client. #### États-Unis ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_data[type]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=us_bank_transfer \ -d confirm=true ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `us_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### Royaume-Uni ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_data[type]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=gb_bank_transfer \ -d confirm=true ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `gb_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_data[type]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=eu_bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]"=FR \ -d confirm=true ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `eu_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. - Définissez [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) sur l’une des options suivantes : . L’IBAN que voit le client est localisé pour le pays choisi. > La création de numéros de comptes bancaires virtuels localisés (VBAN) n’est actuellement pas disponible pour l’Espagne (ES). Utilisez plutôt des VBAN d’autres pays de l’UE. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_data[type]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=jp_bank_transfer \ -d confirm=true ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `jp_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d customer="{{CUSTOMER_ID}}" \ -d "payment_method_types[]"=customer_balance \ -d "payment_method_data[type]"=customer_balance \ -d "payment_method_options[customer_balance][funding_type]"=bank_transfer \ -d "payment_method_options[customer_balance][bank_transfer][type]"=mx_bank_transfer \ -d confirm=true ``` Si le solde du client suffit déjà à couvrir le montant du paiement, le PaymentIntent aboutit immédiatement et reçoit l’état `succeeded`. Les clients peuvent accumuler un solde lorsqu’ils versent par erreur un montant trop élevé lors d’une transaction, ce qui se produit fréquemment lors des paiements par virement bancaire. Vous devez [rapprocher les soldes des clients dans un délai précis en fonction de votre pays](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Attribuez la valeur `bank_transfer` à l’attribut [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) afin d’indiquer la marche à suivre si le client ne dispose pas d’un solde suffisant pour couvrir le montant du paiement. - Attribuez la valeur `mx_bank_transfer` à l’attribut [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) afin de spécifier le type de virement bancaire qui pourra être utilisé pour le paiement. > Veillez à spécifier systématiquement le paramètre `payment_method_types` lorsque vous créez un paiement. Vous ne pouvez pas utiliser `customer_balance` pour des [paiements futurs](https://docs.stripe.com/payments/save-and-reuse.md). ## Donner les instructions au client afin qu'il effectue le virement bancaire [Côté client] Si le solde du client n’est pas suffisant pour payer le montant requis, le PaymentIntent affiche l’état `requires_action`. La réponse comporte un champ `next_action` dont la valeur `type` est définie sur `display_bank_transfer_instructions`. Le hachage `next_action[display_bank_transfer_instructions]` contient les informations que vous devez montrer à votre client pour qu’il effectue le virement bancaire. Pour garantir le règlement des fonds, demandez à vos clients d’utiliser les informations exactes fournies, en particulier le nom et le numéro de compte, le cas échéant. > En *mode production* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments), Stripe fournit à chaque client un jeu unique de coordonnées de virement bancaire. En revanche, en environnement de test, Stripe fournit des coordonnées de virement bancaire non valides à tous les clients, lesquelles peuvent par ailleurs ne pas être uniques. #### US | Champ | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Le type de virement bancaire à utiliser. Il doit être défini sur `us_bank_transfer` aux États-Unis. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Code de référence unique qui identifie le virement bancaire. Demandez à votre client d’inclure ce code dans le champ de la référence de son virement bancaire. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Montant restant à virer pour finaliser le paiement. Demandez à votre client de vous virer ce montant. Celui-ci peut être différent du montant du PaymentIntent si des fonds préexistants dans le solde du client ont été appliqués au PaymentIntent ou si votre client a insuffisamment payé. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Devise du montant restant. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Liste des adresses financières pour les comptes bancaires situés aux États-Unis. Les types incluent `aba` et `swift`. Pour plus d’informations, voir ci-dessous. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Lien vers une page hébergée qui guide votre client dans l’exécution de son virement. | #### Hachage aba Exemple de hash `aba` : ```json { "aba": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "routing_number": "444555666" }, "supported_networks": [ "ach", "domestic_wire_us" ], "type": "aba" } ``` | Champ | Valeurs | Descriptif | | -------------------- | ------------------------------ | --------------------------------------------------- | | `type` | `aba` | Type d’adresse financière. | | `supported_networks` | - `ach` - `domestic_wire_us` | Liste des réseaux pris en charge par cette adresse. | | `aba.account_number` | 111222333444 | Le numéro de compte ABA. | | `aba.routing_number` | 444555666 | Le numéro de routage ABA. | | `aba.bank_name` | Wells Fargo Bank, NA | Le nom de la banque. | #### Hachage swift Exemple de hash `swift` : ```json { "swift": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "swift_code": "AAAA-BB-CC-123" }, "supported_networks": [ "swift" ], "type": "swift" } ``` | Champ | Valeurs | Descriptif | | ---------------------- | -------------------- | --------------------------------------------------- | | `type` | `swift` | Type d’adresse financière. | | `supported_networks` | - `swift` | Liste des réseaux pris en charge par cette adresse. | | `swift.account_number` | 111222333444 | Le numéro de compte SWIFT. | | `swift.swift_code` | AAAA-BB-CC-123 | Le code SWIFT. | | `swift.bank_name` | Wells Fargo Bank, NA | Le nom de la banque. | #### Délai de règlement Une fois que vous avez demandé à votre client d’initier un virement auprès de sa banque à l’aide des informations que vous avez fournies, le virement peut nécessiter jusqu’à cinq jours. Le délai de règlement dépend des voies bancaires par lesquelles le virement passe pour arriver sur Stripe : - Les virements ACH arrivent sous 3 jours ouvrés. - Les virements nationaux (Fedwire) arrivent le jour même (s’ils sont envoyés avant l’heure limite fixée par la banque). - Les virements bancaires internationaux (SWIFT) arrivent sous 5 jours ouvrés. #### UK | Champ | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Le mode de virement bancaire à utiliser. Il doit être défini sur `gb_bank_transfer` au Royaume-Uni. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Code de référence unique qui identifie le virement bancaire. Demandez à votre client d’inclure ce code dans le champ de la référence de son virement bancaire. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Montant restant à virer pour finaliser le paiement. Demandez à votre client de vous virer ce montant. Celui-ci peut être différent du montant du PaymentIntent si des fonds préexistants dans le solde du client ont été appliqués au PaymentIntent ou si votre client a insuffisamment payé. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Devise du montant restant. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | La liste des adresses financières pour les comptes bancaires britanniques. Les types incluent `sort_code`. Pour plus d’informations, voir ci-dessous. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Lien vers une page hébergée qui guide votre client dans l’exécution de son virement. | ### Hachage sort_code Exemple de hash `sort_code` : ```json { "sort_code": { "account_holder_name": "Demo Test Inc.", "account_number": "98765432", "sort_code": "200000" }, "supported_networks": [ "bacs", "fps" ], "type": "sort_code" } ``` | Champ | Valeurs | Descriptif | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `sort_code` | Type d’adresse financière. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `bacs` - `fps` | Liste des réseaux pris en charge par cette adresse. | | [sort_code.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_number) | 98765432 | Le numéro de compte à 8 chiffres. | | [sort_code.sort_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-sort_code) | 200000 | Le code guichet à 6 chiffres. | | [sort_code.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_holder_name) | Demo Test Inc. | Nom de la personne ou de l’entreprise propriétaire du compte bancaire. | #### Délai de règlement Une fois que vous avez demandé à votre client d’initier un virement auprès de sa banque à l’aide des informations que vous avez fournies, le virement peut nécessiter jusqu’à cinq jours. Le délai de règlement dépend des voies bancaires par lesquelles le virement passe pour arriver sur Stripe : - Les transferts FPS arrivent en moins de 15 minutes. - Les transferts BACS arrivent dans les 5 jours. > Les virements bancaires effectués via le réseau de paiement [CHAPS](https://www.bankofengland.co.uk/payment-and-settlement/chaps) ne sont pas pris en charge actuellement. #### UE | Champ | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Le mode de virement bancaire à utiliser. Il doit être défini sur `eu_bank_transfer` dans l’UE. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Code de référence unique qui identifie le virement bancaire. Demandez à votre client d’inclure ce code dans le champ de la référence de son virement bancaire. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Montant restant à virer pour finaliser le paiement. Demandez à votre client de vous virer ce montant. Celui-ci peut être différent du montant du PaymentIntent si des fonds préexistants dans le solde du client ont été appliqués au PaymentIntent ou si votre client a insuffisamment payé. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Devise du montant restant. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Liste des adresses financières pour les comptes bancaires européens. Les types incluent `iban`. Voir ci-dessous pour plus de détails. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Lien vers une page hébergée qui guide votre client dans l’exécution de son virement. | ### Hachage iban Exemple de hachage `iban` ```json { "iban": { "account_holder_name": "Demo Test Inc.", "bic": "CITINL2XXXX", "country": "NL", "iban": "NL40CITI7000799556 " }, "supported_networks": [ "sepa" ], "type": "iban" } ``` | Champ | Valeurs | Descriptif | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `iban` | Type d’adresse financière. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `sepa` | Liste des réseaux pris en charge par cette adresse. | | [iban.iban](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-iban) | NL40CITI7000799556 | L’IBAN auquel le client doit effectuer le paiement. Si vous gérez les moyens de paiement depuis le [Dashboard](https://dashboard.stripe.com/settings/payment_methods), le pays de l’IBAN est sélectionné en fonction du [pays](https://docs.stripe.com/api/customers/object.md#customer_object-country) du client ou du pays de votre compte Stripe. Si vous répertoriez manuellement les moyens de paiement à l’aide du paramètre [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types), le pays de l’IBAN est sélectionné en fonction du paramètre [country](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_transfer-country) transmis dans la requête. | | [iban.bic](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-bic) | CITINL2XXXX | BIC de cet IBAN. | | [iban.country](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-country) | `NL` | Le code pays à deux lettres du compte bancaire sur lequel effectuer le virement. | | [iban.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-account_holder_name) | Demo Test Inc. | Nom de la personne ou de l’entreprise propriétaire du compte bancaire. | #### Délai de règlement Pour transferts nationaux, demandez à votre client d’initier un virement SEPA instantané (lorsqu’il est disponible) en utilisant les informations que vous fournissez. Les fonds sont généralement crédités en quelques secondes et arrivent sous 30 minutes. Un règlement plus long peut survenir les week-ends, jours fériés ou si la banque de l’émetteur ne peut pas traiter le paiement de manière instantanée. Dans ces cas, le virement est traité comme un paiement SEPA standard. > L’acceptation des transferts internationaux en EUR est en version bêta. Pour bénéficier d’un accès anticipé, écrivez à [sepa-bank-transfers-beta@stripe.com](mailto:sepa-bank-transfers-beta@stripe.com). #### JP | Champ | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Le mode de virement bancaire à utiliser. Il doit être défini sur `jp_bank_transfer` au Japon. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Ce champ n’est pas utilisé. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Montant restant à virer pour finaliser le paiement. Demandez à votre client de vous virer ce montant. Celui-ci peut être différent du montant du PaymentIntent si des fonds préexistants dans le solde du client ont été appliqués au PaymentIntent ou si votre client a insuffisamment payé. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Devise du montant restant. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses) | Liste des adresses financières pour les comptes bancaires japonais. Les types incluent `zengin`. Pour plus d’informations, voir ci-dessous. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Lien vers une page hébergée qui guide votre client dans l’exécution de son virement. | ### Hachage zengin Exemple de hash `zengin` : ```json { "zengin": { "account_holder_name": "ストライプジャパン(カ シュウノウダイコウ", "account_number": "1234567", "account_type": "futsu", "bank_code": "0009", "bank_name": "三井住友銀行", "branch_code": "950", "branch_name": "東京第二" }, "supported_networks": [ "zengin" ], "type": "zengin" } ``` | Champ | Valeurs | Descriptif | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | --------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `zengin` | Type d’adresse financière. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `zengin` | Liste des réseaux pris en charge par cette adresse. | | [zengin.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_code) | 0009 | Le code banque à 4 chiffres. | | [zengin.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_name) | 三井住友銀行 | Le nom de la banque. | | [zengin.branch_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_code) | 950 | Le code guichet à 3 chiffres. | | [zengin.branch_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_name) | 東京第二 | Le nom du guichet. | | [zengin.account_type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_type) | `futsu`, `toza` | Le type de compte. | | [zengin.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_holder_name) | ストライプジャパン(カ シュウノウダイコウ | Le nom du titulaire du compte. | | [zengin.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_number) | 1234567 | Le numéro de compte à 7 chiffres. | #### Délai de règlement Demandez à votre client d’initier un transfert auprès de sa banque à l’aide des informations que vous avez fournies. Les virements effectués pendant les heures d’ouverture arrivent le jour même. Les virements effectués en dehors des heures d’ouverture arrivent le jour ouvrable suivant. #### MX | Champ | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Le mode de virement bancaire à utiliser. Il doit être défini sur `mx_bank_transfer` au Mexique. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Code de référence unique qui identifie le virement bancaire. Demandez à votre client d’inclure ce code dans le champ de la référence de son virement bancaire. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Montant restant à virer pour finaliser le paiement. Demandez à votre client de vous virer ce montant. Celui-ci peut être différent du montant du PaymentIntent si des fonds préexistants dans le solde du client ont été appliqués au PaymentIntent ou si votre client a insuffisamment payé. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Devise du montant restant. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Liste des adresses financières pour les comptes bancaires mexicains. Les types incluent `spei`. Pour plus d’informations, voir ci-dessous. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Lien vers une page hébergée qui guide votre client dans l’exécution de son virement. | ### Hachage spei Exemple de hash `spei` : ```json { "spei": { "bank_code": "002", "bank_name": "BANAMEX", "clabe": "002180650612345670" }, "supported_networks": [ "spei" ], "type": "spei" } ``` | Champ | Valeurs | Descriptif | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | --------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `spei` | Type d’adresse financière. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `spei` | Liste des réseaux pris en charge par cette adresse. | | [spei.clabe](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-clabe) | 002180650612345670 | Le numéro CLABE à 18 chiffres. | | [spei.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_code) | 002 | Le code banque à 3 chiffres. | | [spei.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_name) | BANAMEX | Abréviation de l’institution bancaire | Demandez à votre client d’initier un transfert auprès de sa banque à l’aide des informations que vous avez fournies. Nous prévoyons que la plupart des paiements arrivent en moins de 10 minutes, les jours bancaires comme les jours non bancaires. ## Confirmer la réussite du PaymentIntent Le PaymentIntent reste à l’état `requires_action` jusqu’à ce que les fonds arrivent sur le compte bancaire. Dès réception du paiement, l’état du PaymentIntent associé passe de l’état `requires_action` à `succeeded`. Vous devez configurer votre endpoint de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) pour commencer à recevoir l’événement `payment_intent.partially_funded``. Vous pouvez [ajouter un webhook depuis le Dashboard](https://dashboard.stripe.com/webhooks/create). Vous pouvez aussi utiliser l’[API Webhook Endpoints](https://docs.stripe.com/api/webhook_endpoints.md) pour recevoir l’événement [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). Au cours du flux de financement du paiement, Stripe envoie les événements suivants lorsque le PaymentIntent est mis à jour. | Événement | Description | Étapes suivantes | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent.requires_action` | Envoyé en cours de confirmation lorsque le solde du client ne dispose pas de fonds suffisants pour rapprocher le PaymentIntent, ce PaymentIntent passe à `requires_action`. Si le solde de trésorerie d’un client a été automatiquement appliqué à PaymentIntent au moment de la confirmation et que le montant ne couvre pas entièrement le `amount` de PaymentIntent, Stripe émet cet événement avec un `amount_remaining` précis. | Demandez à votre client d’effectuer le virement bancaire avec le `amount_remaining`. | | `payment_intent.partially_funded` | Le client a effectué un virement bancaire qui a été appliqué à PaymentIntent, mais le montant était insuffisant pour finaliser le paiement. Ceci peut se produire si le client transfère un montant insuffisant après que vous ayez confirmé le `PaymentIntent`. Ceci peut être dû à un paiement insuffisant ou à des frais facturés par la banque du client. Les PaymentIntent partiellement financés ne sont pas reflétés dans le solde de votre compte tant que le paiement n’est pas terminé. | Demandez à votre client de réaliser un autre virement bancaire correspondant au nouveau `amount_remaining` pour finaliser le paiement. Si vous souhaitez effectuer le paiement avec les fonds partiellement appliqués, vous pouvez mettre à jour le champ `amount` et [confirmer](https://docs.stripe.com/api/payment_intents/confirm.md) à nouveau le PaymentIntent. | | `payment_intent.succeeded` | Le paiement du client a abouti. | Traitez la commande de biens ou de services de votre client. | Pour écouter tous les événements liés au financement partiel, écoutez à la fois `requires_action` et `partially_funded`. Stripe émet une `requires_action` lorsque le financement est toujours requis après confirmation. Nous émettons `partially_funded` lorsque nous recevons ultérieurement des fonds supplémentaires du client qui ne couvrent pas intégralement le montant restant. > Lorsque vous modifiez le montant d’un PaymentIntent partiellement financé, les fonds sont reversés sur le solde du client. Si d’autres PaymentIntents sont ouverts, Stripe les finance automatiquement. Si le client est configuré pour le rapprochement manuel, vous devez [utiliser les fonds](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) à nouveau. Nous vous recommandons d’[utiliser des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) afin de confirmer que le paiement a abouti et pour signaler au client que le paiement a été effectué. ### Exemple de code #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Consulter les paiements en attente sur le Dashboard Vous pouvez consulter les PaymentIntents associés à des virements bancaires en attente dans le [Dashboard](https://dashboard.stripe.com/payments) en appliquant le filtre **En attente de financement** au champ **État**. ## Tester votre intégration Vous pouvez tester votre intégration en simulant un virement bancaire entrant soit à l’aide du Dashboard, soit à l’aide d’une requête HTTP. ### Avec le Dashboard Pour simuler un virement bancaire à l’aide du Dashboard, accédez à la page du client dans le *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). Dans la section **Moyens de paiement**, cliquez sur **Ajouter** et sélectionnez **Ajouter des fonds au solde disponible (mode test uniquement)**. ### Avec l'API Stripe Vous pouvez également simuler un virement bancaire en effectuant un appel à l’API. #### US ```curl curl https://api.stripe.com/v1/test_helpers/customers/ic_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d reference=REF-4242 ``` #### UK ```curl curl https://api.stripe.com/v1/test_helpers/customers/ic_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=gbp \ -d reference=REF-4242 ``` #### UE ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=eur \ -d reference=REF-4242 ``` #### JP ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=10000 \ -d currency=jpy ``` #### MX ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=mxn \ -d reference=123456 ``` ## Gestion des problèmes de disponibilité temporaires Les codes d’erreur suivants indiquent que des problèmes temporaires affectent la disponibilité du moyen de paiement : | Code | Description | Gestion | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Un trop grand nombre de requêtes successives ont été effectuées pour ce moyen de paiement, dont les limites sont plus strictes que les [limites de débit à l’échelle de l’API](https://docs.stripe.com/rate-limits.md). | Lorsque de nombreux clients tentent d’utiliser le même moyen de paiement (par exemple, pendant la période des soldes), ces erreurs peuvent perdurer pendant plusieurs requêtes API. Dans ce cas, demandez à vos utilisateurs de choisir un autre moyen de paiement. | > Si vous prévoyez une utilisation intensive, que ce soit de manière générale ou pour un événement à venir, veillez à nous prévenir aussitôt que possible. ## Optional: Collecter des options de moyen de paiement auprès de votre client Si nécessaire, collectez le type de financement préféré de votre clientèle sur votre site et confirmez le Payment Intent au moyen de la méthode [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) pour [Stripe.js](https://docs.stripe.com/js.md). Affichez un formulaire HTML pour recueillir les détails concernant le mode de financement privilégié du client pour les virements bancaires. Utilisez ces informations pour renseigner le paramètre `payment_method_options`. Consultez la [documentation de référence sur JavaScript](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) pour obtenir la liste complète des paramètres `payment_method_options` disponibles pour `confirmCustomerBalancePayment`. Voici un exemple de cas d’usage : vous êtes marchand en Irlande, et vous ne savez pas dans quel pays se trouve votre client. Dans ce cas, vous créez un `PaymentIntent` avec `payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]` défini initialement sur ‘IE’. Vous utilisez ensuite une méthode [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) pour mettre à jour le pays en fonction de la saisie de l’utilisateur. ### Exemple de code ```javascript const {paymentIntent, error} = await stripe.confirmCustomerBalancePayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: { customer_balance: { }, }, payment_method_options: { customer_balance: { funding_type: 'bank_transfer', bank_transfer: { type: 'eu_bank_transfer', eu_bank_transfer: { country: 'FR', } }, }, }, }, { handleActions: false, } ); if (error) { // Inform the customer that there was an error. } else if (paymentIntent.status === 'requires_payment_method') { // If `payment_method_options.funding_type` wasn't set this // is where you would need to handle the insufficient customer // balance state. } else if (paymentIntent.status === 'requires_action') { // If the current customer balance is insufficient to cover // the amount, and you've passed // `payment_method_options.funding_type` for funding the // customer balance, you can display the bank transfer // instructions to your user. if (paymentIntent.next_action.type === 'display_bank_transfer_instructions') { // Bank transfer details can be found under: // paymentIntent.next_action.display_bank_transfer_instructions } } ``` ## Optional: Envoyer des instructions sur les paiements par e-mail Vous pouvez activer les e-mails d’instruction sur les paiements par virement bancaire depuis le [Dashboard](https://dashboard.stripe.com/settings/emails). Une fois que vous avez activé les e-mails d’instruction sur les paiements, Stripe envoie un e-mail à votre client dans les cas suivants°: - Un PaymentIntent est confirmé, mais le client ne dispose pas d’un solde suffisant. - Le client envoie un virement bancaire mais ne dispose pas de fonds suffisants pour finaliser les paiements en attente. Un e-mail d’instruction sur les paiements par virement bancaire contient le montant dû, les informations bancaires pour le transfert de fonds, ainsi qu’un lien vers la page d’instructions hébergée par Stripe. > Dans un environnement de test, seules les adresses e-mail associées à un compte Stripe reçoivent des instructions sur les paiements par e-mail.