# Gerenciar contas de repasse para contas conectadas Saiba como gerenciar contas bancárias externas e cartões de débito para contas conectadas. As contas de *Repasse* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit) podem ser contas bancárias ou cartões de débito. A Stripe recomenda coletar dados de contas externas com o formulário da web do Connect Onboarding , que ajuda você a: - Economize tempo de design e desenvolvimento. - Elimine a necessidade de armazenar dados sigilosos, como números de conta e routing numbers, no seu servidor. - Elimine a necessidade de criar validações de formulário quando as contas conectadas inserirem os dados da conta. Nos EUA, também recomendamos usar o [Stripe Financial Connections](https://docs.stripe.com/financial-connections.md), que permite que suas contas conectadas vinculem com segurança suas contas financeiras ao seu negócio. Isso ajuda você a: - Aumente a conversão de onboarding, evitando que suas contas precisem interromper o processo para localizar números de conta e routing numbers. - Reduzir as taxas de falha no primeiro repasse, eliminando erros causados pela entrada manual de números de conta e routing numbers. - Elimine a necessidade de armazenar dados sigilosos, como números de conta e routing numbers, no seu servidor. - Elimine a necessidade de criar validações de formulário quando as contas inserem dados da conta em formulários de onboarding personalizados. - (Somente contas v1) Permita que suas contas se autentiquem em menos etapas, reutilizando os dados bancários salvos em [. Contas que salvam os dados bancários em qualquer uma das empresas da Stripe usando Link podem compartilhar os dados da conta com sua plataforma na próxima vez em que usarem o Financial Connections. - Acesse informações adicionais sobre a conta bancária externa de uma conta, como [saldos](https://docs.stripe.com/financial-connections/balances.md), [dados de propriedade](https://docs.stripe.com/financial-connections/ownership.md) e [transações](https://docs.stripe.com/financial-connections/transactions.md). Você pode mitigar fraudes durante o onboarding verificando esses dados, como o nome e o endereço do titular da conta bancária externa. Quando [Link estiver habilitado](https://dashboard.stripe.com/settings/connect/payouts/external_accounts), o onboarding hospedado pela Stripe e o onboarding incorporado não cobram pelas verificações do Financial Connections. Caso contrário, aplicam-se as tarifas [padrão de verificação do Financial Connections](https://stripe.com/financial-connections#pricing). Se você usar o onboarding por API para suas contas conectadas, poderá coletar os dados da conta de repasse com um formulário personalizado no fluxo de onboarding da conta. ### Cancelar a coleta de contas externas Para contas nas quais a plataforma é responsável por coletar requisitos, como contas Custom, você pode optar por não coletar dados de contas externas durante o onboarding. Isso pode ser feito se, por exemplo, você criar seu próprio fluxo de onboarding onde deseja coletar dados de contas externas. Na integração incorporada, você pode [desabilitar a coleta de informações de contas externas](https://docs.stripe.com/connect/supported-embedded-components/account-onboarding.md?#external-account-collection) definindo o recurso `external_account_collection` na Sessão da Conta como falso. Como alternativa, na integração hospedada, você pode acessar as [Configurações de contas externas do Connect](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) e, em **Contas em que a plataforma é responsável por recolher requisitos**, habilitar ou desabilitar a recolha de informações de contas externas. Observe que essa opção está desativada por padrão. ## Coletar contas externas #### Onboarding hospedado pela Stripe ou incorporado O [onboarding hospedado pela Stripe e o onboarding incorporado](https://docs.stripe.com/connect/onboarding.md) usam formulários web personalizáveis para coletar as informações necessárias para cadastrar contas conectadas. Eles podem coletar tanto contas bancárias quanto cartões de débito. Você pode usar o Financial Connections para coletar dados das contas bancárias, mas não para coletar dados dos cartões de débito. Para contas conectadas em que sua plataforma é responsável por saldos negativos, você pode personalizar o fluxo de coleta de contas externas nas configurações de [conta externa](https://dashboard.stripe.com/settings/connect/payouts/external_accounts). Nas configurações de **Conta externa**, você pode: - Ative ou desative a cobrança de cartões de débito fazendo uma seleção em **Permitir cartões de débito?**. - Exija que contas conectadas adicionem pelo menos uma conta bancária antes de poderem adicionar qualquer outro tipo de conta externa, como um cartão de débito. Você pode acessar essa configuração em **Exigir pelo menos uma conta bancária?**. Isso é útil para garantir o suporte ao [débito automático](https://docs.stripe.com/connect/account-balances.md#automatically-debit-connected-accounts). - Controle se as contas conectadas devem ou não adicionar mais de uma conta externa em uma determinada moeda. Há um limite de cinco contas externas por moeda. Acesse essa configuração em **Cobrar várias contas externas por moeda**. #### Use o Stripe Financial Connections ### Disponível em - US Plataformas da Stripe nos EUA podem ativar o [Stripe Financial Connections](https://docs.stripe.com/financial-connections.md) no formulário de onboarding hospedado pela Stripe ou incorporado seguindo estas etapas: 1. Acesse as [configurações de conta externa](https://dashboard.stripe.com/settings/connect/payouts/external_accounts), onde você gerencia recursos opcionais de onboarding do Connect. 1. Para contas conectadas em que sua plataforma coleta informações da conta quando os requisitos mudam, você deve permitir que o onboarding hospedado pela Stripe e o onboarding incorporado coletem os dados da conta externa. Em **Onboarding hospedado pela Stripe para contas Custom**, permita que a Stripe colete as informações da conta externa ativando o botão de alternância. 1. Em **Como os dados da conta bancária serão coletados?**, selecione **Financial Connections**. 1. (Opcional) Solicite permissão para acessar dados adicionais nas contas verificadas instantaneamente com o Stripe Financial Connections, como saldos, dados de titularidade e transações. Se você solicitar esse acesso adicional, será solicitado que se inscreva no Stripe Financial Connections. Quando a coleta de dados da conta externa está ativada, o fluxo de onboarding solicita que todas as contas conectadas autentiquem sua conta bancária. ![Imagem que mostra um fluxo do Connect Onboarding usando o Stripe Financial Connections para coletar uma conta de repasses.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-onboarding.8937a023f6682c90bab8c0b39873909a.png) Um fluxo de onboarding do Connect usando o Stripe Financial Connections para coletar uma conta de repasses. Se uma conta conectada não puder verificar instantaneamente sua conta bancária usando o Financial Connections, o processo de verificação voltará automaticamente para a inserção manual: ![Imagem mostrando um fluxo Connect Onboarding usando a janela do Stripe Financial Connections para coletar uma conta de repasse por meio de entrada manual.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-manual-entry.930da1e01c9026b9014008d75958bc8c.png) Um fluxo de Connect Onboarding usando a janela do Stripe Financial Connections para coletar uma conta de repasse por meio de entrada manual. Após o onboarding, a conta bancária especificada é vinculada automaticamente à conta conectada. ## Recuperar dados em uma conta do Financial Connections (Server-side) Você pode determinar se uma conta conectada vinculou uma conta do Stripe Financial Connections usando o ID da `Conta` para recuperar quaisquer contas do Financial Connections vinculadas. Especifique o ID da `Conta` como `account_holder.account` e no cabeçalho `a conta Stripe`. ```curl curl -G https://api.stripe.com/v1/financial_connections/accounts \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "account_holder[account]={{CONNECTEDACCOUNT_ID}}" ``` Isso retorna uma resposta de API semelhante a esta: ```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" ] } ... ] } ``` Se alguma conta do Financial Connections estiver listada, isso indica que a conta conectada a vinculou durante o processo de onboarding. Você pode usar o valor `id` para acessar ou atualizar os dados que especificou nas [configurações da conta externa](https://dashboard.stripe.com/settings/connect/payouts/external_accounts). Para proteger a privacidade dos dados da sua conta conectada, você poderá acessar apenas os dados que especificou. Para começar a recuperar dados de contas, siga os guias de [saldos](https://docs.stripe.com/financial-connections/balances.md), [propriedade](https://docs.stripe.com/financial-connections/ownership.md) e [transações](https://docs.stripe.com/financial-connections/transactions.md). Em todas as solicitações subsequentes de recuperação e atualização de conta, não se esqueça de incluir o cabeçalho `Stripe-Account` com o ID da conta conectada: ```curl curl https://api.stripe.com/v1/financial_connections/accounts/fca_zbyrdjTrwcYZJZc6WBs6GPid/refresh \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "features[]=balance" ``` #### Habilite a inserção manual de dados da conta bancária Para permitir que a Stripe colete manualmente dados bancários de contas conectadas dentro do formulário de onboarding, siga estas instruções: 1. Abra as configurações do Connect e vá para Repasses > Contas externas, onde você pode gerenciar as opções de onboarding do Connect. 1. Em **Como os dados da conta bancária serão coletados?**, selecione a opção para coletar manualmente dados bancários. 1. Para contas conectadas em que sua plataforma coleta informações da conta quando os requisitos mudam, você deve permitir que o onboarding hospedado pela Stripe e o onboarding incorporado coletem os dados da conta externa. Em **Accounts where the platform is responsible for collecting requirements** (Contas em que a plataforma é responsável por coletar requisitos), permita que a Stripe colete as informações da conta externa ativando o botão de alternância. ![Imagem que mostra um fluxo do Connect Onboarding usando um formulário para coletar uma conta de repasse usando inserção manual.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-payout-manual-entry-form.6764993258659b2ad6517e0825181e49.png) Conecte o fluxo de onboarding usando um formulário para coletar uma conta de repasse usando inserção manual. Cada país tem um formato ligeiramente diferente para os dados de conta bancária e o formulário exibe automaticamente os campos apropriados para o seu país de operação. #### Chamadas de API diretas a partir de um formulário personalizado Para contas conectadas nas quais sua plataforma coleta dados da conta quando os requisitos mudam, você pode coletar dados da conta externa fazendo chamadas de API diretas em um formulário personalizado. #### Habilite o Stripe Financial Connections ### Disponível em - US As plataformas da Stripe nos EUA podem habilitar o [Stripe Financial Connections](https://stripe.com/financial-connections) no próprio formulário de onboarding personalizado. Depois de você habilitar o Stripe Financial Connections no seu formulário, as contas conectadas autenticarão instantaneamente as próprias contas bancárias dentro do [fluxo de autenticação](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow). [Inscreva-se no Financial Connections](https://dashboard.stripe.com/financial-connections/application) para receber acesso ao modo de produção. ### Crie um SetupIntent (Lado do servidor) Insira um botão ou link no seu formulário de onboarding que chame um endpoint do lado servidor para criar um[SetupIntent](https://docs.stripe.com/api/setup_intents.md). O SetupIntent representa sua intenção de recolher as informações da conta bancária de uma conta conectada. Por exemplo, seu botão pode dizer **Link sua conta bancária**.{ % /ignore-validation %} Recomendamos que você crie um *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) com um endereço de e-mail correspondente a cada conta conectada. Associar um objeto Customer permite que você [liste contas externas vinculadas anteriormente](https://docs.stripe.com/api/financial_connections/accounts/list.md) posteriormente. Forneça um endereço de e-mail ao criar seu customer para permitir que ele se autentique em suas contas com menos etapas, salvando e reutilizando seus dados bancários com [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses) em empresas que utilizam a Stripe por meio do [fluxo de autenticação do Financial Connections](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow). Ao criar um SetupIntent para coletar os dados da conta bancária de uma conta conectada, defina os seguintes parâmetros: 1. Defina o tipo `customer` como o [ID do cliente](https://docs.stripe.com/api/customers/object.md#customer_object-id) 1. Defina `payment_method_types` como `["us_bank_account"]` 1. Defina `flow_directions` como `["outbound"]` 1. (Opcional) Considere os dados adicionais necessários para processar seu caso de uso e solicite permissão para acessá-los. Por exemplo, defina `payment_method_options[us_bank_account][financial_connections][permissions]` como `["payment_method", "ownership"]` para solicitar acesso aos dados de propriedade referentes à conta do Financial Connections após seu usuário vincular a própria conta bancária usando o Financial Connections. Veja um exemplo dos requisitos mínimos para criar um SetupIntent para recolher dados de contas bancárias: ```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" ``` O SetupIntent na resposta inclui um `client_secret`, que permite iniciar a IU do modal na página de Stripe.js que gerencia o recolhimento e a verificação dos dados das contas bancárias. Gerencie o `client_secret` com cuidado, pois ele fornece acesso ao SetupIntent com apenas uma chave publicável. Não registre, incorpore em URLs nem exponha esse segredo a ninguém, exceto às suas contas conectadas. #### Teia ## Recolher dados da forma de pagamento (Client-side) Inclua o script do Stripe.js na página de cobrança da conta bancária, adicionando-o ao cabeçalho do seu arquivo HTML. ```html Payout ``` Crie uma instância de Stripe.js com o seguinte JavaScript na página de cobrança da sua conta bancária. ```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}}" }); ``` Passe o `client_secret` do `SetupIntent` e o nome completo do usuário da sua conta conectada para `stripe.collectBankAccountForSetup` para coletar a forma de pagamento. ```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`retorna uma`Promise`(Promessa). Quando a conta conectada preenche o diálogo do Stripe.js, a`Promise`(Promessa) é resolvida com um objeto`result` (resultado) que tem uma das seguintes chaves: - `setupIntent`, quando sua conta conectada sai da caixa de diálogo - `error`, se ocorrer um erro irrecuperável ao exibir o diálogo Se a `Promise` (Promessa) for resolvida com uma chave `setupIntent` e `result.setupIntent.status` for `"requires_confirmation"`, confirme o `SetupIntent` chamando `confirmUsBankAccountSetup` com o `client_secret` do `SetupIntent`. `confirmUsBankAccountSetup` também retorna uma `Promise` (Promessa) que é resolvida com o mesmo tipo de objeto `result` (resultado) como `collectBankAccountForSetup`. Após a confirmação bem-sucedida, `result.setupIntent.status` é `"succeeded"` (bem-sucedido). Isso significa que você pode usar o `payment_method` do `SetupIntent` para criar um token de conta bancária no seu servidor. Quando você chama `stripe.collectBankAccountForSetup`, o Stripe.js carrega o [fluxo de autenticação](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), um diálogo na página que fornece às suas contas conectadas informações sobre quais dados elas compartilharão, permite que encontrem e selecionem sua instituição financeira e façam login com segurança em sua conta para verificar o acesso. Por padrão, suas contas conectadas só podem adicionar uma conta corrente ou de poupança no fluxo de autenticação, porque a Stripe só pode facilitar repasses para uma conta habilitada para ACH. A inserção manual do número da conta e do routing number também está disponível se sua conta conectada não conseguir encontrar sua instituição ou autenticar sua conta. O fluxo de entrada manual pode ser assim: ![Fluxo de autenticação com fallback de entrada manual](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Se você quiser impedir que os usuários da sua conta conectada insiram manualmente os dados da conta bancária, passe `payment_method_options[us_bank_account][verification_method]=instant` ao criar o `SetupIntent`. ### Crie uma conta externa que possa ser usada para repasses (Server-side) Após confirmar o SetupIntent, use a forma de pagamento anexada para criar um token de conta bancária e depois use o token para criar uma conta de repasse externa. Primeiro, crie um token de conta bancária. ```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}}" ``` Em seguida, use o ID do token para criar uma conta de repasse externa. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Por padrão, o fornecimento de uma conta externa a define como a nova conta externa padrão para a moeda associada, excluindo a conta padrão antiga, se houver. Tudo pronto para enviar repasses à sua conta conectada. Para obter mais detalhes sobre como criar e gerenciar uma conta externa para repasses, consulte [criar conta bancária externa](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Recuperar dados em uma conta do Financial Connections (Server-side) Você pode determinar se o seu usuário vinculou uma conta do Financial Connections recuperando o SetupIntent com a propriedade `payment_method` expandida. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` Que retornará uma resposta de API similar a esta: ```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}}", // ... } }, // ... } ``` Se o objeto `us_bank_account` do objeto `payment_method` do SetupIntent incluir uma propriedade `financial_connections_account`, seu usuário vinculou uma conta do Financial Connections. Você pode usar o valor `financial_connections_account` para acessar ou recarregar os dados especificados no parâmetro `payment_method_options[us_bank_account][financial_connections][permissions]` do SetupIntent. Para proteger a privacidade dos dados de seu usuário, os dados da conta acessíveis a você são limitados aos dados especificados nesse parâmetro. Siga os guias de dados de [saldos](https://docs.stripe.com/financial-connections/balances.md), [propriedade](https://docs.stripe.com/financial-connections/ownership.md) e [transações](https://docs.stripe.com/financial-connections/transactions.md) para começar a recuperar dados de contas. ### (Optional) Use a forma de pagamento para processar pagamentos Você não poderá usar um PaymentMethod coletado usando a integração acima para processar pagamentos usando PaymentIntents, já que o SetupIntent só está solicitando permissão `"outbound"` e você não obteve autorização do seu usuário exibindo uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Se quiser permitir que seu usuário use a mesma conta para fazer pagamentos e receber repasses, 1. Remova o parâmetro `flow_directions` da chamada da API Create Setup Intent. 1. Colete uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) do usuário. Consulte o [guia de ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) para obter mais detalhes. Esse padrão de integração aciona a verificação por microdepósito se o usuário fornecer os dados da conta bancária usando o formulário de entrada manual. #### iOS ## Incluir dependência adicional para o Financial Connections(Lado do cliente) O [SDK da Stripe para iOS](https://github.com/stripe/stripe-ios) é de código aberto, [totalmente documentado](https://stripe.dev/stripe-ios/index.html) e compatível com aplicativos que aceitam iOS 13 ou versões mais recentes. #### Gerenciador de pacotes Swift Para instalar o SDK, siga estas etapas: 1. No Xcode, selecione **Arquivo** > **Adicionar dependências de pacote…** e insira `https://github.com/stripe/stripe-ios-spm` como URL do repositório. 1. Selecione o número da última versão da nossa [página de lançamentos](https://github.com/stripe/stripe-ios/releases). 1. Adicione o produto **StripeFinancialConnections** ao [alvo do seu aplicativo](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Se ainda não o fez, instale a versão mais recente do [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Se não tiver um [Podfile](https://guides.cocoapods.org/syntax/podfile.html), execute o seguinte comando para criar um: ```bash pod init ``` 1. Adicione esta linha ao seu `Podfile`: ```podfile pod 'StripeFinancialConnections' ``` 1. Execute o seguinte comando: ```bash pod install ``` 1. Não se esqueça de usar o arquivo `.xcworkspace` para abrir seu projeto em Xcode, em vez do arquivo `.xcodeproj`, daqui em diante. 1. No futuro, para atualizar para a versão mais recente do SDK, execute: ```bash pod update StripeFinancialConnections ``` #### Carthage 1. Se ainda não o fez, instale a versão mais recente do [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Adicione esta linha ao seu `Cartfile`: ```cartfile github "stripe/stripe-ios" ``` 1. Siga as [instruções de instalação do Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Certifique-se de integrar todas as estruturas necessárias listadas [here](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking). 1. No futuro, para atualizar para a versão mais recente do SDK, execute o seguinte comando: ```bash carthage update stripe-ios --platform ios ``` #### Estrutura manual 1. Vá até a nossa [página de lançamentos do GitHub](https://github.com/stripe/stripe-ios/releases/latest) e baixe e descompacte o **Stripe.xcframework.zip**. 1. Arraste **StripeFinancialConnections.xcframework** até a seção **Embedded Binaries** das configurações **General** no seu projeto Xcode. Certifique-se de selecionar **Copy items if needed**. 1. Repita a etapa 2 para todas as estruturas necessárias listadas [here](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking). 1. No futuro, para atualizar para a versão mais recente do nosso SDK, repita as etapas 1 a 3. > Para obter mais informações sobre a versão mais recente e as versões anteriores do SDK, consulte a página [Lançamentos](https://github.com/stripe/stripe-ios/releases) no GitHub. Para receber notificações quando um novo lançamento for publicado, [assista aos lançamentos](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) do repositório. ## Configure um URL de retorno (Lado do cliente) O cliente pode sair do seu aplicativo para autenticar (por exemplo, no Safari ou no aplicativo bancário). Para permitir que eles voltem ao seu aplicativo após a autenticação, [configure um esquema de URL personalizado](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) e configure seu aplicativo delegado para encaminhar o URL ao SDK. A Stripe não aceita [links universais](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 } } } } } ``` ## Recolher dados da forma de pagamento (Client-side) Use a função de classe `collectUSBankAccountParams` em `STPCollectBankAccountParams` para criar os parâmetros necessários para chamar `collectBankAccountForSetup`. Você deve fornecer o nome completo do usuário da sua conta conectada para coletar um `PaymentMethod` de ACH Direct Debit. Crie uma instância de `BankAccountCollector` para chamar `collectBankAccountForSetup` e coletar os dados da conta bancária, criar um `PaymentMethod` e anexar esse `PaymentMethod` ao `SetupIntent`. Passe o `client_secret` do `SetupIntent`, sua URL de retorno e os parâmetros `STPCollectBankAccountParams` para `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() } } } } ``` Isso carrega o [fluxo de autenticação](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), um diálogo que fornece às suas contas conectadas informações sobre quais dados elas compartilharão, permite que encontrem e selecionem sua instituição financeira e façam login com segurança em sua conta para verificar o acesso. `collectBankAccountForSetupWithClientSecret` é concluído com um `SetupIntent` ou com um erro. Quando é concluído com um `SetupIntent` e seu status é `requires_confirmation`, confirme o `SetupIntent` chamando `confirmSetupIntent` na instância compartilhada de `STPPaymentHandler`. `confirmSetupIntent` é concluído com os mesmos parâmetros que `collectBankAccountForSetupWithClientSecret`. Após a confirmação bem-sucedida, o `SetupIntent` terá o status `bem-sucedido`. Isso significa que você pode usar o `payment_method` do `SetupIntent` para criar um token de conta bancária no seu servidor. Por padrão, suas contas conectadas só podem adicionar uma conta corrente ou de poupança no fluxo de autenticação, porque a Stripe só pode facilitar repasses para uma conta habilitada para ACH. A inserção manual do número da conta e do routing number também está disponível se sua conta conectada não conseguir encontrar sua instituição ou autenticar sua conta. O fluxo de entrada manual pode ser assim: ![Fluxo de autenticação com fallback de entrada manual](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Se você quiser impedir que os usuários da sua conta conectada insiram manualmente os dados da conta bancária, passe `payment_method_options[us_bank_account][verification_method]=instant` ao criar o `SetupIntent`. ### Crie uma conta externa que possa ser usada para repasses (Server-side) Após confirmar o SetupIntent, use a forma de pagamento anexada para criar um token de conta bancária e depois use o token para criar uma conta de repasse externa. Primeiro, crie um token de conta bancária. ```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}}" ``` Em seguida, use o ID do token para criar uma conta de repasse externa. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Por padrão, o fornecimento de uma conta externa a define como a nova conta externa padrão para a moeda associada, excluindo a conta padrão antiga, se houver. Tudo pronto para enviar repasses à sua conta conectada. Para obter mais detalhes sobre como criar e gerenciar uma conta externa para repasses, consulte [criar conta bancária externa](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Recuperar dados em uma conta do Financial Connections (Server-side) Você pode determinar se o seu usuário vinculou uma conta do Financial Connections recuperando o SetupIntent com a propriedade `payment_method` expandida. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` Que retornará uma resposta de API similar a esta: ```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}}", // ... } }, // ... } ``` Se o objeto `us_bank_account` do objeto `payment_method` do SetupIntent incluir uma propriedade `financial_connections_account`, seu usuário vinculou uma conta do Financial Connections. Você pode usar o valor `financial_connections_account` para acessar ou recarregar os dados especificados no parâmetro `payment_method_options[us_bank_account][financial_connections][permissions]` do SetupIntent. Para proteger a privacidade dos dados de seu usuário, os dados da conta acessíveis a você são limitados aos dados especificados nesse parâmetro. Siga os guias de dados de [saldos](https://docs.stripe.com/financial-connections/balances.md), [propriedade](https://docs.stripe.com/financial-connections/ownership.md) e [transações](https://docs.stripe.com/financial-connections/transactions.md) para começar a recuperar dados de contas. ### (Optional) Use a forma de pagamento para processar pagamentos Você não poderá usar um PaymentMethod coletado usando a integração acima para processar pagamentos usando PaymentIntents, já que o SetupIntent só está solicitando permissão `"outbound"` e você não obteve autorização do seu usuário exibindo uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Se quiser permitir que seu usuário use a mesma conta para fazer pagamentos e receber repasses, 1. Remova o parâmetro `flow_directions` da chamada da API Create Setup Intent. 1. Colete uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) do usuário. Consulte o [guia de ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) para obter mais detalhes. Esse padrão de integração aciona a verificação por microdepósito se o usuário fornecer os dados da conta bancária usando o formulário de entrada manual. #### Android ## Incluir dependência adicional para o Financial Connections(Lado do cliente) O [SDK da Stripe para Android](https://github.com/stripe/stripe-android) é de código aberto e [totalmente documentado](https://stripe.dev/stripe-android/). Para instalar o SDK, adicione `financial-connections` ao bloco `dependencies` do arquivo [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") } ``` > Veja mais informações sobre o último lançamento de SDK e as versões anteriores na página [Lançamentos](https://github.com/stripe/stripe-android/releases) no GitHub. Para receber notificações quando um novo lançamento for publicado, [assista aos lançamentos do repositório](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). ## Recolher dados da forma de pagamento (Client-side) Use `CollectBankAccountConfiguration.USBankAccount` para criar os parâmetros necessários para chamar `presentWithSetupIntent`. Você deve fornecer o nome completo do usuário da sua conta conectada para coletar um `PaymentMethod` de ACH Direct Debit. Inicialize uma instância de CollectBankAccountLauncher dentro de `onCreate` da sua Activity de repasse, passando um método para lidar com o resultado. Em seguida, chame `presentWithSetupIntent` para coletar os dados da conta bancária, criar um `PaymentMethod` e anexar esse `PaymentMethod` ao `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 } } } } ``` Isso carrega o [fluxo de autenticação](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), um diálogo que fornece às suas contas conectadas informações sobre quais dados elas compartilharão, permite que encontrem e selecionem sua instituição financeira e façam login com segurança em sua conta para verificar o acesso. `CollectBankAccountLauncher` é concluído com um objeto result que contém um `SetupIntent` ou um erro. Quando é concluído com um `SetupIntent` e seu status é `"requires_confirmation"` (requer confirmação), confirme o `SetupIntent` usando o método `confirm` (confirmar) em uma instância de `PaymentLauncher`. Quando for concluído, `confirmar` chama um método configurável com um objeto [PaymentResult](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-result/index.html?query=sealed%20class%20PaymentResult%20:%20Parcelable). Após a confirmação bem-sucedida, o objeto `PaymentResult` será `PaymentResult.Completed`. Isso significa que você pode usar o `payment_method` do `SetupIntent` para criar um token de conta bancária no seu servidor. Por padrão, suas contas conectadas só podem adicionar uma conta corrente ou de poupança no fluxo de autenticação, porque a Stripe só pode facilitar repasses para uma conta habilitada para ACH. A inserção manual do número da conta e do routing number também está disponível se sua conta conectada não conseguir encontrar sua instituição ou autenticar sua conta. O fluxo de entrada manual pode ser assim: ![Fluxo de autenticação com fallback de entrada manual](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png) Se você quiser impedir que os usuários da sua conta conectada insiram manualmente os dados da conta bancária, passe `payment_method_options[us_bank_account][verification_method]=instant` ao criar o `SetupIntent`. ### Crie uma conta externa que possa ser usada para repasses (Server-side) Após confirmar o SetupIntent, use a forma de pagamento anexada para criar um token de conta bancária e depois use o token para criar uma conta de repasse externa. Primeiro, crie um token de conta bancária. ```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}}" ``` Em seguida, use o ID do token para criar uma conta de repasse externa. ```curl curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "external_account={{TOKEN_ID}}" ``` Por padrão, o fornecimento de uma conta externa a define como a nova conta externa padrão para a moeda associada, excluindo a conta padrão antiga, se houver. Tudo pronto para enviar repasses à sua conta conectada. Para obter mais detalhes sobre como criar e gerenciar uma conta externa para repasses, consulte [criar conta bancária externa](https://docs.stripe.com/api/external_account_bank_accounts/create.md). ### Recuperar dados em uma conta do Financial Connections (Server-side) Você pode determinar se o seu usuário vinculou uma conta do Financial Connections recuperando o SetupIntent com a propriedade `payment_method` expandida. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=payment_method" ``` Que retornará uma resposta de API similar a esta: ```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}}", // ... } }, // ... } ``` Se o objeto `us_bank_account` do objeto `payment_method` do SetupIntent incluir uma propriedade `financial_connections_account`, seu usuário vinculou uma conta do Financial Connections. Você pode usar o valor `financial_connections_account` para acessar ou recarregar os dados especificados no parâmetro `payment_method_options[us_bank_account][financial_connections][permissions]` do SetupIntent. Para proteger a privacidade dos dados de seu usuário, os dados da conta acessíveis a você são limitados aos dados especificados nesse parâmetro. Siga os guias de dados de [saldos](https://docs.stripe.com/financial-connections/balances.md), [propriedade](https://docs.stripe.com/financial-connections/ownership.md) e [transações](https://docs.stripe.com/financial-connections/transactions.md) para começar a recuperar dados de contas. ### (Optional) Use a forma de pagamento para processar pagamentos Você não poderá usar um PaymentMethod coletado usando a integração acima para processar pagamentos usando PaymentIntents, já que o SetupIntent só está solicitando permissão `"outbound"` e você não obteve autorização do seu usuário exibindo uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). Se quiser permitir que seu usuário use a mesma conta para fazer pagamentos e receber repasses, 1. Remova o parâmetro `flow_directions` da chamada da API Create Setup Intent. 1. Colete uma [instrução](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) do usuário. Consulte o [guia de ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) para obter mais detalhes. Esse padrão de integração aciona a verificação por microdepósito se o usuário fornecer os dados da conta bancária usando o formulário de entrada manual. #### React Native ## Recolher dados da forma de pagamento (Client-side) Passe o `client_secret` do `SetupIntent` e o nome completo do usuário da sua conta conectada para `collectBankAccountForSetup` para coletar a forma de pagamento. ```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 (