# Gérer les comptes de virement des comptes connectés Comment gérer les comptes bancaires externes et les cartes de débit pour les comptes connectés Les comptes de *virement* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit) peuvent être des comptes bancaires ou des cartes de débit. Stripe recommande de collecter les coordonnées externes avec le formulaire Web Connect Onboarding, qui vous aide à : - Consacrer moins de temps au design et au développement. - Éliminer la nécessité de stocker des données sensibles telles que les numéros de compte et de routage sur votre serveur. - Éliminez la nécessité de créer des validations de formulaire lorsque les comptes connectés saisissent leurs informations du compte. Aux États-Unis, nous recommandons aussi l’utilisation de [Financial Connections de Stripe](https://docs.stripe.com/financial-connections.md) qui permet à vos comptes connectés de lier en toute sécurité leurs comptes financiers à votre entreprise. Ceci vous permet de faire ce qui suit : - Augmenter le taux de conversion à l’inscription en évitant à vos comptes de devoir interrompre le processus pour localiser leurs numéros de compte et de routage. - Réduire les taux d’échec du premier virement en éliminant les erreurs dues à la saisie manuelle de numéros de compte et de routage. - Éliminer la nécessité de stocker des données sensibles telles que les numéros de compte et de routage sur votre serveur. - Éliminer la nécessité de créer des validations de formulaire lorsque les comptes saisissent leurs informations de compte dans les formulaires d’inscription personnalisés. - (Accounts v1 uniquement) Offrez à vos comptes la possibilité de s’authentifier plus rapidement en réutilisant les coordonnées bancaires qu’ils ont enregistrées sur [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses). Les comptes ayant enregistré les informations de leur compte auprès d’une entreprise Stripe à l’aide de Link pourront les partager avec votre plateforme lors de leur prochaine utilisation de Financial Connections. - Accéder à des informations supplémentaires sur le compte bancaire externe d’un compte, notamment les [soldes](https://docs.stripe.com/financial-connections/balances.md), les [informations de propriété](https://docs.stripe.com/financial-connections/ownership.md) et les [transactions](https://docs.stripe.com/financial-connections/transactions.md). Vous pouvez limiter la fraude lors de l’inscription en vérifiant des informations comme le nom et l’adresse du titulaire du compte bancaire externe. Lorsque [Link](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) est activé, les vérifications Financial Connections sont gratuites lorsque l’onboarding est intégré et hébergé par Stripe. Sinon, la [tarification standard des vérifications Financial Connections](https://stripe.com/financial-connections#pricing) s’applique. Si vous utilisez l’onboarding via API pour vos comptes connectés, vous pouvez collecter les informations du compte du virement à l’aide d’un formulaire personnalisé dans votre processus d’onboarding des comptes. ### Refuser la collecte de comptes externes Concernant les comptes pour lesquels la plateforme est responsable de la collecte des exigences, tels que les comptes Custom, vous pouvez choisir de ne pas collecter d’informations de comptes externes lors de l’inscription. Vous pouvez le faire si, par exemple, vous créez votre propre flux d’inscription dans lequel vous souhaitez collecter des informations sur les comptes externes. Dans inscription des utilisateurs, vous pouvez [disable external account collection](https://docs.stripe.com/connect/supported-embedded-components/account-onboarding.md?#external-account-collection) en définissant la fonctionnalité `external_account_collection` de la session de compte sur false. Vous pouvez également, dans l’inscription hébergée, activer ou désactiver la collecte des informations des comptes externes dans vos [Connect external accounts settings](https://dashboard.stripe.com/settings/connect/payouts/external_accounts), puis sous **Comptes pour lesquels la plateforme est responsable de la collecter des exigences**. Notez que c’est désactivé par défaut. ## Collecte de comptes externes #### Onboarding intégré ou hébergé par Stripe [L’Onboarding intégré et hébergé par Stripe](https://docs.stripe.com/connect/onboarding.md) utilise des formulaires web personnalisables pour collecter les informations nécessaires à l’onboarding des comptes connectés. Ceci permet de collecter les informations de comptes bancaires et les informations de cartes de débits. Vous pouvez utiliser Financial Connections pour collecter les informations de comptes bancaires, mais pas les informations de cartes de débits. Dans le cas des comptes connectés pour lesquels votre plateforme est responsable des soldes négatifs, vous pouvez personnaliser le processus de collecte des comptes externes dans vos paramètres de [Compte externe](https://dashboard.stripe.com/settings/connect/payouts/external_accounts). Dans les paramètres de votre **compte externe**, vous pouvez : - Activer ou désactiver la collecte des cartes de débit en sélectionnant l’option de votre choix sous **Autoriser les cartes de débit ?** - Exiger que les comptes connectés ajoutent au moins un compte bancaire avant de pouvoir ajouter tout autre type de compte externe, tel qu’une carte de débit. Vous pouvez accéder à ce paramètre sous **Exiger au moins un compte bancaire.** Ce paramètre est utile pour garantir la prise en charge du [prélèvement automatique](https://docs.stripe.com/connect/account-balances.md#automatically-debit-connected-accounts). - Contrôler si les comptes connectés peuvent ou non ajouter plus d’un compte externe dans une devise donnée. Le nombre de comptes externes est limité à cinq par devise. Vous pouvez accéder à ce paramètre sous **Collecter plusieurs comptes externes par devise**. #### Utiliser Stripe Financial Connections ### Disponible dans les pays suivants : - US Les plateformes Stripe établies aux États-Unis peuvent activer [Financial Connections de Stripe](https://docs.stripe.com/financial-connections.md) dans le formulaire d’onboarding intégré ou hébergé par Stripe, et ce, en suivant ces étapes : 1. Accédez aux [paramètres des comptes externes](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) où vous gérez les fonctionnalités Connect Onboarding optionnelles. 1. Dans le cas des comptes connectés pour lesquels votre plateforme collecte des informations de compte lors de la modification des exigences, vous devez autoriser l’onboarding intégré et hébergé par Stripe à collecter les informations de comptes externes. Dans la section **Onboarding hébergé par Stripe pour les comptes Custom**, activez l’option permettant à Stripe de collecter les informations de comptes externes. 1. Sous **Comment les coordonnées bancaires seront-elles collectées ?**, sélectionnez **Financial Connections**. 1. (Facultatif) Demandez l’autorisation d’accéder à des données supplémentaires sur les comptes vérifiés instantanément avec Financial Connections, telles que les soldes, les informations sur les propriétaires et les transactions. Si vous demandez cet accès supplémentaire, vous serez invité à vous inscrire à Financial Connections de Stripe. Lorsque la collecte des informations des comptes externes est activée, le processus d’onboarding invite tous les comptes connectés à authentifier leurs comptes bancaires. ![Image montrant un flux d'inscription Connect utilisant Stripe Financial Connections pour collecter un compte de virement.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-onboarding.8937a023f6682c90bab8c0b39873909a.png) Un flux d’inscription Connect utilisant Stripe Financial Connections pour collecter un compte de virement. Si un compte connecté ne peut pas vérifier instantanément son compte bancaire à l’aide de Financial Connections, le processus de vérification se rabat automatiquement sur la saisie manuelle : ![Image illustrant un processus d’onboarding Connect utilisant la boîte de dialogue Financial Connections de Stripe pour collecter un compte de virement par saisie manuelle.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-manual-entry.930da1e01c9026b9014008d75958bc8c.png) Un processus d’onboarding Connect utilisant la boîte de dialogue Financial Connections de Stripe pour collecter un compte de virement par saisie manuelle. Après l’inscription, le compte bancaire spécifié est automatiquement rattaché au compte connecté. ## Récupérer les données d’un compte Financial Connections (Server-side) Vous pouvez déterminer si un compte connecté est lié à un compte Financial Connections en utilisant son identifiant `Account` pour récupérer les comptes Financial Connections liés. Précisez leur identifiant `Account` comme étant `account_holder.account` ainsi que dans l’en-tête `Stripe-Account`. ```curl curl -G https://api.stripe.com/v1/financial_connections/accounts \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "account_holder[account]={{CONNECTEDACCOUNT_ID}}" ``` Cela renvoie une réponse API semblable à ce qui suit : ```json { "object": "list", "data": [ { "id": "fca_zbyrdjTrwcYZJZc6WBs6GPid", "object": "financial_connections.account", "account_holder": { "account": "{{CONNECTED_ACCOUNT_ID}}", "type": "account" }, ... "supported_payment_method_types": [ "us_bank_account" ] } ... ] } ``` Si des comptes Financial Connections sont répertoriés, cela signifie que le compte connecté a associé ces comptes au cours de l’inscription. Vous pouvez utiliser la valeur `id` pour accéder aux données spécifiées dans vos [paramètres de comptes externes](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) ou les actualiser. Pour des raisons de confidentialité, vous avez uniquement accès aux données que vous avez spécifiées. Consultez les guides relatifs aux [soldes](https://docs.stripe.com/financial-connections/balances.md), aux [propriété](https://docs.stripe.com/financial-connections/ownership.md) et aux [transactions](https://docs.stripe.com/financial-connections/transactions.md) pour commencer à récupérer les données d’un compte. Veillez à spécifier l’ID du compte connecté dans l’en-tête `Stripe-Account` pour toutes les futures demandes de récupération et d’actualisation de comptes : ```curl curl https://api.stripe.com/v1/financial_connections/accounts/fca_zbyrdjTrwcYZJZc6WBs6GPid/refresh \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "features[]=balance" ``` #### Activer la saisie manuelle des coordonnées bancaires Pour permettre à Stripe de collecter manuellement les coordonnées bancaires des comptes connectés dans le formulaire d’inscription, suivez ces étapes : 1. Ouvrez vos paramètres Connect et naviguez jusqu’à Virements > Comptes externes, où vous pouvez gérer les options Connect Onboarding. 1. Sous **Comment les coordonnées bancaires seront-elles collectées ?**, sélectionnez l’option de collecte manuelle des coordonnées bancaires. 1. Dans le cas des comptes connectés pour lesquels votre plateforme collecte des informations de compte lors de la modification des exigences, vous devez autoriser l’onboarding intégré et hébergé par Stripe à collecter les informations de comptes externes. Dans la section **Comptes pour lesquels la plateforme est responsable de la collecte des informations requises**, activez l’option permettant à Stripe de collecter les informations de comptes externes. ![Image montrant un flux d'inscription Connect utilisant un formulaire pour collecter un compte de virement par saisie manuelle.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-payout-manual-entry-form.6764993258659b2ad6517e0825181e49.png) Flux d’inscription Connect utilisant un formulaire pour recueillir un compte de virement par saisie manuelle. Les formats de coordonnées bancaires des différents pays varient légèrement et le formulaire affiche automatiquement les champs correspondant à votre pays d’exploitation. #### Appels directs à l'API depuis un formulaire personnalisé Pour les comptes connectés pour lesquels votre plateforme collecte des informations de compte lorsque les exigences changent, vous pouvez collecter des informations de compte externes en effectuant des appels directs à l’API à partir d’un formulaire personnalisé. #### Activer Stripe Financial Connections ### Disponible dans les pays suivants : - US Aux États-Unis, les plateformes Stripe peuvent activer [Stripe Financial Connections](https://stripe.com/financial-connections) dans leur formulaire d’inscription personnalisé. Après avoir activé Stripe Financial Connections dans votre formulaire, les comptes connectés authentifient instantanément leur compte bancaire dans le [flux d’authentification](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow). [Inscrivez-vous à Financial Connections](https://dashboard.stripe.com/financial-connections/application) pour pouvoir accéder au mode production. ### Créer un SetupIntent (Server-side) Insérez dans votre formulaire d’inscription un bouton ou un lien qui appelle un endpoint côté serveur pour créer un [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Le SetupIntent représente votre intention de collecter les informations bancaires d’un compte connecté. Par exemple, le libellé de votre bouton peut être **Associer votre compte bancaire**. Nous vous recommandons de créer un *client* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) avec une adresse e-mail associée pour chaque compte connecté. L’association d’un objet Customer vous permet de [répertorier les comptes précédemment associés](https://docs.stripe.com/api/financial_connections/accounts/list.md) ultérieurement. Fournissez une adresse e-mail lors de la création de votre client pour lui permettre de s’authentifier sur son compte plus rapidement en enregistrant et en réutilisant ses coordonnées bancaires avec [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses) auprès des entreprises Stripe qui utilisent le [flux d’authentification Financial Connections](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow). Lorsque vous créez un SetupIntent pour collecter les coordonnées bancaires d’un compte connecté, définissez les paramètres suivants : 1. Définissez le type de `customer` sur l’[ID du client](https://docs.stripe.com/api/customers/object.md#customer_object-id) 1. Définissez `payment_method_types` sur `["us_bank_account"]` 1. Définissez `flow_directions` sur `["outbound"]` 1. (Facultatif) Déterminez les données supplémentaires nécessaires à votre cas d’utilisation et demandez la permission d’y accéder. Par exemple, définissez `payment_method_options[us_bank_account][financial_connections][permissions]` sur `["payment_method", "ownership"]` pour demander l’accès aux données de propriété du compte Financial Connections après que votre utilisateur a associé son compte bancaire à l’aide de Financial Connections. Voici un exemple des exigences minimales requises pour la création d’un SetupIntent destiné à collecter des coordonnées bancaires : ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "flow_directions[]=outbound" \ -d "payment_method_types[]=us_bank_account" ``` Le SetupIntent renvoyé inclut une clé `client_secret`, laquelle lance l’interface utilisateur modale sur la page Stripe.js qui gère la collecte et la vérification des coordonnées bancaires. Le `client_secret` doit être utilisé avec prudence car il fournit un accès au SetupIntent avec une clé publiable uniquement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL, et ne le dévoilez à personne d’autre que vos comptes connectés. #### Web ## Collecter les informations du moyen de paiement (Client-side) Intégrez le script Stripe.js à votre page de collecte du compte bancaire en l’ajoutant entre les balises head de votre fichier HTML. ```html Payout ``` Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de collecte du compte bancaire. ```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 var stripe = Stripe('<>', { apiVersion: "{{DATE_VERSION}}" }); ``` Transmettez le paramètre `client_secret` de `SetupIntent` et le nom complet de l’utilisateur de votre compte connecté à `stripe.collectBankAccountForSetup` pour pouvoir collecter le moyen de paiement. ```javascript // Assume you have a form to collect payout accounts var form = document.getElementById('payout-form'); form.addEventListener('submit', (event) => { event.preventDefault(); // clientSecret is the SetupIntent's client_secret property stripe.collectBankAccountForSetup({ clientSecret, params: { payment_method_type: 'us_bank_account', payment_method_data: { billing_details: { // name is required name: 'Jenny Rosen', email: 'jenny@example.com' }, }, }, // Optional, helpful for client-side logic expand: ['payment_method'] }).then(({setupIntent, error}) => { if (error) { // Inform your connected account user that there was an error. console.log(error.message); } else { if (setupIntent.status === "requires_confirmation") { // Your connected account user provided bank account details // When you pass `expand: ['payment_method']` to `collectBankAccountForSetup`, // `setupIntent.payment_method` has data about the Payment Method, including // the Financial Connections Account ID, if your connected account user used // Financial Connections to provide their bank account details. const usedFinancialConnections = typeof setupIntent.payment_method.financial_connections_account === 'string'; console.log(setupIntent.payment_method.id); // => 'pm_1Mb4UkJGNKiWrCEmJ1PS72Cd' return stripe.confirmUsBankAccountSetup(clientSecret).then(({setupIntent, error}) => { if (error) { // Inform your connected account user that there was an error, and check your request logs for errors console.log(error.message); } else { if (setupIntent.status === 'succeeded') { // SetupIntent confirmed, Payment Method attached to the Customer // Your logic to create a payout account could go here } else { // Unable to confirm the SetupIntent, re-fetch the SetupIntent for details } } }); } else { // Your connected account user didn't provide bank account details. You // can re-prompt them using `collectBankAccountForSetup` return null; } } }); }); ``` `collectBankAccountForSetup` renvoie une `Promise`. Lorsque votre compte connecté termine l’interaction avec la boîte de dialogue Stripe.js, la `Promise` est résolue avec un objet `result` contenant l’une des clés suivantes : - `setupIntent`, lorsque votre compte connecté quitte la boîte de dialogue - `error` en cas d’erreur irrécupérable lors de l’affichage de la boîte de dialogue Si la `Promise` est résolue avec une clé `setupIntent` et que `result.setupIntent.status` est défini sur `"requires_confirmation"`, confirmez le `SetupIntent` en appelant `confirmUsBankAccountSetup` avec le `client_secret` de `SetupIntent`. `confirmUsBankAccountSetup` renvoie également une `Promise`, qui est résolue avec le même type d’objet `result` que `collectBankAccountForSetup`. Après une confirmation réussie, `result.setupIntent.status` passe à l’état `"succeeded"`. Cela signifie que vous pouvez utiliser le `payment_method` de `SetupIntent` pour créer un token de compte bancaire sur votre serveur. Lorsque vous appelez `Stripe.collectBankAccountForSetup`, Stripe.js charge le [flux d’authentification](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), une boîte de dialogue sur la page qui fournit à vos comptes connectés des informations sur les données qu’ils partageront, leur permet de trouver et de sélectionner leur établissement financier et leur permet de se connecter en toute sécurité à leur compte pour vérifier l’accès. Par défaut, vos comptes connectés ne peuvent ajouter qu’un compte courant ou un compte d’épargne dans le flux d’authentification, car Stripe ne peut faciliter les paiements que vers un compte compatible avec les prélèvements automatiques ACH. La saisie manuelle du numéro de compte et du numéro de routage est également possible si votre compte connecté ne parvient pas à trouver son établissement financier ou à y authentifier son compte. Le flux de saisie manuelle peut ressembler à ceci : ![Flux d'authentification avec saisie manuelle de secours](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Si vous souhaitez empêcher les utilisateurs de votre compte connecté de saisir manuellement leurs informations du compte, transmettez `payment_method_options[us_bank_account][verification_method]=instant` lors de la création de `SetupIntent`. ### Créer un compte externe pour les virements (Server-side) Après avoir confirmé le SetupIntent, utilisez le moyen de paiement associé pour créer un token de compte bancaire, puis utilisez le token pour créer un compte de virement externe. Tout d’abord, créez un token de compte bancaire. ```curl curl https://api.stripe.com/v1/tokens \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \ -d "customer={{CUSTOMER_ID}}" ``` Utilisez ensuite l’ID du token pour créer un compte de virement externe. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Par défaut, la fourniture d’un compte externe fait de ce dernier le nouveau compte externe par défaut pour sa devise, et supprime l’ancien compte par défaut, le cas échéant. Vous êtes désormais prêt à effectuer des virements vers votre compte connecté. Pour en savoir plus sur la création et la gestion d’un compte externe pour les virements, consultez la page relative à la [création d’un compte bancaire externe](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Récupérer les données d’un compte Financial Connections (Server-side) Pour savoir si votre utilisateur a associé un compte Financial Connections, récupérez le SetupIntent avec la propriété `payment_method` développée. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` La réponse de l’API ressemble à l’exemple suivant : ```javascript { "id": "{{SETUP_INTENT_ID}}", "object": "setup_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", "object": "payment_method", // ... "type": "us_bank_account", "us_bank_account": { // ... // the value of "financial_connections_account" may be null "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", // ... } }, // ... } ``` Si l’objet `us_bank_account` de l’objet `payment_method` du SetupIntent inclut la propriété `financial_connections_account`, cela signifie que votre utilisateur a associé un compte Financial Connections. Vous pouvez utiliser la valeur `financial_connections_account` pour accéder aux données spécifiées dans le paramètre `payment_method_options[us_bank_account][financial_connections][permissions]` du SetupIntent, ou pour les rafraîchir. Afin de garantir la confidentialité des données de vos utilisateurs, les données du compte qui vous sont accessibles sont limitées aux données que vous avez spécifiées dans ce paramètre. Suivez les guides sur les données de [soldes](https://docs.stripe.com/financial-connections/balances.md), de [propriété](https://docs.stripe.com/financial-connections/ownership.md) et de [transactions](https://docs.stripe.com/financial-connections/transactions.md) pour commencer à récupérer les données d’un compte. ### (Facultatif) Utiliser le moyen de paiement pour traiter les paiements Vous ne pourrez pas utiliser un PaymentMethod collecté à l’aide de l’intégration ci-dessus pour traiter des paiements à l’aide de PaymentIntents, car le SetupIntent ne demande que l’autorisation `"outbound"` et vous n’avez pas obtenu l’autorisation de votre utilisateur en affichant un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Si vous souhaitez permettre à votre utilisateur d’utiliser le même compte pour effectuer des paiements et recevoir des virements, 1. Supprimez le paramètre `flow_directions` de l’appel à l’API Create Setup Intent. 1. Collectez un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) auprès de votre utilisateur. Pour en savoir plus, consultez le [guide ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md). Ce modèle d’intégration déclenche la vérification par microversement si l’utilisateur fournit ses coordonnées bancaires à l’aide du formulaire de saisie manuelle. #### iOS ## Inclure une dépendance supplémentaire pour Financial Connections(Client-side) Le [SDK iOS de Stripe](https://github.com/stripe/stripe-ios) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-ios/index.html). Il est également compatible avec les applications prenant en charge iOS 13 et les versions ultérieures. #### Swift Package Manager Pour installer le SDK, veuillez suivre les étapes ci-dessous : 1. Dans Xcode, sélectionnez **File** > **Add Package Dependencies…** puis saisissez `https://github.com/stripe/stripe-ios-spm` en tant qu’URL du référentiel. 1. Sélectionnez le dernier numéro de version, visible sur notre [page des versions](https://github.com/stripe/stripe-ios/releases). 1. Ajoutez le produit **StripeFinancialConnections** à la [cible de votre application](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Si vous n’avez pas de fichier [Podfile](https://guides.cocoapods.org/syntax/podfile.html), exécutez la commande suivante pour en créer un : ```bash pod init ``` 1. Ajoutez cette ligne à votre `Podfile` : ```podfile pod 'StripeFinancialConnections' ``` 1. Exécutez la commande suivante : ```bash pod install ``` 1. À partir de maintenant, n’oubliez pas d’utiliser le fichier .xcworkspace au lieu du fichier .xcodeproj pour ouvrir votre projet dans Xcode. 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, il vous suffit d’exécuter : ```bash pod update StripeFinancialConnections ``` #### Carthage 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Ajoutez cette ligne à votre `Cartfile` : ```cartfile github "stripe/stripe-ios" ``` 1. Suivez les [instructions d’installation de Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Veillez à intégrer tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking). 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, exécutez la commande suivante : ```bash carthage update stripe-ios --platform ios ``` #### Cadre manuel 1. Accédez à notre [page des versions GitHub](https://github.com/stripe/stripe-ios/releases/latest), puis téléchargez et décompressez **Stripe.xcframework.zip**. 1. Faites glisser **StripeFinancialConnections.xcframework** vers la section **Embedded Binaries (Fichiers binaires incorporés)** des paramètres **General (Général)** de votre projet Xcode. Veillez à sélectionner **Copy items if needed (Copier les éléments si nécessaire)**. 1. Répétez l’étape 2 pour tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking). 1. À l’avenir, pour mettre à jour vers la version la plus récente de notre SDK, répétez les étapes 1 à 3. > Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-ios/releases) sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, [surveillez les versions](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) à partir du référentiel. ## Configurer une URL de redirection (Client-side) Le client peut quitter votre application pour s’authentifier (par exemple, dans Safari ou dans son application bancaire). Pour lui permettre de revenir automatiquement sur votre application après s’être authentifié, [configurez un schéma d’URL personnalisé](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) et configurez votre délégué d’application pour qu’il transmette l’URL au SDK. Stripe ne prend pas en charge les [liens universels](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content). #### SceneDelegate #### Swift ```swift // This method handles opening custom URL schemes (for example, "your-app://stripe-redirect") func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } let stripeHandled = StripeAPI.handleURLCallback(with: url) if (!stripeHandled) { // This was not a Stripe url – handle the URL normally as you would } } ``` #### AppDelegate #### Swift ```swift // This method handles opening custom URL schemes (for example, "your-app://stripe-redirect") func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { let stripeHandled = StripeAPI.handleURLCallback(with: url) if (stripeHandled) { return true } else { // This was not a Stripe url – handle the URL normally as you would } return false } ``` #### SwiftUI #### Swift ```swift @main struct MyApp: App { var body: some Scene { WindowGroup { Text("Hello, world!").onOpenURL { incomingURL in let stripeHandled = StripeAPI.handleURLCallback(with: incomingURL) if (!stripeHandled) { // This was not a Stripe url – handle the URL normally as you would } } } } } ``` ## Collecter les informations du moyen de paiement (Client-side) Utilisez la fonction de classe `collectUSBankAccountParams` dans `STPCollectBankAccountParams` pour créer les paramètres nécessaires à l’appel `collectBankAccountForSetup`. Vous devez fournir le nom complet de l’utilisateur de votre compte connecté pour pouvoir collecte un `PaymentMethod` par prélèvement automatique ACH. Créez une instance de `BankAccountCollector` pour appeler `collectBankAccountForSetup` afin de collecter les informations du compte et de créer un `PaymentMethod`. Ensuite, associez `PaymentMethod` au `SetupIntent`. Transmettez le `client_secret` du `SetupIntent`, votre URL de redirection et les paramètres `STPCollectBankAccountParams` à `collectBankAccountForSetup`. #### Swift ```swift // Build params let collectParams = STPCollectBankAccountParams.collectUSBankAccountParams(with: name, email: email) // Calling this method displays a dialog for collecting bank account information let bankAccountCollector = STPBankAccountCollector() bankAccountCollector.collectBankAccountForSetup(clientSecret: clientSecret, returnURL: "your-app://stripe-redirect", params: collectParams, from: self) { intent, error in guard let intent = intent else { // handle error return } if case .requiresPaymentMethod = intent.status { // Customer canceled the Financial Connections dialog. Present them with other // payment method type options. } else if case .requiresConfirmation = intent.status { // We collected an account - possibly instantly verified, but possibly // manually-entered. let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: clientSecret, paymentMethodType: .USBankAccount) // Confirm the SetupIntent STPPaymentHandler.shared().confirmSetupIntent( setupIntentParams, with: self ) { (status, intent, error) in switch status { case .failed: // Setup failed case .canceled: // Setup was canceled case .succeeded: // Setup succeeded, Payment Method attached to the Customer // Your logic to create a payout account could go here @unknown default: fatalError() } } } } ``` Ceci charge le [flux d’authentification](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), une boîte de dialogue qui fournit à vos comptes connectés des informations sur les données qu’ils partageront, leur permet de trouver et de sélectionner leur établissement financier et leur permet de se connecter en toute sécurité à leur compte pour vérifier l’accès. `collectBankAccountForSetupWithClientSecret` aboutit en renvoyant soit le `SetupIntent`, soit une erreur. S’il renvoie un `SetupIntent` dont l’état est `requires_confirmation`, confirmez le `SetupIntent` en appelant `confirmSetupIntent` sur l’instance `STPPaymentHandler` partagée. `confirmSetupIntent` aboutit en renvoyant les mêmes paramètres que `collectBankAccountForSetupWithClientSecret`. Après une confirmation réussie, le `SetupIntent` passe à l’état `succeeded`, ce qui signifie que vous pouvez utiliser le `payment_method` du `SetupIntent` pour créer un token de compte bancaire sur votre serveur. Par défaut, vos comptes connectés ne peuvent ajouter qu’un compte courant ou un compte d’épargne dans le flux d’authentification, car Stripe ne peut faciliter les paiements que vers un compte compatible avec les prélèvements automatiques ACH. La saisie manuelle du numéro de compte et du numéro de routage est également possible si votre compte connecté ne parvient pas à trouver son établissement financier ou à y authentifier son compte. Le flux de saisie manuelle peut ressembler à ceci : ![Flux d'authentification avec saisie manuelle de secours](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Si vous souhaitez empêcher les utilisateurs de votre compte connecté de saisir manuellement leurs informations du compte, transmettez `payment_method_options[us_bank_account][verification_method]=instant` lors de la création de `SetupIntent`. ### Créer un compte externe pour les virements (Server-side) Après avoir confirmé le SetupIntent, utilisez le moyen de paiement associé pour créer un token de compte bancaire, puis utilisez le token pour créer un compte de virement externe. Tout d’abord, créez un token de compte bancaire. ```curl curl https://api.stripe.com/v1/tokens \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \ -d "customer={{CUSTOMER_ID}}" ``` Utilisez ensuite l’ID du token pour créer un compte de virement externe. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Par défaut, la fourniture d’un compte externe fait de ce dernier le nouveau compte externe par défaut pour sa devise, et supprime l’ancien compte par défaut, le cas échéant. Vous êtes désormais prêt à effectuer des virements vers votre compte connecté. Pour en savoir plus sur la création et la gestion d’un compte externe pour les virements, consultez la page relative à la [création d’un compte bancaire externe](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Récupérer les données d’un compte Financial Connections (Server-side) Pour savoir si votre utilisateur a associé un compte Financial Connections, récupérez le SetupIntent avec la propriété `payment_method` développée. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` La réponse de l’API ressemble à l’exemple suivant : ```javascript { "id": "{{SETUP_INTENT_ID}}", "object": "setup_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", "object": "payment_method", // ... "type": "us_bank_account", "us_bank_account": { // ... // the value of "financial_connections_account" may be null "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", // ... } }, // ... } ``` Si l’objet `us_bank_account` de l’objet `payment_method` du SetupIntent inclut la propriété `financial_connections_account`, cela signifie que votre utilisateur a associé un compte Financial Connections. Vous pouvez utiliser la valeur `financial_connections_account` pour accéder aux données spécifiées dans le paramètre `payment_method_options[us_bank_account][financial_connections][permissions]` du SetupIntent, ou pour les rafraîchir. Afin de garantir la confidentialité des données de vos utilisateurs, les données du compte qui vous sont accessibles sont limitées aux données que vous avez spécifiées dans ce paramètre. Suivez les guides sur les données de [soldes](https://docs.stripe.com/financial-connections/balances.md), de [propriété](https://docs.stripe.com/financial-connections/ownership.md) et de [transactions](https://docs.stripe.com/financial-connections/transactions.md) pour commencer à récupérer les données d’un compte. ### (Facultatif) Utiliser le moyen de paiement pour traiter les paiements Vous ne pourrez pas utiliser un PaymentMethod collecté à l’aide de l’intégration ci-dessus pour traiter des paiements à l’aide de PaymentIntents, car le SetupIntent ne demande que l’autorisation `"outbound"` et vous n’avez pas obtenu l’autorisation de votre utilisateur en affichant un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Si vous souhaitez permettre à votre utilisateur d’utiliser le même compte pour effectuer des paiements et recevoir des virements, 1. Supprimez le paramètre `flow_directions` de l’appel à l’API Create Setup Intent. 1. Collectez un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) auprès de votre utilisateur. Pour en savoir plus, consultez le [guide ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md). Ce modèle d’intégration déclenche la vérification par microversement si l’utilisateur fournit ses coordonnées bancaires à l’aide du formulaire de saisie manuelle. #### Android ## Inclure une dépendance supplémentaire pour Financial Connections(Client-side) Le [SDK Stripe Android](https://github.com/stripe/stripe-android) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-android/). Pour installer le SDK, ajoutez `financial-connections` au bloc `dependencies` de votre fichier [app/build.gradle](https://developer.android.com/studio/build/dependencies) : #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Financial Connections Android SDK implementation("com.stripe:financial-connections:23.8.0") } ``` > Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-android/releases) sur GitHub. Pour savoir quand une nouvelle version est disponible, [surveillez les versions du référentiel](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). ## Collecter les informations du moyen de paiement (Client-side) Utilisez `CollectBankAccountConfiguration.USBankAccount` créer les paramètres nécessaires à l’appel `presentWithSetupIntent`. Vous devez fournir le nom complet de l’utilisateur de votre compte connecté pour collecter le `PaymentMethod` pour un ACH Direct Debit. Initialisez une instance CollectBankAccountLauncher dans la méthode `onCreate` de votre activité de virement, en transmettant une méthode pour gérer le résultat. Poursuivez alors avec un appel à `presentWithSetupIntent`afin de collecter les informations du compte, de créer un `PaymentMethod` et d’associer le `PaymentMethod` au `SetupIntent`. #### Kotlin ```kotlin import androidx.appcompat.app.AppCompatActivity class PayoutActivity : AppCompatActivity() { private lateinit var setupIntentClientSecret: String private lateinit var collectBankAccountLauncher: CollectBankAccountLauncher private val paymentLauncher: PaymentLauncher = PaymentLauncher.Companion.create( this, "YOUR_PUBLISHABLE_KEY", null, ::onPaymentResult ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Create collector collectBankAccountLauncher = CollectBankAccountLauncher.create( this ) { result: CollectBankAccountResult -> when (result) { is CollectBankAccountResult.Completed -> { val intent = result.response.intent if (intent.status == StripeIntent.Status.RequiresPaymentMethod) { // Customer canceled the Financial Connections dialog. Present them with other // payment method type options. } else if (intent.status == StripeIntent.Status.RequiresConfirmation) { // We collected an account - possibly instantly verified, but possibly // manually-entered. // Confirm the SetupIntent val confirmParams = ConfirmSetupIntentParams.create( clientSecret = setupIntentClientSecret, paymentMethodType = PaymentMethod.Type.USBankAccount ) paymentLauncher.confirm(confirmParams) } } is CollectBankAccountResult.Cancelled -> { // handle cancellation } is CollectBankAccountResult.Failed -> { // handle error print("Error: ${result.error}") } } } } fun collectPayoutAccount() { // ... // Build params val collectParams: CollectBankAccountConfiguration = CollectBankAccountConfiguration.USBankAccount( name, email ) // Calling this method triggers the Financial Connections dialog to be displayed collectBankAccountLauncher.presentWithSetupIntent( publishableKey, setupIntentClientSecret, collectParams ) } private fun onPaymentResult(paymentResult: PaymentResult) { when (paymentResult) { is PaymentResult.Completed -> { // Setup succeeded, Payment Method attached to the Customer // Your logic to create a payout account could go here } is PaymentResult.Canceled -> { // handle cancel flow } is PaymentResult.Failed -> { // handle failures } } } } ``` Ceci charge le [flux d’authentification](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), une boîte de dialogue qui fournit à vos comptes connectés des informations sur les données qu’ils partageront, leur permet de trouver et de sélectionner leur établissement financier et leur permet de se connecter en toute sécurité à leur compte pour vérifier l’accès. `CollectBankAccountLauncher` aboutit en renvoyant un objet Result qui contient soit le `SetupIntent`, soit une erreur. S’il renvoie un `SetupIntent` dont l’état est `"requires_confirmation"`, confirmez le `SetupIntent` en utilisant la méthode `confirm` sur une instance de `PaymentLauncher`. Une fois qu’il aboutit, `confirm` appelle une méthode configurable avec un objet [PaymentResult](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-result/index.html?query=sealed%20class%20PaymentResult%20:%20Parcelable). En cas de confirmation réussie, l’objet `PaymentResult` est un `PaymentResult.Completed`. Ceci signifie que vous pouvez utiliser le `payment_method` du `SetupIntent` pour créer un token de compte bancaire sur votre serveur. Par défaut, vos comptes connectés ne peuvent ajouter qu’un compte courant ou un compte d’épargne dans le flux d’authentification, car Stripe ne peut faciliter les paiements que vers un compte compatible avec les prélèvements automatiques ACH. La saisie manuelle du numéro de compte et du numéro de routage est également possible si votre compte connecté ne parvient pas à trouver son établissement financier ou à y authentifier son compte. Le flux de saisie manuelle peut ressembler à ceci : ![Flux d'authentification avec saisie manuelle de secours](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Si vous souhaitez empêcher les utilisateurs de votre compte connecté de saisir manuellement leurs informations du compte, transmettez `payment_method_options[us_bank_account][verification_method]=instant` lors de la création de `SetupIntent`. ### Créer un compte externe pour les virements (Server-side) Après avoir confirmé le SetupIntent, utilisez le moyen de paiement associé pour créer un token de compte bancaire, puis utilisez le token pour créer un compte de virement externe. Tout d’abord, créez un token de compte bancaire. ```curl curl https://api.stripe.com/v1/tokens \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \ -d "customer={{CUSTOMER_ID}}" ``` Utilisez ensuite l’ID du token pour créer un compte de virement externe. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Par défaut, la fourniture d’un compte externe fait de ce dernier le nouveau compte externe par défaut pour sa devise, et supprime l’ancien compte par défaut, le cas échéant. Vous êtes désormais prêt à effectuer des virements vers votre compte connecté. Pour en savoir plus sur la création et la gestion d’un compte externe pour les virements, consultez la page relative à la [création d’un compte bancaire externe](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Récupérer les données d’un compte Financial Connections (Server-side) Pour savoir si votre utilisateur a associé un compte Financial Connections, récupérez le SetupIntent avec la propriété `payment_method` développée. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` La réponse de l’API ressemble à l’exemple suivant : ```javascript { "id": "{{SETUP_INTENT_ID}}", "object": "setup_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", "object": "payment_method", // ... "type": "us_bank_account", "us_bank_account": { // ... // the value of "financial_connections_account" may be null "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", // ... } }, // ... } ``` Si l’objet `us_bank_account` de l’objet `payment_method` du SetupIntent inclut la propriété `financial_connections_account`, cela signifie que votre utilisateur a associé un compte Financial Connections. Vous pouvez utiliser la valeur `financial_connections_account` pour accéder aux données spécifiées dans le paramètre `payment_method_options[us_bank_account][financial_connections][permissions]` du SetupIntent, ou pour les rafraîchir. Afin de garantir la confidentialité des données de vos utilisateurs, les données du compte qui vous sont accessibles sont limitées aux données que vous avez spécifiées dans ce paramètre. Suivez les guides sur les données de [soldes](https://docs.stripe.com/financial-connections/balances.md), de [propriété](https://docs.stripe.com/financial-connections/ownership.md) et de [transactions](https://docs.stripe.com/financial-connections/transactions.md) pour commencer à récupérer les données d’un compte. ### (Facultatif) Utiliser le moyen de paiement pour traiter les paiements Vous ne pourrez pas utiliser un PaymentMethod collecté à l’aide de l’intégration ci-dessus pour traiter des paiements à l’aide de PaymentIntents, car le SetupIntent ne demande que l’autorisation `"outbound"` et vous n’avez pas obtenu l’autorisation de votre utilisateur en affichant un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Si vous souhaitez permettre à votre utilisateur d’utiliser le même compte pour effectuer des paiements et recevoir des virements, 1. Supprimez le paramètre `flow_directions` de l’appel à l’API Create Setup Intent. 1. Collectez un [mandat](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) auprès de votre utilisateur. Pour en savoir plus, consultez le [guide ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md). Ce modèle d’intégration déclenche la vérification par microversement si l’utilisateur fournit ses coordonnées bancaires à l’aide du formulaire de saisie manuelle. #### React Native ## Collecter les informations du moyen de paiement (Client-side) Transmettez le `client_secret` du `SetupIntent` et le nom complet de l’utilisateur de votre compte connecté à `collectBankAccountForSetup` pour collecter le moyen de paiement. ```javascript import {collectBankAccountForSetup, confirmSetup} from '@stripe/stripe-react-native'; export default function PayoutAccountCollectionButton() { // Get SetupIntent client secret, connected account user's full name, and email address. // in this example, from a custom hook. const {clientSecret, name, email} = useMyCustomState(); const handleCollectBankAccountPress = async (clientSecret) => { const {setupIntent, error} = await collectBankAccountForSetup( clientSecret, { paymentMethodType: 'USBankAccount', paymentMethodData: { billingDetails: { name, email } } }, ); if (error) { // Inform your connected account user that there was an error. } else if (setupIntent) { if (setupIntent.status === SetupIntents.Status.RequiresConfirmation) { // Your connected account user provided bank account details // Confirm the SetupIntent const {error: confirmError, setupIntent: confirmedSetupIntent} = await confirmSetup(clientSecret, { type: 'USBankAccount' }); if (confirmError) { // Unable to confirm the SetupIntent, inform your connected account user there was an error } else if (confirmedSetupIntent) { if (confirmedSetupIntent.status === SetupIntents.Status.Succeeded) { // Setup succeeded, Payment Method attached to the Customer // Your logic to create a payout account could go here } else { // Unable to confirm the SetupIntent, re-fetch the SetupIntent for details } } } else { // Connected account user didn't link an account or provide details manually } } }; return (