# Migrer les comptes bancaires existants Découvrez comment migrer des comptes bancaires existants vers l’API Payment Intents ou l’API Checkout Sessions. Stripe supprime la prise en charge de [ACH Direct Debit](https://docs.stripe.com/ach-deprecated.md) via les [intégrations existantes](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md#identify-legacy-payments). Si vous créez des paiements ACH Direct Debit via des intégrations existantes, vous devez migrer vers l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) ou l’[API Checkout Sessions](https://docs.stripe.com/api/checkout/sessions.md). Si vous avez précédemment collecté les informations de paiement de vos clients avec Stripe via l’[API Tokens](https://docs.stripe.com/ach-deprecated.md), vous pouvez continuer à utiliser l’objet `BankAccount` enregistré comme *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs). Vous pouvez utiliser des [comptes bancaires](https://docs.stripe.com/api/customer_bank_accounts.md) clients avec l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) ou l’[API Checkout Sessions](https://docs.stripe.com/payments/quickstart-checkout-sessions.md) uniquement après avoir rempli les conditions suivantes : - **API Checkout Sessions :** le compte bancaire du client a été vérifié. - **API Payment Intents :** le compte bancaire du client a été vérifié et un [mandat actif](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md#mandate-acknowledgement) existe pour ce compte bancaire. Vous n’avez pas besoin de revérifier les comptes bancaires déjà vérifiés pour les utiliser avec les PaymentIntents ou les Checkout Sessions. # API Checkout Sessions > This is a API Checkout Sessions for when integration-path is checkout. View the full page at https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges?integration-path=checkout. ## Utiliser Checkout Sessions Pour afficher les comptes bancaires précédemment enregistrés et vérifiés dans Checkout, vous devez procéder comme suit : - Créez une session de paiement avec un paramètre`client` - Définissez les filtres sur `['unspecified', 'always']` - Spécifiez`us_bank_account` dans `payment_method_types` Lorsque ces exigences sont remplies, Checkout trouve et affiche automatiquement tous les comptes bancaires enregistrés et vérifiés associés à ce client, éliminant ainsi le besoin de collecter à nouveau les détails de paiement. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d ui_mode=elements \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[0]=us_bank_account" \ -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]=1099" \ -d "line_items[0][quantity]=1" \ -d "saved_payment_method_options[allow_redisplay_filters][0]=unspecified" \ -d "saved_payment_method_options[allow_redisplay_filters][1]=always" \ --data-urlencode "return_url=YOUR_DOMAIN/complete?session_id={CHECKOUT_SESSION_ID}" ``` Si le `customer` a une adresse e-mail associée, l’adresse e-mail du client est préremplie dans la [Session](https://docs.stripe.com/js/custom_checkout/session_object) et ne peut pas être modifiée. Vous devez vérifier la présence d’une adresse e-mail et afficher votre champ de saisie d’e-mail en conséquence. #### React ```javascript const {checkout} = useCheckout(); const currentEmail = checkout.email; if (currentEmail) { return ; } ``` #### HTML/JavaScript ```javascript const emailInput = document.getElementById("email"); const loadActionsResult = await checkout.loadActions(); const session = loadActionsResult.actions.getSession(); const currentEmail = session.email; if (currentEmail) { emailInput.value = currentEmail; emailInput.readOnly = true; emailInput.classList.add('read-only'); } ``` # API Payment Intents > This is a API Payment Intents for when integration-path is payment-intent. View the full page at https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges?integration-path=payment-intent. ## Collecter la confirmation du mandat Pour confirmer un PaymentIntent ou un SetupIntent, votre client doit autoriser un [mandat](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data) de prélèvement du compte. Consultez la page relative aux [codes SEC](https://docs.stripe.com/payments/ach-direct-debit/sec-codes.md) pour comprendre quel type d’autorisation convient à votre entreprise. Dans certains cas, vous pouvez disposer d’une pré-autorisation de votre client provenant d’un achat antérieur ou d’un Setup Intent que vous pouvez utiliser pour créer un paiement *off-session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information). Par exemple : - Si vous avez précédemment collecté un mandat en ligne auprès du client, vous pouvez utiliser l’adresse IP et les informations d’agent utilisateur pour créer un objet `mandate`. Si vous n’avez pas conservé l’adresse IP ou les informations d’agent utilisateur du client, vous pouvez fournir des données de substitution. Dans ce cas, nous vous recommandons de choisir une valeur que vous pourrez facilement identifier ultérieurement. - si vous avez précédemment collecté les informations de paiement et de mandat hors ligne, vous pouvez créer un [mandat PPD](https://docs.stripe.com/payments/ach-direct-debit/sec-codes.md#ppd-sec-code). L’autorisation n’est requise que la première fois que vous utilisez un objet `BankAccount` avec l’API Payment Intents ou API Setup Intents. Ensuite, vous pouvez utiliser l’objet `BankAccount` comme PaymentMethod pour [accepter des paiements futurs](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-future-payments). Vous pouvez créer et confirmer un Setup Intent pour créer un `mandate` sans avoir besoin de débiter un client : ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d "mandate_data[customer_acceptance][type]=offline" \ -d "mandate_data[customer_acceptance][accepted_at]=123456789" \ -d confirm=true ``` Vous pouvez également fournir des données de mandat lors de la confirmation d’un Payment Intent : ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ -d "mandate_data[customer_acceptance][type]=offline" \ -d "mandate_data[customer_acceptance][accepted_at]=123456789" \ -d "payment_method_options[us_bank_account][mandate_options][collection_method]=paper" ``` ## Créer un PaymentIntent avec un compte bancaire Vous pouvez utiliser un `BankAccount` enregistré comme *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) lors de la création d’un PaymentIntent, ce qui évite de devoir collecter à nouveau les informations de paiement. Veillez également à [mettre à jour votre intégration](https://docs.stripe.com/payments/ach-direct-debit/accept-a-payment.md) afin de commencer à créer des PaymentMethods plutôt que des comptes bancaires. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d amount=1099 \ -d currency=usd ``` De même, vous pouvez utiliser un BankAccount enregistré comme PaymentMethod lors de la création d’un SetupIntent. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" ``` ## Récupérer un BankAccount en tant que PaymentMethod Vous pouvez récupérer les BankAccounts enregistrés via l’[API Payment Methods](https://docs.stripe.com/api/payment_methods.md). ```curl curl https://api.stripe.com/v1/payment_methods/{{BANKACCOUNT_ID}} \ -u "<>:" ``` Lorsqu’un BankAccount est utilisé comme PaymentMethod, aucun nouvel objet n’est créé. L’API Payment Methods propose simplement une vue différente du même objet sous-jacent. #### Vue PaymentMethod ```json { "id": "ba_1IsleZ2eZvKYlo2CI3To1g72", "object": "payment_method", "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null, "state": null }, "email": null, "name": "Jenny Rosen", "phone": null }, "us_bank_account": { "last4": "6789", "routing_number": "110000000", "fingerprint": "1JWtPxqbdX5Gamtc", "account_holder_type": "individual", "bank_name": "STRIPE TEST BANK", }, "created": 123456789, "customer": "cus_CY5bH92D99f4mn", "livemode": false, "metadata": {}, "type": "us_bank_account" } ``` #### Vue BankAccount ```json { "id": "ba_1IsleZ2eZvKYlo2CI3To1g72", "object": "bank_account", "account_holder_name": "Jenny Rosen", "account_holder_type": "individual", "bank_name": "STRIPE TEST BANK", "country": "US", "currency": "usd", "customer": "cus_CY5bH92D99f4mn", "fingerprint": "1JWtPxqbdX5Gamtc", "last4": "6789", "metadata": {}, "routing_number": "110000000", "status": "verified", } ``` ## Factures Après avoir collecté l’acceptation du mandat, pour continuer à utiliser [Invoicing](https://docs.stripe.com/invoicing.md), vous devez soit mettre à jour le moyen de paiement par défaut de votre client, soit définir le paramètre `default_payment_method`. Pour mettre à jour le moyen de paiement par défaut d’un client : ```curl curl https://api.stripe.com/v1/customers/{{CUSTOMER_ID}} \ -u "<>:" \ -d "invoice_settings[default_payment_method]={{BANKACCOUNT_ID}}" ``` Pour créer une facture avec un compte bancaire comme moyen de paiement : ```curl curl https://api.stripe.com/v1/invoices \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "default_payment_method={{BANKACCOUNT_ID}}" ``` ## Abonnements Après avoir collecté l’acceptation du mandat, pour continuer à utiliser [Subscriptions](https://docs.stripe.com/subscriptions.md), vous devez soit mettre à jour le moyen de paiement par défaut de votre client, soit définir le paramètre `default_payment_method`. Pour mettre à jour le moyen de paiement par défaut d’un client : ```curl curl https://api.stripe.com/v1/customers/{{CUSTOMER_ID}} \ -u "<>:" \ -d "invoice_settings[default_payment_method]={{BANKACCOUNT_ID}}" ``` Pour créer un abonnement avec un compte bancaire comme moyen de paiement : ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "default_payment_method={{BANKACCOUNT_ID}}" \ -d "items[0][price]=price_1MowQULkdIwHu7ixraBm864M" ``` ## Identifier les paiements ACH existants Sur un objet [Charge](https://docs.stripe.com/api/charges/object.md), la propriété `payment_method_details.type` est définie sur `ach_debit` pour l’intégration existante et sur `us_bank_account` pour la nouvelle intégration. Un paiement ACH existant est créé lorsqu’un objet `BankAccount` existant est utilisé comme [source](https://docs.stripe.com/api/charges/object.md#charge_object-source) de paiement. Cela se produit lorsque : - vous appelez l’[API Create Charge](https://docs.stripe.com/api/charges/create.md) ; - un [Subscription](https://docs.stripe.com/billing/subscriptions/overview.md) ou une [Invoice](https://docs.stripe.com/invoicing/overview.md) facture un client dont la `default_source` est un BankAccount existant, et qu’aucun `default_payment_method` n’est défini au niveau du client, de l’abonnement ou de la facture ; - vous appelez l’[API Create PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md) avec `source` défini sur un BankAccount existant.