# Erfassen Sie ein Konto, um datengestützte Produkte zu entwickeln Erfassen Sie die Konten Ihrer Nutzer/innen und nutzen Sie Daten wie Salden, Eigentumsrechte und Transaktionen zum Erstellen von Produkten. > #### Verwenden Sie die Accounts v2 API zum Darstellen von Kundinnen und Kunden > > Die Accounts v2 API ist allgemein für Connect-Nutzer/innen verfügbar und für andere Stripe-Nutzer/innen in der öffentlichen Vorschau. Wenn an der Accounts v2 Vorschau teilnehmen, müssen Sie eine [Vorschauversion](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) in Ihrem Code angeben. > > Um Zugriff auf die Accounts v2 Vorschau anzufordern, {% collect-email modal=true modal_link_text=“sign up.” list=“payin-payout-reuse-waitlist@stripe.com” send_direct_email=true intro_text=“Sind Sie am frühzeitigen Zugang zur Vorschau der Accounts v2 API interessiert?" body_text=“Wir sind gerade dabei, die Vorschau von Accounts v2 bereitzustellen. Um Zugang zu beantragen, geben Sie unten Ihre E-Mail-Adresse ein.” form_cta_text=“Registrieren” success_text=“Danke! Wir melden uns bald.” show_email_confirmation=wahr /%} > > Für die meisten Anwendungsfälle empfehlen wir, [Ihre Kundinnen und Kunden als vom Kunden bzw. von der Kundin konfigurierte Account-Objekte abzubilden](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), anstatt [Customer](https://docs.stripe.com/api/customers.md)-Objekte zu verwenden. Available in: US Sie sind sich nicht sicher, welche Financial Connections-Integration Sie verwenden sollen? Sehen Sie sich unsere [Übersicht der Integrationsoptionen](https://docs.stripe.com/financial-connections/use-cases.md) an. Mit Financial Connections können Ihre Nutzer/innen ihre Finanzdaten sicher teilen, indem sie ihre externen Finanzkonten mit Ihrem Unternehmen verknüpfen. Sie können Financial Connections verwenden, um auf von den Nutzer/innen freigegebene Finanzdaten zuzugreifen, wie zum Beispiel tokenisierte Konto- und Routingnummern, Kontoguthaben, Angaben zum Inhaber/zur Inhaberin des Kontos und historische Transaktionen. Einige gängige Beispiele dafür, wie Sie Financial Connections nutzen können, um das Produkterlebnis für Ihre Nutzer/innen zu verbessern: - Verringern Sie Betrug beim Onboarding eines Kunden/einer Kundin oder eines Unternehmens, indem Sie die Angaben zur [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) eines Kontos, wie den Namen und die Adresse der Bankkontoinhaber/innen verifizieren. - Hilft Ihren Nutzern und Nutzerinnen Ausgaben zu verfolgen, Rechnungen zu bearbeiten, ihre Finanzen zu verwalten und mit [Transaktionsdaten](https://docs.stripe.com/financial-connections/transactions.md) die Kontrolle über ihr finanzielles Wohlergehen zu übernehmen. - Beschleunigung der Risikoevaluation und Verbesserung des Zugangs zu Krediten und anderen Finanzdienstleistungen mit Transaktionen und Saldodaten. - Mit Enable können Ihre Nutzer/innen ihre Konten in wenigen Schritten mit Link verknüpfen. So können sie ihre Bankkontodaten bei Stripe-Unternehmen speichern und wiederverwenden. ## Stripe einrichten [Serverseitig] [Registrieren](https://dashboard.stripe.com/financial-connections/application) Sie sich für Financial Connections, nachdem wir Ihr Konto für Zugriff im Live-Modus zugelassen haben. Verwenden Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Kontoinhaber/in erstellen oder abrufen [Serverseitig] Erstellen Sie ein [Kundenobjekt](https://docs.stripe.com/api/customers/object.md), wenn Nutzer/innen ein Konto bei Ihrem Unternehmen erstellen. Durch die Angabe einer E-Mail-Adresse kann Financial Connections den [Authentifizierungsablauf](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) optimieren, indem es für wiederkehrende [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses)-Nutzer/innen dynamisch eine optimierte Nutzeroberfläche anzeigt. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d email={{CUSTOMER_EMAIL}} \ -d name={{CUSTOMER_NAME}} ``` ## Financial Connections-Sitzung erstellen [Serverseitig] Bevor Sie mit Financial Connections Daten vom Bankkonto eines Nutzers/einer Nutzerin abrufen können, muss Ihr/e Nutzer/in sein/ihr Konto über den [Authentifizierungsvorgang](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) authentifizieren. {% ignore-validation terms=[“Link”] reason="Allgemeiner Linktext für eine Schaltflächenbeschriftung, nicht für das Zahlungsprodukt Link. %}Ihr/e Nutzer/in startet den Authentifizierungsablauf, wenn er sein Konto mit Ihrer Website oder Anwendung verknüpfen möchte. Fügen Sie auf Ihrer Website oder in Ihrer Anwendung eine Schaltfläche oder einen Link ein, über den ein Nutzer sein Konto verknüpfen kann – Ihre Schaltfläche könnte beispielsweise die Aufschrift „Bankkonto verknüpfen“ tragen. Erstellen Sie eine Financial Connections-Sitzung, indem Sie sie unter `/v1/financial_connections/sessions` angeben: ```curl curl https://api.stripe.com/v1/financial_connections/sessions \ -u "<>:" \ -d "account_holder[type]=customer" \ -d "account_holder[customer]={{CUSTOMER_ID}}" \ -d "permissions[]=balances" \ -d "permissions[]=ownership" \ -d "permissions[]=payment_method" \ -d "permissions[]=transactions" ``` 1. Legen Sie `account_holder[customer]` auf die Kunden-`id` fest. 1. Legen Sie den Parameter Daten-`permissions` so fest, dass er die für Ihren Use case erforderlichen Daten enthält. 1. (Optional) Legen Sie den Parameter `prefetch` zum Abrufen der Daten bei der Kontoerstellung fest. Der Parameter [Berechtigungen](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-permissions) steuert, auf welche Kontodaten Sie zugreifen können. Sie müssen mindestens eine Berechtigung anfordern. Wenn Sie den Authentifizierungsablauf abschließen, können Ihre Nutzer/innen die Daten sehen, auf die Sie Zugriff beantragt haben, und ihre Zustimmung zur Weitergabe erteilen. Überlegen Sie sorgfältig, welche Daten Sie für Ihren Use Case benötigen und fordern Sie die Berechtigung zum Zugriff nur für die von Ihnen benötigten Daten an. Wenn Sie Berechtigungen anfordern, die über den Umfang Ihrer Anwendung hinausgehen, ist es möglich, dass Nutzer/innen Ihnen nicht mehr volles Vertrauen schenken, da sie sich fragen, wie ihre Daten verwendet werden. Wenn Sie zum Beispiel eine Anwendung für die persönliche Finanzverwaltung oder ein Kreditprodukt entwickeln, möchten Sie möglicherweise die `transactions`-Daten anfordern. Zur Eindämmung von Betrug fordern Sie möglicherweise Details zur `ownership` an. Nachdem Ihre Nutzer/innen ihr Konto authentifiziert haben, können Sie Datenberechtigungen nur erweitern, indem Sie eine neue Financial Connections-Sitzung erstellen und einen neuen Wert im Parameter `permissions` angeben. Ihr/e Nutzer/in muss das Authentifizierungsverfahren erneut durchführen, wobei er/sie die zusätzlichen Daten sieht, für die Sie die Zugriffsberechtigung angefordert haben, und seine/ihre Zustimmung zum Teilen der Daten erteilt. Der optionale [Prefetch-Parameter](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-prefetch) steuert, welche Daten Sie unmittelbar nach der Verbindung des Nutzers/der Nutzerin mit seinem/ihren Konto abrufen. Verwenden Sie diese Option, wenn Sie wissen, dass Sie immer eine bestimmte Art von Daten wünschen. So entfällt die Notwendigkeit, einen zusätzlichen API-Aufruf durchzuführen, um eine [Datenaktualisierung zu](https://docs.stripe.com/api/financial_connections/accounts/refresh.md) initiieren. Um die Option zum [Annahme von ACH Direct Debit](https://docs.stripe.com/financial-connections/other-data-powered-products.md#accept-ach-direct-debit) beizubehalten, fordern Sie die Berechtigung `payment_method` an. ## Financial Connections-Konto erfassen [Clientseitig] Verwenden Sie das zurückgegebene `client_secret` mit Stripe.js, damit Ihre Nutzer/innen ihre Konten verbinden können. Ein `client_secret` gestattet clientseitigen Stripe SDKs Änderungen an der Financial Connections-Sitzung vorzunehmen. Es darf nicht gespeichert, protokolliert, in URLs eingebettet oder anderen Personen als Ihrem/Ihrer Endnutzer/in zugänglich gemacht werden. Stellen Sie sicher, dass [TLS](https://docs.stripe.com/security/guide.md#tls) auf jeder Seite aktiviert ist, die das Client-Geheimnis enthält. Verwenden Sie [collectFinancialConnectionsAccounts](https://docs.stripe.com/js/financial_connections/collect_financial_connections_accounts), um ein Konto zu erfassen. ```javascript const stripe = new Stripe('<>') const financialConnectionsSessionResult = await stripe.collectFinancialConnectionsAccounts({ clientSecret: "{{SESSION_CLIENT_SECRET}}", }); ``` Diese Methode lädt den [Authentifizierungsvorgang](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), die clientseitige Stripe.js-Benutzeroberfläche, die Ihren Nutzerinnen und Nutzern hilft, ihre Finanzkonten mit Ihnen und Stripe zu verknüpfen. Der Rückgabewert von `stripe.collectFinancialConnectionsAccounts` ist ein Promise. Wenn der/die Nutzer/in den Authentifizierungsvorgang abschließt, wird das Promise mit einem Objekt aufgelöst, das die Liste der verbundenen Konten enthält: ```json { "financialConnectionsSession": { "id": "fcsess_123", "accounts": [ { "id": "fca_456", "object": "financial_connections.account", "category": "Checking", "display_name": "Premium Checking", "institution_name": "Test Bank", "last4": "4242" } ] } } ``` Wenn der/die Nutzer/in keine Verbindung mit Konten herstellt oder den Authentifizierungsvorgang vorzeitig beendet, enthält die Antwort ein leeres `accounts`-Array. Der erfolgreiche Abschluss des Authentifizierungsablaufs sendet auch einen `financial_connections.account.created`-Webhook pro verbundenem Konto. ## Daten für ein Financial Connections-Konto abrufen [Serverseitig] Nachdem Ihr/e Nutzer/in das Authentifizierungsverfahren erfolgreich abgeschlossen hat, greifen Sie auf die Kontodaten zu, die Sie im Parameter `permissions` der Financial Connections-Sitzung angegeben haben, oder aktualisieren Sie diese. Um die Privatsphäre der Daten Ihrer Nutzer/innen zu schützen, sind die für Sie zugänglichen Kontodaten auf die Daten beschränkt, die Sie im Parameter `permissions` angegeben haben. Beachten Sie die Leitfäden für [Salden](https://docs.stripe.com/financial-connections/balances.md), [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) und [Transaktionen](https://docs.stripe.com/financial-connections/transactions.md), um mit dem Abrufen von Kontodaten zu beginnen. ## Optional: ACH-Lastschriftzahlung von einem Financial Connections-Konto akzeptieren Sie können optional ACH-Lastschriftzahlungen auf einem zuvor erfassten Financial Connections-Konto akzeptieren, solange das Attribut `supported_payment_method_types` des Kontos `us_bank_account` enthält. Nur US-Bankkonten können ACH-Lastschriften akzeptieren, beispielsweise Giro- oder Sparkonten. Um eine ACH-Lastschriftzahlung für ein zuvor erfasstes Konto zu akzeptieren, müssen Sie in der Financial Connections-Sitzung `payment_method` im Parameter [data permissions](https://docs.stripe.com/financial-connections/fundamentals.md#data-permissions) angegeben haben. ### Payment Intent oder Setup Intent erstellen Verwenden Sie die *Payment Intents API* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods), um eine ACH-Lastschriftzahlung für ein Konto zu akzeptieren, das Sie jetzt belasten möchten. Verwenden Sie die *Setup Intents API* (The Setup Intents API lets you build dynamic flows for collecting payment method details for future payments. It tracks the lifecycle of a payment setup flow and can trigger additional authentication steps if required by law or by the payment method), um Daten für zukünftige ACH-Lastschriftzahlungen zu speichern. [Erfahren Sie mehr über den Unterschied zwischen](https://support.stripe.com/questions/payment-intents-api-vs-setup-intents-api) einem Payment Intent und einem Setup Intent. Dieser Pfad zeigt Ihnen, wie Sie eine ACH-Lastschriftzahlung mit der Payment Intents API akzeptieren können. Verwenden Sie die Konto-ID von Financial Connections und die ID des Kunden/der Kundin, um einen Payment Intent zu erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d "payment_method_data[us_bank_account][financial_connections_account]={{FINANCIALCONNECTIONSACCOUNT_ID}}" \ -d "payment_method_data[type]=us_bank_account" \ -d "payment_method_data[billing_details][name]=J. Customer" \ -d amount=100 \ -d currency=usd ``` Dadurch wird ein Payment Intent ähnlich dem Folgenden zurückgegeben: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_details": { "tip": { "amount": null } }, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "confirmation_method": "automatic", "created": 1651010665, "currency": "usd", "customer": null, "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "requires_confirmation", "transfer_data": null, "transfer_group": null } ``` ### Mandatsbestätigung erfassen und die Zahlung übermitteln Bevor Sie die Zahlung veranlassen können, müssen Sie eine Zahlungsautorisierung von Ihrem/Ihrer Kund/in einholen, indem Sie Mandatsbedingungen anzeigen, denen er/sie zustimmen muss. Um die Nacha-Regeln einzuhalten, müssen Sie eine Autorisierung von Ihrem Kunden/Ihrer Kundin einholen, bevor Sie die Zahlung veranlassen können. Dies tun Sie durch Anzeigen von Mandatskonditionen, denen der Kunde/die Kundin zustimmen muss. Weitere Informationen finden Sie unter [Mandate](https://docs.stripe.com/payments/ach-direct-debit.md#mandates). ### Payment Intent bestätigen Um diesen Payment Intent zu bestätigen, müssen Sie entweder einen [`mandate`-Parameter](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate) mit einer bestehenden Mandats-ID oder [mandate_data](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate_data) zum Erstellen eines neuen Mandats angeben. Wenn Sie beispielsweise eine Bezahlseite mit der Schaltfläche „Bestellung aufgeben“ haben, kann durch Klicken auf diese Schaltfläche ein `POST` an einen Endpoint auf Ihrem Server ausgelöst werden. Dieser Endpoint kann den Nutzer-Agent der Anfrage und die IP-Adresse des Clients extrahieren und dann die folgende Anfrage an die API von Stripe senden: ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ -d "mandate_data[customer_acceptance][accepted_at]=1647448692" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=71.183.194.54" \ --data-urlencode "mandate_data[customer_acceptance][online][user_agent]=Mozilla/5.0 ..." ``` Nach der erfolgreichen Bestätigung des Payment Intent sieht dieser ähnlich dem Folgenden aus: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ { "id": "py_17F8CPDyDglZKgWE3uzOAUe9", "object": "charge", "amount": 100, "amount_captured": 100, "amount_refunded": 0, "application": null, "application_fee": null, "application_fee_amount": null, "balance_transaction": null, "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null, "state": null }, "email": null, "name": "J. Customer", "phone": null }, "calculated_statement_descriptor": null, "captured": true, "created": 1647448692, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "destination": null, "dispute": null, "disputed": false, "failure_code": null, "failure_message": null, "fraud_details": { }, "invoice": null, "livemode": false, "metadata": { }, "on_behalf_of": null, "order": null, "outcome": null, "paid": false, "payment_intent": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "STRIPE TEST BANK", "fingerprint": "QnXqpAeqjjh8pPFa", "last4": "6789", "routing_number": "110000000" } }, "receipt_email": null, "receipt_number": null, "receipt_url": null, "refunded": false, "refunds": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges/py_17F8CPDyDglZKgWE3uzOAUe9/refunds" }, "review": null, "shipping": null, "source": null, "source_transfer": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "pending", "transfer_data": null, "transfer_group": null } ], "has_more": false, "total_count": 1, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP_secret_m38BKZvm3vSdpGdra360hPEov", "confirmation_method": "automatic", "created": 1647447792, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "processing", "transfer_data": null, "transfer_group": null } ``` Beim ACH-Lastschriftverfahren handelt es sich um eine *Zahlungsmethode mit verzögerter Benachrichtigung* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods). Das bedeutet, dass es bis zu vier Werktage dauern kann, bis Sie nach Initiierung der Lastschrift für das Konto Ihres/Ihrer Kund/in eine Mitteilung über eine erfolgreiche oder fehlgeschlagene Zahlung erhalten. Der von Ihnen erstellte PaymentIntent befindet sich zunächst im Status `processing`. Wenn die Zahlung erfolgreich war, wird der Status des PaymentIntent von `processing` in `succeeded` geändert. Erfahren Sie mehr über die Ereignisse, die gesendet werden, wenn der [PaymentIntent-Status aktualisiert wird](https://docs.stripe.com/payments/ach-direct-debit/accept-a-payment.md#web-confirm-paymentintent-succeeded). Available in: US Sie sind sich nicht sicher, welche Financial Connections-Integration Sie verwenden sollen? Sehen Sie sich unsere [Übersicht der Integrationsoptionen](https://docs.stripe.com/financial-connections/use-cases.md) an. Mit Financial Connections können Ihre Nutzer/innen ihre Finanzdaten sicher teilen, indem sie ihre externen Finanzkonten mit Ihrem Unternehmen verknüpfen. Sie können Financial Connections verwenden, um auf von den Nutzer/innen freigegebene Finanzdaten zuzugreifen, wie zum Beispiel tokenisierte Konto- und Routingnummern, Kontoguthaben, Angaben zum Inhaber/zur Inhaberin des Kontos und historische Transaktionen. Einige gängige Beispiele dafür, wie Sie Financial Connections nutzen können, um das Produkterlebnis für Ihre Nutzer/innen zu verbessern: - Verringern Sie Betrug beim Onboarding eines Kunden/einer Kundin oder eines Unternehmens, indem Sie die Angaben zur [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) eines Kontos, wie den Namen und die Adresse der Bankkontoinhaber/innen verifizieren. - Hilft Ihren Nutzern und Nutzerinnen Ausgaben zu verfolgen, Rechnungen zu bearbeiten, ihre Finanzen zu verwalten und mit [Transaktionsdaten](https://docs.stripe.com/financial-connections/transactions.md) die Kontrolle über ihr finanzielles Wohlergehen zu übernehmen. - Beschleunigung der Risikoevaluation und Verbesserung des Zugangs zu Krediten und anderen Finanzdienstleistungen mit Transaktionen und Saldodaten. - Mit Enable können Ihre Nutzer/innen ihre Konten in wenigen Schritten mit Link verknüpfen. So können sie ihre Bankkontodaten bei Stripe-Unternehmen speichern und wiederverwenden. ## Stripe einrichten [Serverseitig] [Clientseitig] [Registrieren](https://dashboard.stripe.com/financial-connections/application) Sie sich für Financial Connections, nachdem Ihr Konto für Zugriff im Live-Modus zugelassen wurde. ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe-API kommunizieren können. Nutzen Sie diese offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [Stripe iOS SDK](https://github.com/stripe/stripe-ios) ist Open Source, [vollständig dokumentiert](https://stripe.dev/stripe-ios/index.html) und kompatibel mit Apps, die iOS 13 oder höher unterstützen. #### Swift Package Manager Führen Sie zur Installation des SDK die folgenden Schritte aus: 1. Wählen Sie in Xcode **Datei** > **Add Package Dependencies** (Paketabhängigkeiten hinzufügen) aus und geben Sie als Repository-URL `https://github.com/stripe/stripe-ios-spm` ein. 1. Wählen auf unserer [Veröffentlichungsseite](https://github.com/stripe/stripe-ios/releases) die neueste Version aus. 1. Fügen Sie das Produkt **StripeFinancialConnections** zum [Ziel Ihrer App](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app) hinzu. #### CocoaPods 1. Falls noch nicht geschehen, installieren Sie bitte die aktuellste Version von [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Wenn Sie keine bestehende [Podfile](https://guides.cocoapods.org/syntax/podfile.html) haben, führen Sie folgenden Befehl aus, um eine zu erstellen: ```bash pod init ``` 1. Fügen Sie folgende Zeile in Ihre `Podfile` ein: ```podfile pod 'StripeFinancialConnections' ``` 1. Führen Sie folgenden Befehl aus: ```bash pod install ``` 1. Vergessen Sie nicht, ab jetzt in Zukunft anstelle der Datei `.xcodeproj` die Datei `.xcworkspace` zum Öffnen Ihres Projekts in Xcode zu verwenden. 1. Führen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK Folgendes aus: ```bash pod update StripeFinancialConnections ``` #### Carthage 1. Falls noch nicht geschehen, installieren Sie bitte die aktuelle Version von [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Fügen Sie folgende Zeile in Ihre `Cartfile` ein: ```cartfile github "stripe/stripe-ios" ``` 1. Befolgen Sie die [Carthage-Installationsanweisungen](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Vergewissern Sie sich, dass Sie alle [hier](https://github.com/stripe/stripe-ios/blob/master/StripeFinancialConnections/README.md#manual-linking) aufgeführten erforderlichen Frameworks einbetten. 1. Führen Sie für zukünftige Updates auf die aktuelle Version unseres SDK einfach folgenden Befehl aus: ```bash carthage update stripe-ios --platform ios ``` #### Manuelles Framework 1. Gehen Sie auf unsere [GitHub-Release-Seite](https://github.com/stripe/stripe-ios/releases/latest), laden Sie **Stripe.xcframework.zip** herunter und entpacken Sie die Datei. 1. Ziehen Sie **StripeFinancialConnections.xcframework** in den Abschnitt **Embedded Binaries** (Eingebettete Binärdateien) der Einstellungen unter **General** (Allgemeines) Ihres Xcode-Projekts. Aktivieren Sie dabei die Option **Copy items if needed** (Elemente kopieren, falls nötig). 1. Wiederholen Sie Schritt 2 für alle [hier](https://github.com/stripe/stripe-ios/blob/master/StripeFinancialConnections/README.md#manual-linking) aufgeführten erforderlichen Frameworks. 1. Wiederholen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK die Schritte 1–3. > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-ios/releases) auf GitHub. Um bei Veröffentlichung einer neuen Version eine Benachrichtigung zu erhalten, [achten Sie auf die Releases zum jeweiligen Repository](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository). ## Kontoinhaber/in erstellen oder abrufen [Serverseitig] Erstellen Sie ein [Kundenobjekt](https://docs.stripe.com/api/customers/object.md), wenn Nutzer/innen ein Konto bei Ihrem Unternehmen erstellen. Durch die Angabe einer E-Mail-Adresse kann Financial Connections den [Authentifizierungsablauf](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) optimieren, indem es für wiederkehrende [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses)-Nutzer/innen dynamisch eine optimierte Nutzeroberfläche anzeigt. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d email={{CUSTOMER_EMAIL}} \ -d name={{CUSTOMER_NAME}} ``` ## Financial Connections-Sitzung erstellen [Serverseitig] > Eine laufende Implementierung dieses Endpoints für schnelle Tests ist [auf Glitch verfügbar](https://glitch.com/edit/#!/remix/stripe-mobile-connections-example). Bevor Sie mit Financial Connections Daten vom Bankkonto eines Nutzers/einer Nutzerin abrufen können, muss Ihr/e Nutzer/in sein/ihr Konto über den [Authentifizierungsvorgang](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) authentifizieren. {% ignore-validation terms=[“Link”] reason="Allgemeiner Linktext für eine Schaltflächenbeschriftung, nicht für das Zahlungsprodukt Link. %}Ihr/e Nutzer/in startet den Authentifizierungsablauf, wenn er sein Konto mit Ihrer Website oder Anwendung verknüpfen möchte. Fügen Sie auf Ihrer Website oder in Ihrer Anwendung eine Schaltfläche oder einen Link ein, über den ein Nutzer sein Konto verknüpfen kann – Ihre Schaltfläche könnte beispielsweise die Aufschrift „Bankkonto verknüpfen“ tragen. Erstellen Sie eine Financial Connections-Sitzung, indem Sie sie unter `/v1/financial_connections/sessions` angeben: ```curl curl https://api.stripe.com/v1/financial_connections/sessions \ -u "<>:" \ -d "account_holder[type]=customer" \ -d "account_holder[customer]={{CUSTOMER_ID}}" \ -d "permissions[]=balances" \ -d "permissions[]=ownership" \ -d "permissions[]=payment_method" \ -d "permissions[]=transactions" ``` 1. Legen Sie `account_holder[customer]` auf die Kunden-`id` fest. 1. Legen Sie den Parameter Daten-`permissions` so fest, dass er die für Ihren Use case erforderlichen Daten enthält. 1. (Optional) Legen Sie den Parameter `prefetch` zum Abrufen der Daten bei der Kontoerstellung fest. Der Parameter [Berechtigungen](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-permissions) steuert, auf welche Kontodaten Sie zugreifen können. Sie müssen mindestens eine Berechtigung anfordern. Wenn Sie den Authentifizierungsablauf abschließen, können Ihre Nutzer/innen die Daten sehen, auf die Sie Zugriff beantragt haben, und ihre Zustimmung zur Weitergabe erteilen. Überlegen Sie sorgfältig, welche Daten Sie für Ihren Use Case benötigen und fordern Sie die Berechtigung zum Zugriff nur für die von Ihnen benötigten Daten an. Wenn Sie Berechtigungen anfordern, die über den Umfang Ihrer Anwendung hinausgehen, ist es möglich, dass Nutzer/innen Ihnen nicht mehr volles Vertrauen schenken, da sie sich fragen, wie ihre Daten verwendet werden. Wenn Sie zum Beispiel eine Anwendung für die persönliche Finanzverwaltung oder ein Kreditprodukt entwickeln, möchten Sie möglicherweise die `transactions`-Daten anfordern. Zur Eindämmung von Betrug fordern Sie möglicherweise Details zur `ownership` an. Nachdem Ihre Nutzer/innen ihr Konto authentifiziert haben, können Sie Datenberechtigungen nur erweitern, indem Sie eine neue Financial Connections-Sitzung erstellen und einen neuen Wert im Parameter `permissions` angeben. Ihr/e Nutzer/in muss das Authentifizierungsverfahren erneut durchführen, wobei er/sie die zusätzlichen Daten sieht, für die Sie die Zugriffsberechtigung angefordert haben, und seine/ihre Zustimmung zum Teilen der Daten erteilt. Der optionale [Prefetch-Parameter](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-prefetch) steuert, welche Daten Sie unmittelbar nach der Verbindung des Nutzers/der Nutzerin mit seinem/ihren Konto abrufen. Verwenden Sie diese Option, wenn Sie wissen, dass Sie immer eine bestimmte Art von Daten wünschen. So entfällt die Notwendigkeit, einen zusätzlichen API-Aufruf durchzuführen, um eine [Datenaktualisierung zu](https://docs.stripe.com/api/financial_connections/accounts/refresh.md) initiieren. Um die Option zum [Annahme von ACH Direct Debit](https://docs.stripe.com/financial-connections/other-data-powered-products.md#accept-ach-direct-debit) beizubehalten, fordern Sie die Berechtigung `payment_method` an. ## Rückgabe-URL einrichten [Clientseitig] Der Kunde/Die Kundin verlässt ggf. Ihre App, um sich zu authentifizieren (z. B. in Safari oder einer Banking-App). Damit sie nach der Authentifizierung automatisch zu Ihrer App zurückkehren können, [konfigurieren Sie ein benutzerdefiniertes URL-Schema](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) und richten Sie Ihren App-Delegate so ein, dass die URL an das SDK weitergeleitet wird. Stripe unterstützt keine [universellen Links](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content). > Stripe fügt möglicherweise zusätzliche Parameter an die angegebene Rückgabe-URL an. Stellen Sie sicher, dass Rückgabe-URLs mit zusätzlichen Parametern nicht von Ihrem Code zurückgewiesen werden. #### 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 } } } } } ``` ## FinancialConnectionsSheet integrieren [Clientseitig] Bevor der Financial Connections-Ablauf angezeigt wird, sollte Ihre Seite die Schaltfläche **Finanzkonto verbinden** enthalten, um die Nutzeroberfläche von Stripe anzuzeigen. Rufen Sie in Ihrer App das *Client-Geheimnis* (A client secret is used with your publishable key to authenticate a request for a single object. Each client secret is unique to the object it's associated with) der `FinancialConnectionsSession`und den veröffentlichbaren Schlüssel von dem Endpoint ab, den Sie im vorherigen Schritt erstellt haben. Legen Sie Ihren veröffentlichbaren Schlüssel mit `StripeAPI.shared` fest und initialisieren Sie `FinancialConnectionsSheet`. Übergeben Sie die `returnURL`, die Sie im vorherigen Schritt eingerichtet haben. #### Swift ```swift import StripeFinancialConnections class ViewController: UIViewController { @IBOutlet weak var connectFinancialAccountButton: UIButton! var financialConnectionsSheet: FinancialConnectionsSheet? let backendCheckoutUrl = URL(string: "Your backend endpoint")! // Your backend endpoint override func viewDidLoad() { super.viewDidLoad() connectFinancialAccountButton.addTarget(self, action: #selector(didTapConnectFinancialAccountButton), for: .touchUpInside) connectFinancialAccountButton.isEnabled = false // MARK: Fetch the FinancialConnectionsSession client secret and publishable key var request = URLRequest(url: backendCheckoutUrl) request.httpMethod = "POST" let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any], let clientSecret = json["client_secret"] as? String, let publishableKey = json["publishable_key"] as? String, let self = self else { // Handle error return } // MARK: Set your Stripe publishable key - this allows the SDK to make requests to Stripe for your account STPAPIClient.shared.publishableKey = publishableKey self.financialConnectionsSheet = FinancialConnectionsSheet( financialConnectionsSessionClientSecret: clientSecret, returnURL: "https://your-app-domain.com/stripe-redirect" ) DispatchQueue.main.async { self.connectFinancialAccountButton.isEnabled = true } }) task.resume() } @objc func didTapConnectFinancialAccountButton() { // implemented in the next steps } } ``` Wenn der/die Kund/in auf die Schaltfläche **Finanzkonto verbinden** tippt, rufen Sie `FinancialConnectionsSheet#present` auf, um das Financial Connections-Formular anzuzeigen. Nachdem der/die Kund/in den Financial Connections-Ablauf abgeschlossen hat, wird das Formular verworfen und der Abschlussblock wird mit einem `FinancialConnectionsSheetResult` aufgerufen. #### Swift ```swift @objc func didTapConnectFinancialAccountButton() {// MARK: Start the financial connections flow financialConnectionsSheet?.present( from: self, completion: { result in switch result { case .completed(session: let financialConnectionsSession): let accounts = financialConnectionsSession.accounts.data.filter { $0.last4 != nil } let accountInfos = accounts.map { "\($0.institutionName) ....\($0.last4!)" } print("Completed with \(accountInfos.joined(separator: "\n")) accounts") case .canceled: print("Canceled!") case .failed(let error): print("Failed!") print(error) } }) } ``` ## Daten für ein Financial Connections-Konto abrufen [Serverseitig] Nachdem Ihr/e Nutzer/in das Authentifizierungsverfahren erfolgreich abgeschlossen hat, greifen Sie auf die Kontodaten zu, die Sie im Parameter `permissions` der Financial Connections-Sitzung angegeben haben, oder aktualisieren Sie diese. Um die Privatsphäre der Daten Ihrer Nutzer/innen zu schützen, sind die für Sie zugänglichen Kontodaten auf die Daten beschränkt, die Sie im Parameter `permissions` angegeben haben. Beachten Sie die Leitfäden für [Salden](https://docs.stripe.com/financial-connections/balances.md), [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) und [Transaktionen](https://docs.stripe.com/financial-connections/transactions.md), um mit dem Abrufen von Kontodaten zu beginnen. ## Optional: Formular anpassen [Clientseitig] Alle Anpassungskonfigurationen verwenden das `FinancialConnectionsSheet.Configuration`-Objekt. ### Dunkelmodus `FinancialConnectionsSheet` passt sich automatisch an die systemweiten Einstellungen für das Erscheinungsbild des Nutzers/der Nutzerin an (heller und dunkler Modus). Wenn Ihre App den Dunkelmodus nicht unterstützt, können Sie den `style` auf den Modus `alwaysLight` oder `alwaysDark` festlegen. ```swift var configuration = FinancialConnectionsSheet.Configuration() configuration.style = .alwaysLight ``` > Wenn `FinancialConnectionsSheet` über das [PaymentSheet-SDK](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) gestartet wird, wird der in der `PaymentSheet.Configuration` angegebene [Stil](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios#dark-mode) automatisch übernommen. ## Optional: ACH-Lastschriftzahlung von einem Financial Connections-Konto akzeptieren Sie können optional ACH-Lastschriftzahlungen auf einem zuvor erfassten Financial Connections-Konto akzeptieren, solange das Attribut `supported_payment_method_types` des Kontos `us_bank_account` enthält. Nur US-Bankkonten können ACH-Lastschriften akzeptieren, beispielsweise Giro- oder Sparkonten. Um eine ACH-Lastschriftzahlung für ein zuvor erfasstes Konto zu akzeptieren, müssen Sie in der Financial Connections-Sitzung `payment_method` im Parameter [data permissions](https://docs.stripe.com/financial-connections/fundamentals.md#data-permissions) angegeben haben. ### Payment Intent oder Setup Intent erstellen Verwenden Sie die *Payment Intents API* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods), um eine ACH-Lastschriftzahlung für ein Konto zu akzeptieren, das Sie jetzt belasten möchten. Verwenden Sie die *Setup Intents API* (The Setup Intents API lets you build dynamic flows for collecting payment method details for future payments. It tracks the lifecycle of a payment setup flow and can trigger additional authentication steps if required by law or by the payment method), um Daten für zukünftige ACH-Lastschriftzahlungen zu speichern. [Erfahren Sie mehr über den Unterschied zwischen](https://support.stripe.com/questions/payment-intents-api-vs-setup-intents-api) einem Payment Intent und einem Setup Intent. Dieser Pfad zeigt Ihnen, wie Sie eine ACH-Lastschriftzahlung mit der Payment Intents API akzeptieren können. Verwenden Sie die Konto-ID von Financial Connections und die ID des Kunden/der Kundin, um einen Payment Intent zu erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d "payment_method_data[us_bank_account][financial_connections_account]={{FINANCIALCONNECTIONSACCOUNT_ID}}" \ -d "payment_method_data[type]=us_bank_account" \ -d "payment_method_data[billing_details][name]=J. Customer" \ -d amount=100 \ -d currency=usd ``` Dadurch wird ein Payment Intent ähnlich dem Folgenden zurückgegeben: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_details": { "tip": { "amount": null } }, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "confirmation_method": "automatic", "created": 1651010665, "currency": "usd", "customer": null, "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "requires_confirmation", "transfer_data": null, "transfer_group": null } ``` ### Mandatsbestätigung erfassen und die Zahlung übermitteln Bevor Sie die Zahlung veranlassen können, müssen Sie eine Zahlungsautorisierung von Ihrem/Ihrer Kund/in einholen, indem Sie Mandatsbedingungen anzeigen, denen er/sie zustimmen muss. Um die Nacha-Regeln einzuhalten, müssen Sie eine Autorisierung von Ihrem Kunden/Ihrer Kundin einholen, bevor Sie die Zahlung veranlassen können. Dies tun Sie durch Anzeigen von Mandatskonditionen, denen der Kunde/die Kundin zustimmen muss. Weitere Informationen finden Sie unter [Mandate](https://docs.stripe.com/payments/ach-direct-debit.md#mandates). ### Payment Intent bestätigen Um diesen Payment Intent zu bestätigen, müssen Sie entweder einen [`mandate`-Parameter](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate) mit einer bestehenden Mandats-ID oder [mandate_data](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate_data) zum Erstellen eines neuen Mandats angeben. Wenn Sie beispielsweise eine Bezahlseite mit der Schaltfläche „Bestellung aufgeben“ haben, kann durch Klicken auf diese Schaltfläche ein `POST` an einen Endpoint auf Ihrem Server ausgelöst werden. Dieser Endpoint kann den Nutzer-Agent der Anfrage und die IP-Adresse des Clients extrahieren und dann die folgende Anfrage an die API von Stripe senden: ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ -d "mandate_data[customer_acceptance][accepted_at]=1647448692" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=71.183.194.54" \ --data-urlencode "mandate_data[customer_acceptance][online][user_agent]=Mozilla/5.0 ..." ``` Nach der erfolgreichen Bestätigung des Payment Intent sieht dieser ähnlich dem Folgenden aus: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ { "id": "py_17F8CPDyDglZKgWE3uzOAUe9", "object": "charge", "amount": 100, "amount_captured": 100, "amount_refunded": 0, "application": null, "application_fee": null, "application_fee_amount": null, "balance_transaction": null, "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null, "state": null }, "email": null, "name": "J. Customer", "phone": null }, "calculated_statement_descriptor": null, "captured": true, "created": 1647448692, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "destination": null, "dispute": null, "disputed": false, "failure_code": null, "failure_message": null, "fraud_details": { }, "invoice": null, "livemode": false, "metadata": { }, "on_behalf_of": null, "order": null, "outcome": null, "paid": false, "payment_intent": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "STRIPE TEST BANK", "fingerprint": "QnXqpAeqjjh8pPFa", "last4": "6789", "routing_number": "110000000" } }, "receipt_email": null, "receipt_number": null, "receipt_url": null, "refunded": false, "refunds": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges/py_17F8CPDyDglZKgWE3uzOAUe9/refunds" }, "review": null, "shipping": null, "source": null, "source_transfer": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "pending", "transfer_data": null, "transfer_group": null } ], "has_more": false, "total_count": 1, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP_secret_m38BKZvm3vSdpGdra360hPEov", "confirmation_method": "automatic", "created": 1647447792, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "processing", "transfer_data": null, "transfer_group": null } ``` Beim ACH-Lastschriftverfahren handelt es sich um eine *Zahlungsmethode mit verzögerter Benachrichtigung* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods). Das bedeutet, dass es bis zu vier Werktage dauern kann, bis Sie nach Initiierung der Lastschrift für das Konto Ihres/Ihrer Kund/in eine Mitteilung über eine erfolgreiche oder fehlgeschlagene Zahlung erhalten. Der von Ihnen erstellte PaymentIntent befindet sich zunächst im Status `processing`. Wenn die Zahlung erfolgreich war, wird der Status des PaymentIntent von `processing` in `succeeded` geändert. Erfahren Sie mehr über die Ereignisse, die gesendet werden, wenn der [PaymentIntent-Status aktualisiert wird](https://docs.stripe.com/payments/ach-direct-debit/accept-a-payment.md#web-confirm-paymentintent-succeeded). Available in: US Sie sind sich nicht sicher, welche Financial Connections-Integration Sie verwenden sollen? Sehen Sie sich unsere [Übersicht der Integrationsoptionen](https://docs.stripe.com/financial-connections/use-cases.md) an. Mit Financial Connections können Ihre Nutzer/innen ihre Finanzdaten sicher teilen, indem sie ihre externen Finanzkonten mit Ihrem Unternehmen verknüpfen. Sie können Financial Connections verwenden, um auf von den Nutzer/innen freigegebene Finanzdaten zuzugreifen, wie zum Beispiel tokenisierte Konto- und Routingnummern, Kontoguthaben, Angaben zum Inhaber/zur Inhaberin des Kontos und historische Transaktionen. Einige gängige Beispiele dafür, wie Sie Financial Connections nutzen können, um das Produkterlebnis für Ihre Nutzer/innen zu verbessern: - Verringern Sie Betrug beim Onboarding eines Kunden/einer Kundin oder eines Unternehmens, indem Sie die Angaben zur [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) eines Kontos, wie den Namen und die Adresse der Bankkontoinhaber/innen verifizieren. - Hilft Ihren Nutzern und Nutzerinnen Ausgaben zu verfolgen, Rechnungen zu bearbeiten, ihre Finanzen zu verwalten und mit [Transaktionsdaten](https://docs.stripe.com/financial-connections/transactions.md) die Kontrolle über ihr finanzielles Wohlergehen zu übernehmen. - Beschleunigung der Risikoevaluation und Verbesserung des Zugangs zu Krediten und anderen Finanzdienstleistungen mit Transaktionen und Saldodaten. - Mit Enable können Ihre Nutzer/innen ihre Konten in wenigen Schritten mit Link verknüpfen. So können sie ihre Bankkontodaten bei Stripe-Unternehmen speichern und wiederverwenden. ## Stripe einrichten [Serverseitig] [Clientseitig] [Registrieren](https://dashboard.stripe.com/financial-connections/application) Sie sich für Financial Connections, nachdem Ihr Konto für Zugriff im Live-Modus zugelassen wurde. ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe-API kommunizieren können. Nutzen Sie diese offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [Stripe Android SDK](https://github.com/stripe/stripe-android) ist Open Source und [vollständig dokumentiert](https://stripe.dev/stripe-android/). Um das SDK zu installieren, fügen Sie `financial-connections` in den Block `dependencies` Ihrer [app/build.gradle](https://developer.android.com/studio/build/dependencies)-Datei ein: #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Financial Connections Android SDK implementation("com.stripe:financial-connections:23.7.0") } ``` > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-android/releases) auf GitHub. Um bei Veröffentlichung eines neuen Release eine Benachrichtigung zu erhalten, [beobachten Sie Veröffentlichungen für das jeweilige Repository](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). ## Kontoinhaber/in erstellen oder abrufen [Serverseitig] Erstellen Sie ein [Kundenobjekt](https://docs.stripe.com/api/customers/object.md), wenn Nutzer/innen ein Konto bei Ihrem Unternehmen erstellen. Durch die Angabe einer E-Mail-Adresse kann Financial Connections den [Authentifizierungsablauf](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) optimieren, indem es für wiederkehrende [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses)-Nutzer/innen dynamisch eine optimierte Nutzeroberfläche anzeigt. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d email={{CUSTOMER_EMAIL}} \ -d name={{CUSTOMER_NAME}} ``` ## Financial Connections-Sitzung erstellen [Serverseitig] > Eine laufende Implementierung dieses Endpoints für schnelle Tests ist [auf Glitch verfügbar](https://glitch.com/edit/#!/remix/stripe-mobile-connections-example). Bevor Sie mit Financial Connections Daten vom Bankkonto eines Nutzers/einer Nutzerin abrufen können, muss Ihr/e Nutzer/in sein/ihr Konto über den [Authentifizierungsvorgang](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) authentifizieren. {% ignore-validation terms=[“Link”] reason="Allgemeiner Linktext für eine Schaltflächenbeschriftung, nicht für das Zahlungsprodukt Link. %}Ihr/e Nutzer/in startet den Authentifizierungsablauf, wenn er sein Konto mit Ihrer Website oder Anwendung verknüpfen möchte. Fügen Sie auf Ihrer Website oder in Ihrer Anwendung eine Schaltfläche oder einen Link ein, über den ein Nutzer sein Konto verknüpfen kann – Ihre Schaltfläche könnte beispielsweise die Aufschrift „Bankkonto verknüpfen“ tragen. Erstellen Sie eine Financial Connections-Sitzung, indem Sie sie unter `/v1/financial_connections/sessions` angeben: ```curl curl https://api.stripe.com/v1/financial_connections/sessions \ -u "<>:" \ -d "account_holder[type]=customer" \ -d "account_holder[customer]={{CUSTOMER_ID}}" \ -d "permissions[]=balances" \ -d "permissions[]=ownership" \ -d "permissions[]=payment_method" \ -d "permissions[]=transactions" ``` 1. Legen Sie `account_holder[customer]` auf die Kunden-`id` fest. 1. Legen Sie den Parameter Daten-`permissions` so fest, dass er die für Ihren Use case erforderlichen Daten enthält. 1. (Optional) Legen Sie den Parameter `prefetch` zum Abrufen der Daten bei der Kontoerstellung fest. Der Parameter [Berechtigungen](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-permissions) steuert, auf welche Kontodaten Sie zugreifen können. Sie müssen mindestens eine Berechtigung anfordern. Wenn Sie den Authentifizierungsablauf abschließen, können Ihre Nutzer/innen die Daten sehen, auf die Sie Zugriff beantragt haben, und ihre Zustimmung zur Weitergabe erteilen. Überlegen Sie sorgfältig, welche Daten Sie für Ihren Use Case benötigen und fordern Sie die Berechtigung zum Zugriff nur für die von Ihnen benötigten Daten an. Wenn Sie Berechtigungen anfordern, die über den Umfang Ihrer Anwendung hinausgehen, ist es möglich, dass Nutzer/innen Ihnen nicht mehr volles Vertrauen schenken, da sie sich fragen, wie ihre Daten verwendet werden. Wenn Sie zum Beispiel eine Anwendung für die persönliche Finanzverwaltung oder ein Kreditprodukt entwickeln, möchten Sie möglicherweise die `transactions`-Daten anfordern. Zur Eindämmung von Betrug fordern Sie möglicherweise Details zur `ownership` an. Nachdem Ihre Nutzer/innen ihr Konto authentifiziert haben, können Sie Datenberechtigungen nur erweitern, indem Sie eine neue Financial Connections-Sitzung erstellen und einen neuen Wert im Parameter `permissions` angeben. Ihr/e Nutzer/in muss das Authentifizierungsverfahren erneut durchführen, wobei er/sie die zusätzlichen Daten sieht, für die Sie die Zugriffsberechtigung angefordert haben, und seine/ihre Zustimmung zum Teilen der Daten erteilt. Der optionale [Prefetch-Parameter](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-prefetch) steuert, welche Daten Sie unmittelbar nach der Verbindung des Nutzers/der Nutzerin mit seinem/ihren Konto abrufen. Verwenden Sie diese Option, wenn Sie wissen, dass Sie immer eine bestimmte Art von Daten wünschen. So entfällt die Notwendigkeit, einen zusätzlichen API-Aufruf durchzuführen, um eine [Datenaktualisierung zu](https://docs.stripe.com/api/financial_connections/accounts/refresh.md) initiieren. Um die Option zum [Annahme von ACH Direct Debit](https://docs.stripe.com/financial-connections/other-data-powered-products.md#accept-ach-direct-debit) beizubehalten, fordern Sie die Berechtigung `payment_method` an. ## FinancialConnectionsSheet integrieren [Serverseitig] [Clientseitig] Bevor der Financial Connections-Ablauf angezeigt wird, sollte Ihre Seite die Schaltfläche **Finanzkonto verbinden** enthalten, um die Nutzeroberfläche von Stripe anzuzeigen. [Initialisieren](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet/-companion/index.html) Sie eine `FinancialConnectionsSheet`-Instanz in `onCreate` Ihrer Checkout-Aktivität und übergeben Sie eine Methode zur Handhabung des Ergebnisses. #### Kotlin ```kotlin import com.stripe.android.financialconnections.FinancialConnectionsSheet class MyHostActivity : AppCompatActivity() { lateinit var financialConnectionsSheet: FinancialConnectionsSheet override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) financialConnectionsSheet = FinancialConnectionsSheet.create(this, ::onFinancialConnectionsSheetResult) } fun onFinancialConnectionsSheetResult(result: FinancialConnectionsSheetResult) { // implemented in the next steps } } ``` Rufen Sie als Nächstes das *Client-Geheimnis* (A client secret is used with your publishable key to authenticate a request for a single object. Each client secret is unique to the object it's associated with) der `FinancialConnectionsSession` und den veröffentlichbaren Schlüssel von dem im vorherigen Schritt erstellten Endpoint ab. Legen Sie diese Felder mit der [FinancialConnectionsSheet.Configuration](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet/-configuration/index.html) fest und speichern Sie die anderen zur Verwendung, wenn Sie das [FinancialConnectionsSheet](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet/index.html) anzeigen. #### Kotlin ```kotlin import com.stripe.android.financialconnections.FinancialConnectionsSheet// Add the following lines to build.gradle to use this example's networking library: // implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1' import com.github.kittinunf.fuel.httpPost import com.github.kittinunf.fuel.json.responseJson import com.github.kittinunf.result.Result class MyHostActivity : AppCompatActivity() { lateinit var financialConnectionsSheet: FinancialConnectionsSheetlateinit var clientSecret: String lateinit var publishableKey: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) financialConnectionsSheet = FinancialConnectionsSheet.create(this, ::onFinancialConnectionsSheetResult)"Your backend endpoint/connections-sheet".httpPost().responseJson { _, _, result -> if (result is Result.Success) { val responseJson = result.get().obj() clientSecret = responseJson.getString("financialConnectionsSessionClientSecret") publishableKey = responseJson.getString("publishableKey") } } } fun onFinancialConnectionsSheetResult(result: FinancialConnectionsSheetResult) { // implemented in the next steps } } ``` Wenn der/die Kund/in auf Ihre Schaltfläche **Finanzkonto verbinden** tippt, rufen Sie [FinancialConnectionsSheet#present](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet/present.html) auf, um das Financial Connections-Formular anzuzeigen. Nachdem der/die Kund/in die Verbindung eingerichtet hat, wird das Formular geschlossen. Der [FinancialConnectionsSheetResultCallback](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet-result-callback/index.html), den Sie im vorherigen Schritt deklariert haben, wird mit [FinancialConnectionsSheetResult](https://stripe.dev/stripe-android/financial-connections/com.stripe.android.financialconnections/-financial-connections-sheet-result/index.html) aufgerufen. #### Kotlin ```kotlin // ... class MyHostActivity : AppCompatActivity() { lateinit var financialConnectionsSheet: FinancialConnectionsSheet lateinit var clientSecret: String lateinit var publishableKey: String // ...fun presentFinancialConnectionsSheet() { financialConnectionsSheet.present( configuration = FinancialConnectionsSheet.Configuration( financialConnectionsSessionClientSecret = clientSecret, publishableKey = publishableKey ) ) } fun onFinancialConnectionsSheetResult(result: FinancialConnectionsSheetResult) {when(result) { is FinancialConnectionsSheetResult.Canceled -> { print("Canceled") } is FinancialConnectionsSheetResult.Failed -> { print("Failed") print("${result.error}") } is FinancialConnectionsSheetResult.Completed -> { // Display for example, a list of accounts. val accountInfos = result.financialConnectionsSession.accounts.data .map { "${it.institutionName} ${it.last4}" } print("Completed with ${accountInfos.joinToString("\n")} accounts") } } } } ``` ## Daten für ein Financial Connections-Konto abrufen [Serverseitig] Nachdem Ihr/e Nutzer/in das Authentifizierungsverfahren erfolgreich abgeschlossen hat, greifen Sie auf die Kontodaten zu, die Sie im Parameter `permissions` der Financial Connections-Sitzung angegeben haben, oder aktualisieren Sie diese. Um die Privatsphäre der Daten Ihrer Nutzer/innen zu schützen, sind die für Sie zugänglichen Kontodaten auf die Daten beschränkt, die Sie im Parameter `permissions` angegeben haben. Beachten Sie die Leitfäden für [Salden](https://docs.stripe.com/financial-connections/balances.md), [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) und [Transaktionen](https://docs.stripe.com/financial-connections/transactions.md), um mit dem Abrufen von Kontodaten zu beginnen. ## Optional: Formular anpassen [Clientseitig] ### Dunkelmodus Standardmäßig passt sich `FinancialConnectionsSheet`automatisch an die systemweiten Einstellungen für das Erscheinungsbild des Nutzers/der Nutzerin an (heller und dunkler Modus). Sie können dies ändern, indem Sie in Ihrer App den Hell- oder Dunkelmodus einrichten: #### Kotlin ```kotlin // force dark AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // force light AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) ``` ## Optional: ACH-Lastschriftzahlung von einem Financial Connections-Konto akzeptieren Sie können optional ACH-Lastschriftzahlungen auf einem zuvor erfassten Financial Connections-Konto akzeptieren, solange das Attribut `supported_payment_method_types` des Kontos `us_bank_account` enthält. Nur US-Bankkonten können ACH-Lastschriften akzeptieren, beispielsweise Giro- oder Sparkonten. Um eine ACH-Lastschriftzahlung für ein zuvor erfasstes Konto zu akzeptieren, müssen Sie in der Financial Connections-Sitzung `payment_method` im Parameter [data permissions](https://docs.stripe.com/financial-connections/fundamentals.md#data-permissions) angegeben haben. ### Payment Intent oder Setup Intent erstellen Verwenden Sie die *Payment Intents API* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods), um eine ACH-Lastschriftzahlung für ein Konto zu akzeptieren, das Sie jetzt belasten möchten. Verwenden Sie die *Setup Intents API* (The Setup Intents API lets you build dynamic flows for collecting payment method details for future payments. It tracks the lifecycle of a payment setup flow and can trigger additional authentication steps if required by law or by the payment method), um Daten für zukünftige ACH-Lastschriftzahlungen zu speichern. [Erfahren Sie mehr über den Unterschied zwischen](https://support.stripe.com/questions/payment-intents-api-vs-setup-intents-api) einem Payment Intent und einem Setup Intent. Dieser Pfad zeigt Ihnen, wie Sie eine ACH-Lastschriftzahlung mit der Payment Intents API akzeptieren können. Verwenden Sie die Konto-ID von Financial Connections und die ID des Kunden/der Kundin, um einen Payment Intent zu erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d "payment_method_data[us_bank_account][financial_connections_account]={{FINANCIALCONNECTIONSACCOUNT_ID}}" \ -d "payment_method_data[type]=us_bank_account" \ -d "payment_method_data[billing_details][name]=J. Customer" \ -d amount=100 \ -d currency=usd ``` Dadurch wird ein Payment Intent ähnlich dem Folgenden zurückgegeben: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_details": { "tip": { "amount": null } }, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "confirmation_method": "automatic", "created": 1651010665, "currency": "usd", "customer": null, "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "requires_confirmation", "transfer_data": null, "transfer_group": null } ``` ### Mandatsbestätigung erfassen und die Zahlung übermitteln Bevor Sie die Zahlung veranlassen können, müssen Sie eine Zahlungsautorisierung von Ihrem/Ihrer Kund/in einholen, indem Sie Mandatsbedingungen anzeigen, denen er/sie zustimmen muss. Um die Nacha-Regeln einzuhalten, müssen Sie eine Autorisierung von Ihrem Kunden/Ihrer Kundin einholen, bevor Sie die Zahlung veranlassen können. Dies tun Sie durch Anzeigen von Mandatskonditionen, denen der Kunde/die Kundin zustimmen muss. Weitere Informationen finden Sie unter [Mandate](https://docs.stripe.com/payments/ach-direct-debit.md#mandates). ### Payment Intent bestätigen Um diesen Payment Intent zu bestätigen, müssen Sie entweder einen [`mandate`-Parameter](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate) mit einer bestehenden Mandats-ID oder [mandate_data](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-mandate_data) zum Erstellen eines neuen Mandats angeben. Wenn Sie beispielsweise eine Bezahlseite mit der Schaltfläche „Bestellung aufgeben“ haben, kann durch Klicken auf diese Schaltfläche ein `POST` an einen Endpoint auf Ihrem Server ausgelöst werden. Dieser Endpoint kann den Nutzer-Agent der Anfrage und die IP-Adresse des Clients extrahieren und dann die folgende Anfrage an die API von Stripe senden: ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ -d "mandate_data[customer_acceptance][accepted_at]=1647448692" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=71.183.194.54" \ --data-urlencode "mandate_data[customer_acceptance][online][user_agent]=Mozilla/5.0 ..." ``` Nach der erfolgreichen Bestätigung des Payment Intent sieht dieser ähnlich dem Folgenden aus: ```json { "id": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ { "id": "py_17F8CPDyDglZKgWE3uzOAUe9", "object": "charge", "amount": 100, "amount_captured": 100, "amount_refunded": 0, "application": null, "application_fee": null, "application_fee_amount": null, "balance_transaction": null, "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null, "state": null }, "email": null, "name": "J. Customer", "phone": null }, "calculated_statement_descriptor": null, "captured": true, "created": 1647448692, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "destination": null, "dispute": null, "disputed": false, "failure_code": null, "failure_message": null, "fraud_details": { }, "invoice": null, "livemode": false, "metadata": { }, "on_behalf_of": null, "order": null, "outcome": null, "paid": false, "payment_intent": "pi_1GszXf2eZvKYlo2Ce7rjvnPP", "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "STRIPE TEST BANK", "fingerprint": "QnXqpAeqjjh8pPFa", "last4": "6789", "routing_number": "110000000" } }, "receipt_email": null, "receipt_number": null, "receipt_url": null, "refunded": false, "refunds": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/charges/py_17F8CPDyDglZKgWE3uzOAUe9/refunds" }, "review": null, "shipping": null, "source": null, "source_transfer": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "pending", "transfer_data": null, "transfer_group": null } ], "has_more": false, "total_count": 1, "url": "/v1/charges?payment_intent=pi_1GszXf2eZvKYlo2Ce7rjvnPP" }, "client_secret": "pi_1GszXf2eZvKYlo2Ce7rjvnPP_secret_m38BKZvm3vSdpGdra360hPEov", "confirmation_method": "automatic", "created": 1647447792, "currency": "usd", "customer": "cus_LKe65xcPnrCiTZ", "description": null, "invoice": null, "last_payment_error": null, "livemode": false, "metadata": { }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1Mb4UkJGNKiWrCEmJ1PS72Cd", "payment_method_options": { "us_bank_account": { "verification_method": "automatic" } }, "payment_method_types": [ "us_bank_account" ], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "processing", "transfer_data": null, "transfer_group": null } ``` Beim ACH-Lastschriftverfahren handelt es sich um eine *Zahlungsmethode mit verzögerter Benachrichtigung* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods). Das bedeutet, dass es bis zu vier Werktage dauern kann, bis Sie nach Initiierung der Lastschrift für das Konto Ihres/Ihrer Kund/in eine Mitteilung über eine erfolgreiche oder fehlgeschlagene Zahlung erhalten. Der von Ihnen erstellte PaymentIntent befindet sich zunächst im Status `processing`. Wenn die Zahlung erfolgreich war, wird der Status des PaymentIntent von `processing` in `succeeded` geändert. Erfahren Sie mehr über die Ereignisse, die gesendet werden, wenn der [PaymentIntent-Status aktualisiert wird](https://docs.stripe.com/payments/ach-direct-debit/accept-a-payment.md#web-confirm-paymentintent-succeeded). Available in: US Sie sind sich nicht sicher, welche Financial Connections-Integration Sie verwenden sollen? Sehen Sie sich unsere [Übersicht der Integrationsoptionen](https://docs.stripe.com/financial-connections/use-cases.md) an. Mit Financial Connections können Ihre Nutzer/innen ihre Finanzdaten sicher teilen, indem sie ihre externen Finanzkonten mit Ihrem Unternehmen verknüpfen. Sie können Financial Connections verwenden, um auf von den Nutzer/innen freigegebene Finanzdaten zuzugreifen, wie zum Beispiel tokenisierte Konto- und Routingnummern, Kontoguthaben, Angaben zum Inhaber/zur Inhaberin des Kontos und historische Transaktionen. Einige gängige Beispiele dafür, wie Sie Financial Connections nutzen können, um das Produkterlebnis für Ihre Nutzer/innen zu verbessern: - Verringern Sie Betrug beim Onboarding eines Kunden/einer Kundin oder eines Unternehmens, indem Sie die Angaben zur [Inhaberschaft](https://docs.stripe.com/financial-connections/ownership.md) eines Kontos, wie den Namen und die Adresse der Bankkontoinhaber/innen verifizieren. - Hilft Ihren Nutzern und Nutzerinnen Ausgaben zu verfolgen, Rechnungen zu bearbeiten, ihre Finanzen zu verwalten und mit [Transaktionsdaten](https://docs.stripe.com/financial-connections/transactions.md) die Kontrolle über ihr finanzielles Wohlergehen zu übernehmen. - Beschleunigung der Risikoevaluation und Verbesserung des Zugangs zu Krediten und anderen Finanzdienstleistungen mit Transaktionen und Saldodaten. - Mit Enable können Ihre Nutzer/innen ihre Konten in wenigen Schritten mit Link verknüpfen. So können sie ihre Bankkontodaten bei Stripe-Unternehmen speichern und wiederverwenden. ## Stripe einrichten [Serverseitig] [Clientseitig] ### Serverseitig Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe-API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [React Native SDK](https://github.com/stripe/stripe-react-native) ist Open Source und vollständig dokumentiert. Intern werden [native iOS](https://github.com/stripe/stripe-ios) und [Android](https://github.com/stripe/stripe-android) SDKs verwendet. Um das React Native SDK von Stripe zu installieren, führen Sie einen der folgenden Befehle im Verzeichnis Ihres Projekts aus (je nachdem, welchen Paket-Manager Sie verwenden): #### yarn ```bash yarn add @stripe/stripe-react-native ``` #### npm ```bash npm install @stripe/stripe-react-native ``` Installieren Sie als Nächstes einige weitere erforderliche Abhängigkeiten: - Für iOS wechseln Sie in das Verzeichnis **ios** und führen Sie `pod install` aus, um sicherzustellen, dass Sie auch die erforderlichen nativen Dependencies installiert haben. - Für Android müssen keine Abhängigkeiten mehr installiert werden. > Wir empfehlen Ihnen, die [offizielle Anleitung zu TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) zu befolgen, um TypeScript zu unterstützen. ### Stripe Initialisierung Um Stripe in Ihrer React Native-App zu initialisieren, umschließen Sie entweder Ihren Zahlungsbildschirm mit der Komponente `StripeProvider` oder verwenden Sie die Initialisierungsmethode `initStripe`. Nur der [veröffentlichbare API-Schlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) in `publishableKey` ist erforderlich. Das folgende Beispiel zeigt, wie Stripe mithilfe der Komponente `StripeProvider` initialisiert wird. ```jsx import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( {/* Your app code here */} ); } ``` > Verwenden Sie Ihre API-[Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App. ## Kontoinhaber/in erstellen oder abrufen [Serverseitig] Erstellen Sie ein [Kundenobjekt](https://docs.stripe.com/api/customers/object.md), wenn Nutzer/innen ein Konto bei Ihrem Unternehmen erstellen. Durch die Angabe einer E-Mail-Adresse kann Financial Connections den [Authentifizierungsablauf](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) optimieren, indem es für wiederkehrende [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses)-Nutzer/innen dynamisch eine optimierte Nutzeroberfläche anzeigt. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d email={{CUSTOMER_EMAIL}} \ -d name={{CUSTOMER_NAME}} ``` ## Financial Connections-Sitzung erstellen [Serverseitig] > Eine laufende Implementierung dieses Endpoints für schnelle Tests ist [auf Glitch verfügbar](https://glitch.com/edit/#!/remix/stripe-mobile-connections-example). Bevor Sie mit Financial Connections Daten vom Bankkonto eines Nutzers/einer Nutzerin abrufen können, muss Ihr/e Nutzer/in sein/ihr Konto über den [Authentifizierungsvorgang](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow) authentifizieren. {% ignore-validation terms=[“Link”] reason="Allgemeiner Linktext für eine Schaltflächenbeschriftung, nicht für das Zahlungsprodukt Link. %}Ihr/e Nutzer/in startet den Authentifizierungsablauf, wenn er sein Konto mit Ihrer Website oder Anwendung verknüpfen möchte. Fügen Sie auf Ihrer Website oder in Ihrer Anwendung eine Schaltfläche oder einen Link ein, über den ein Nutzer sein Konto verknüpfen kann – Ihre Schaltfläche könnte beispielsweise die Aufschrift „Bankkonto verknüpfen“ tragen. Erstellen Sie eine Financial Connections-Sitzung, indem Sie sie unter `/v1/financial_connections/sessions` angeben: ```curl curl https://api.stripe.com/v1/financial_connections/sessions \ -u "<>:" \ -d "account_holder[type]=customer" \ -d "account_holder[customer]={{CUSTOMER_ID}}" \ -d "permissions[]=balances" \ -d "permissions[]=ownership" \ -d "permissions[]=payment_method" \ -d "permissions[]=transactions" ``` 1. Legen Sie `account_holder[customer]` auf die Kunden-`id` fest. 1. Legen Sie den Parameter Daten-`permissions` so fest, dass er die für Ihren Use case erforderlichen Daten enthält. 1. (Optional) Legen Sie den Parameter `prefetch` zum Abrufen der Daten bei der Kontoerstellung fest. Der Parameter [Berechtigungen](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-permissions) steuert, auf welche Kontodaten Sie zugreifen können. Sie müssen mindestens eine Berechtigung anfordern. Wenn Sie den Authentifizierungsablauf abschließen, können Ihre Nutzer/innen die Daten sehen, auf die Sie Zugriff beantragt haben, und ihre Zustimmung zur Weitergabe erteilen. Überlegen Sie sorgfältig, welche Daten Sie für Ihren Use Case benötigen und fordern Sie die Berechtigung zum Zugriff nur für die von Ihnen benötigten Daten an. Wenn Sie Berechtigungen anfordern, die über den Umfang Ihrer Anwendung hinausgehen, ist es möglich, dass Nutzer/innen Ihnen nicht mehr volles Vertrauen schenken, da sie sich fragen, wie ihre Daten verwendet werden. Wenn Sie zum Beispiel eine Anwendung für die persönliche Finanzverwaltung oder ein Kreditprodukt entwickeln, möchten Sie möglicherweise die `transactions`-Daten anfordern. Zur Eindämmung von Betrug fordern Sie möglicherweise Details zur `ownership` an. Nachdem Ihre Nutzer/innen ihr Konto authentifiziert haben, können Sie Datenberechtigungen nur erweitern, indem Sie eine neue Financial Connections-Sitzung erstellen und einen neuen Wert im Parameter `permissions` angeben. Ihr/e Nutzer/in muss das Authentifizierungsverfahren erneut durchführen, wobei er/sie die zusätzlichen Daten sieht, für die Sie die Zugriffsberechtigung angefordert haben, und seine/ihre Zustimmung zum Teilen der Daten erteilt. Der optionale [Prefetch-Parameter](https://docs.stripe.com/api/financial_connections/sessions/create.md#financial_connections_create_session-prefetch) steuert, welche Daten Sie unmittelbar nach der Verbindung des Nutzers/der Nutzerin mit seinem/ihren Konto abrufen. Verwenden Sie diese Option, wenn Sie wissen, dass Sie immer eine bestimmte Art von Daten wünschen. So entfällt die Notwendigkeit, einen zusätzlichen API-Aufruf durchzuführen, um eine [Datenaktualisierung zu](https://docs.stripe.com/api/financial_connections/accounts/refresh.md) initiieren. Um die Option zum [Annahme von ACH Direct Debit](https://docs.stripe.com/financial-connections/other-data-powered-products.md#accept-ach-direct-debit) beizubehalten, fordern Sie die Berechtigung `payment_method` an. ## Financial Connections-Konto eröffnen [Client-seitig] Importieren Sie die Funktion `collectFinancialConnectionsAccounts` aus dem React Native SDK von Stripe. ```javascript import {collectFinancialConnectionsAccounts} from '@stripe/stripe-react-native'; ``` Verwenden Sie `collectFinancialConnectionsAccounts`, um das Bankkonto zu erfassen, indem Sie das `client_secret` von oben übergeben, und das Ergebnis dann folgendermaßen behandeln: ```javascript // Assume you have a