# Separate Zahlungen und Überweisungen erstellen Erstellen Sie Zahlungen auf Ihrem Plattformkonto und übertragen Sie die Gelder auf mehrere verbundene Konten. Anweisungen für LLMs: Stripe veröffentlicht regelmäßig neue Produkte und Funktionen. Bitte laden Sie vor der Implementierung die Best Practices für Stripe von https://raw.githubusercontent.com/stripe/ai/refs/heads/main/skills/stripe-best-practices/SKILL.md herunter. Erstellen Sie *separate Zahlungen und Überweisungen* , um Gelder aus einer Zahlung auf mehrere verbundene Konten zu überweisen oder wenn ein/e bestimmte/r Nutzer/in zum Zeitpunkt der Zahlung nicht bekannt ist. Die Zahlung auf Ihrem Plattformkonto wird von den Überweisungen auf Ihre verbundenen Konten entkoppelt. Mit diesem Zahlungstyp gilt: - Sie erstellen eine Zahlung auf dem Konto Ihrer Plattform und übertragen außerdem Gelder auf Ihre verbundenen Konten. Die Zahlung wird auf Ihrem Konto als Abbuchung ausgewiesen und es gibt auch Übertragungen auf verbundene Konten (Betrag wird von Ihnen bestimmt), die von Ihrem Kontoguthaben eingezogen werden. - Sie können Gelder auf mehrere verbundene Konten übertragen. - Ihr Kontoguthaben wird mit Stripe-Gebühren, Rückerstattungen und Rückbuchungen belastet. Dieser Zahlungstyp unterstützt Marktplätze dabei, Zahlungen zwischen mehreren Parteien aufzuteilen. Zum Beispiel eine Essenslieferplattform, die Zahlungen zwischen dem Restaurant und dem Lieferanten aufteilt. > Die Trennung von Geldern ist eine Funktion in der privaten Vorschau, die Gelder für Zahlungen in einem geschützten Zustand hält, bevor Sie sie auf verbundene Konten übertragen. Dadurch wird verhindert, dass zugewiesene Gelder für nicht mit der Plattform zusammenhängende Vorgänge verwendet werden. Wenden Sie sich an Ihren Stripe-Konto, um Zugang zu beantragen. Stripe unterstützt separate Zahlungen und Überweisungen in den folgenden Regionen: - AT - AU - BE - BG - BR - CA - CH - CY - CZ - DE - DK - EE - ES - FI - FR - GB - GR - HR - HU - IE - IT - JP - LI - LT - LU - LV - MT - MX - MY - NL - NO - NZ - PL - PT - RO - SE - SG - SI - SK - US ## Grenzüberschreitende Überweisungen Stripe unterstützt grenzüberschreitende Transfers für den Zahlungssaldo zwischen den USA, Kanada, dem Vereinigten Königreich, dem EWR und der Schweiz. In anderen Szenarien müssen sich Ihre Plattform und jedes verbundenes Konto in derselben Region befinden. Der Versuch der Übertragung von Geldern über nicht unterstützte Grenzen oder Guthaben hinweg gibt einen Fehler zurück. Siehe [Grenzüberschreitende Auszahlungen](https://docs.stripe.com/connect/cross-border-payouts.md) für unterstützte Gelder zwischen anderen Regionen. Transfers dürfen nur in Kombination mit den zulässigen Use Cases für [Zahlungen](https://docs.stripe.com/connect/charges.md), [Aufladungen](https://docs.stripe.com/connect/top-ups.md) und [Gebühren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#collect-fees) verwendet werden. Wir empfehlen, separate Zahlungen und Überweisungen nur dann zu verwenden, wenn Sie für negative Salden Ihrer verbundenen Konten verantwortlich sind. Führen Sie mithilfe von [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) eine Weiterleitung an eine von Stripe gehostete Zahlungsseite durch. Sehen Sie sich diese Integration [im Vergleich zu anderen Integrationstypen von Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability) an. #### Integrationsaufwand Complexity: 2/5 #### Integrationstyp An die von Stripe gehostete Zahlungsseite weiterleiten #### Anpassung der Nutzeroberfläche Eingeschränkte Anpassung - 20 voreingestellte Schriftarten - 3 voreingestellte Rahmenradien - Nutzerdefinierte Hintergrund- und Rahmenfarbe - Individuelles Logo [Jetzt testen](https://checkout.stripe.dev/) [Registrieren Sie sich](https://dashboard.stripe.com/register) zunächst für ein Stripe-Konto. Verwenden Sie unsere offiziellen Bibliotheken, um von Ihrer Anwendung aus auf die Stripe API zuzugreifen: #### 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' ``` ## Checkout-Sitzung erstellen [Clientseitig] [Serverseitig] Über eine [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) wird gesteuert, was die Kundinnen/Kunden auf dem Zahlungsformular sehen, z. B. Positionen, Bestellbetrag und Währung sowie die akzeptierten Zahlungsmethoden. Fügen Sie auf Ihrer Website eine Schaltfläche zum Bezahlen hinzu, die einen serverseitigen Endpoint aufruft, um eine Checkout-Sitzung zu erstellen. ```html Checkout
``` Erstellen Sie auf Ihrem Server eine Checkout-Sitzung und leiten Sie Ihre Kundinnen/Kunden an die in der Antwort zurückgegebene [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) weiter. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \ -d "line_items[0][price_data][unit_amount]"=10000 \ -d "line_items[0][quantity]"=1 \ -d "payment_intent_data[transfer_group]"=ORDER100 \ -d mode=payment \ --data-urlencode success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" ``` - `line_items` – Dieses Attribut stellt die Artikel dar, die der Kunde/die Kundin kauft. Die Artikel werden auf der von Stripe gehosteten Checkout-Seite angezeigt. - `payment_intent_data[transfer_group]` – Verwenden Sie eine eindeutige Zeichenfolge wie `transfer_group`, um Objekte zu identifizieren, die miteinander verknüpft sind. Wenn Stripe automatisch eine Zahlung für einen PaymentIntent mit dem Wert `transfer_group` erstellt, wird derselbe Wert der `transfer_group` der Zahlung zugewiesen. - `success_url` – Stripe leitet den Kunden/die Kundin nach Durchführung einer Zahlung an die Bestätigungs-URL weiter und ersetzt die Zeichenfolge `{CHECKOUT_SESSION_ID}` durch die ID der Checkout-Sitzung. Rufen Sie damit die Checkout-Sitzung ab und prüfen Sie den Status, um zu entscheiden, was Ihrem Kunden/Ihrer Kundin angezeigt werden soll. Sie können auch Ihre eigenen Abfrageparameter anhängen, die während des Weiterleitungsprozesses bestehen bleiben. Weitere Informationen finden Sie unter [Passen Sie das Weiterleitungsverhalten mit einer von Stripe gehosteten Seite an](https://docs.stripe.com/payments/checkout/custom-success-page.md). (See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers) ## Ereignisse nach Zahlung verarbeiten [Serverseitig] Stripe übermittelt ein [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed)-Ereignis, wenn die Zahlung abgeschlossen ist. [Verwenden Sie einen Webhook, um diese Ereignisse zu empfangen](https://docs.stripe.com/webhooks/quickstart.md) und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kundinnen/Kunden, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, anstatt auf einen Callback vom Client zu warten. Auf dem Client könnten die Kundinnen und Kunden das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist. Einige Zahlungsmethoden benötigen auch 2 bis 14 Tage bis zur Zahlungsbestätigung. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie mehrere [Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide) mit einer einzelnen Integration akzeptieren. Stripe empfiehlt, alle folgenden Ereignisse zu verarbeiten, wenn Zahlungen mit Checkout eingezogen werden: | Ereignis | Beschreibung | Nächste Schritte | | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Der Kunde/die Kundin hat die Zahlung nach der Übermittlung des Checkout-Formulars erfolgreich autorisiert. | Warten Sie, bis die Zahlung erfolgt ist oder fehlschlägt. | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Die Kundenzahlung war erfolgreich. | Führen Sie die Bestellung der gekauften Waren oder Dienstleistungen aus. | | [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Die Zahlung wurde abgelehnt oder ist aus einem anderen Grund fehlgeschlagen. | Kontaktieren Sie den Kunden/die Kundin per E-Mail und fordern Sie eine neue Bestellung von ihm/ihr an. | Diese Ereignisse beinhalten alle das [Checkout-Sitzungsobjekt](https://docs.stripe.com/api/checkout/sessions.md). Nach erfolgreicher Zahlung ändert sich der [Status](https://docs.stripe.com/payments/paymentintents/lifecycle.md) des zugrunde liegenden *PaymentIntent* (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) von `processing` in `succeeded` oder in einen Fehlerstatus. ## Transfer erstellen [Serverseitig] Senden Sie auf Ihrem Server Gelder von Ihrem Konto zu einem verbundenen Konto, indem Sie eine [Übertragung](https://docs.stripe.com/api/transfers/create.md) erstellen und die verwendete `transfer_group` angeben. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=7000 \ -d currency=usd \ -d destination="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` Transfer und Zahlungsbeträge müssen nicht übereinstimmen. Sie können eine einzelne Zahlung auf mehrere Übertragungen aufteilen oder mehrere Zahlungen in eine einzelne Übertragung einbeziehen. Im folgenden Beispiel wird eine zusätzliche Übertragung erstellt, die der gleichen `transfer_group` zugeordnet ist. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=2000 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ### Überweisungsoptionen Sie können der Zeichenfolge `transfer_group` einen beliebigen Wert zuweisen, solange dieser für einen einzelnen Geschäftsvorgang steht. Zudem können Sie Überweisungen ohne zugehörige Zahlung oder Angabe einer `transfer_group` durchführen, zum Beispiel wenn Sie einen Dienstleister bezahlen müssen und diesem Vorgang keine Kundenzahlung zugrunde liegt. > Die `transfer_group` identifiziert nur zugehörige Objekte. Sie hat keine Auswirkungen auf die Standardfunktionalität. Um zu verhindern, dass eine Übertragung ausgeführt wird, bevor die Gelder aus der zugehörigen Zahlung verfügbar sind, verwenden Sie das Attribut `source_transaction` der Überweisung. Standardmäßig schlägt eine Übertragungsanfrage fehl, wenn der Betrag das [verfügbare Kontoguthaben](https://docs.stripe.com/connect/account-balances.md) der Plattform übersteigt. Stripe wiederholt fehlgeschlagene Übertragungsanfragen nicht automatisch. Sie können fehlgeschlagene Übertragungsanfragen für Übertragungen vermeiden, die mit Zahlungen verbunden sind. Wenn Sie die zugehörige Zahlung [als source_transaction der Überweisung](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability) angeben, ist die Übertragungsanfrage automatisch erfolgreich. Die Übertragung erfolgt jedoch erst, wenn die Gelder aus dieser Zahlung auf dem Plattformkonto verfügbar sind. > Wenn Sie separate Zahlungen und Überweisungen verwenden, berücksichtigen Sie dies bei der Planung Ihres *Auszahlungs* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit)-Plans. Automatische Auszahlungen können Transfers stören, für die keine `source_transaction` definiert ist. ### Asynchrone Zahlungsmethoden Wenn Sie *asynchrone Zahlungsmethoden* (wie ACH Debit oder SEPA Debit) verwenden, warten Sie auf das Ereignis [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), bevor Sie eine Übertragung erstellen. Im Gegensatz zu Destination Charges storniert Stripe eine Übertragung nicht automatisch, wenn die zugehörige asynchrone Zahlung fehlschlägt. Wenn Sie eine Übertragung erstellen und die Zahlung anschließend fehlschlägt, wird das Guthaben Ihrer Plattform mit dem Übertragungsbetrag belastet. Sie müssen dann manuell [die Übertragung stornieren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers), um die Geldmittel zurückzuerhalten. ## Integration testen #### Karten | Kartennummer | Szenario | So führen Sie den Test durch | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000002500003155 | Für die Kartenzahlung ist eine *Authentifizierung* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000000000009995 | Die Karte wird mit einem Ablehnungscode wie `insufficient_funds` abgelehnt. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 6205500000000000004 | Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | #### Digitale Geldbörsen (Wallets) | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Alipay | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [sofortiger Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | #### Bankumleitungen | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | BECS-Lastschriftverfahren | Ihr/e Kund/in zahlt erfolgreich mit dem BECS-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `900123456` und BSB `000000` aus. Der bestätigte PaymentIntent geht zunächst in den Status `processing` über und dann 3 Minuten später in den Status `succeeded`. | | BECS-Lastschriftverfahren | Die Zahlung Ihres/Ihrer Kund/in schlägt fehl mit Code `account_closed` fehl. | Füllen Sie das Formular mit der Kontonummer `111111113` und BSB `000000` aus. | | Bancontact, EPS, iDEAL und Przelewy24 | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit sofortiger Benachrichtigung nicht authentifizieren. | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | Pay by Bank | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | | Pay by Bank | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit verzögerter Benachrichtigung nicht authentifizieren. | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | BLIK | BLIK-Zahlungen können aus verschiedenen Gründen fehlschlagen. Es gibt sofortige Fehler (der Code ist abgelaufen oder ungültig), verzögerte Fehler (die Bank lehnt ab) oder Zeitüberschreitungen (der/die Kund/in hat nicht rechtzeitig reagiert). | Verwenden Sie E-Mail-Muster, um [die verschiedenen Fehler zu simulieren](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Banklastschriften | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SEPA-Lastschrift | Ihr/e Kund/in zahlt erfolgreich mit dem SEPA-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `AT321904300235473204` aus. Die bestätigte PaymentIntent geht zunächst in den Status „wird verarbeitet“ und dann drei Minuten später in den Status „erfolgreich“ über. | | SEPA-Lastschrift | Der Status der PaymentIntent Ihres/Ihrer Kund/in wechselt von `processing` zu `requires_payment_method`. | Füllen Sie das Formular mit der Kontonummer `AT861904300235473202` aus. | #### Gutscheine | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | | Boleto, OXXO | Ihr/e Kund/in bezahlt mit einem Boleto- oder OXXO-Gutschein. | Wählen Sie als Zahlungsmethode Boleto oder OXXO aus und übermitteln Sie die Zahlung. Schließen Sie das OXXO-Dialogfeld, nachdem es angezeigt wurde. | Hier finden Sie weitere Informationen zum [Testen](https://docs.stripe.com/testing.md) Ihrer Integration. ## Optional: Weitere Zahlungsmethoden aktivieren Navigieren Sie im Dashboard zu [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), um zu konfigurieren, welche Zahlungsmethoden Ihre verbundenen Konten akzeptieren. Änderungen an den Standardeinstellungen gelten für alle neuen und bestehenden verbundenen Konten. Informationen zu den Zahlungsmethoden finden Sie in den folgenden Ressourcen: - [Ein Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business), der Ihnen bei der Auswahl der richtigen Zahlungsmethoden für Ihre Plattform hilft. - [Kontofunktionen](https://docs.stripe.com/connect/account-capabilities.md), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre verbundenen Konten funktionieren. - [Zahlungsmethode und Produktsupport](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre Stripe-Produkte und Zahlungsabläufe geeignet sind. Für jede Zahlungsmethode können Sie eine der folgenden Dropdown-Optionen wählen: | | | | | **Standardmäßig aktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang. Einige Zahlungsmethoden können nur deaktiviert oder gesperrt werden. Dies liegt daran, dass Ihre verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) sie auf ihrer Seite mit Einstellungen aktivieren müssen. | | **Standardmäßig deaktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie die Möglichkeit, sie zu aktivieren. | | **Blockiert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie nicht die Möglichkeit, sie zu aktivieren. | ![Dropdown-Optionen für Zahlungsmethoden, die jeweils eine verfügbare Option anzeigen (blockiert, standardmäßig aktiviert, standardmäßig deaktiviert)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Optionen für Zahlungsmethoden Wenn Sie eine Änderung an einer Zahlungsmethode vornehmen, müssen Sie auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und auf **Speichern und anwenden**, um Ihre verbundenen Konten zu aktualisieren. ![Dialogfeld, das nach dem Klicken auf die Schaltfläche „Speichern“ angezeigt wird, mit einer Liste der Änderungen, die der/die Nutzer/in geändert hat](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Dialogfeld „Speichern“ ### Verbundenen Konten die Verwaltung von Zahlungsmethoden gestatten Stripe empfiehlt, dass Sie Ihren verbundenen Konten erlauben, ihre eigenen Zahlungsmethoden anzupassen. Diese Option ermöglicht jedem verbundenen Konto mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API), seine Seite mit den [Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) anzuzeigen und zu aktualisieren. Nur Inhaber/innen der verbundenen Konten können ihre Zahlungsmethoden anpassen. Das Stripe-Dashboard zeigt die Standard-Zahlungsmethoden an, die Sie auf alle neuen und bestehenden verbundenen Konten angewendet haben. Ihre verbundenen Konten können diese Standardeinstellungen außer Kraft setzen, mit Ausnahme der von Ihnen blockierten Zahlungsmethoden. Aktivieren Sie das Kontrollkästchen **Anpassung des Kontos**, um diese Option zu aktivieren. Sie müssen auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und dann **Speichern und übernehmen** auswählen, um diese Einstellung zu aktualisieren. ![Screenshot des Kontrollkästchens, das aktiviert werden muss, wenn Inhaber/innen verbundener Konten das Anpassen von Zahlungsmethoden gestattet ist](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Kontrollkästchen „Anpassung des Kontos“ ### Funktionen der Zahlungsmethode Damit Ihre verbundenen Konten zusätzliche Zahlungsmethoden akzeptieren können, müssen deren `Accounts` über aktive Zahlungsmethoden verfügen. Wenn Sie unter [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) die Option „Standardmäßig aktiviert“ für eine Zahlungsmethode ausgewählt haben, fordert Stripe automatisch die erforderliche Funktion für neue und bestehende verbundene Konten an, sofern diese die Verifizierungsanforderungen erfüllen. Wenn das verbundene Konto die Anforderungen nicht erfüllt oder Sie die direkte Kontrolle behalten möchten, können Sie die Funktion manuell im Dashboard oder über die API anfordern. Die meisten Zahlungsmethoden haben die gleichen Verifizierungsanforderungen wie die `card_payments`-Funktion, mit einigen Einschränkungen und Ausnahmen. Die [Tabelle der Zahlungs­methoden­funktionen](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) führt die Zahlungsmethoden auf, die eine zusätzliche Verifizierung erfordern. #### Dashboard [Suchen Sie im Dashboard ein verbundenes Konto](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts), um dessen Funktionen zu bearbeiten und ausstehende Verifizierungsanforderungen einzusehen. #### API Für ein bestehendes verbundenes Konto können Sie die vorhandenen Funktionen [auflisten](https://docs.stripe.com/api/capabilities/list.md), um festzustellen, ob Sie zusätzliche Funktionen anfordern müssen. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Fordern Sie zusätzliche Funktionen an, indem Sie die Funktionen jedes verbundenen Kontos [aktualisieren](https://docs.stripe.com/api/capabilities/update.md). ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Es kann zu einer Verzögerung kommen, bevor die angeforderte Funktion aktiv wird. Wenn für die Funktion Aktivierungsanforderungen gelten, enthält die Antwort diese in den `requirements`-Arrays. ## Abwicklungshändler angeben Der Abwicklungshändler ist abhängig von den [Funktionen](https://docs.stripe.com/connect/account-capabilities.md), die für ein Konto eingerichtet sind, und davon, wie eine Zahlung erstellt wird. Der Abwicklungshändler bestimmt, wessen Informationen für die Durchführung der Zahlung verwendet werden. Dazu gehört die Zahlungsbeschreibung in der Abrechnung (entweder die der Plattform oder die des verbundenen Kontos), die auf dem Kreditkarten- oder Kontoauszug des Kunden/der Kundin für diese Zahlung angezeigt wird. Durch die Angabe des Abwicklungshändlers können Sie genauer festlegen, für wen Zahlungen erstellt werden sollen. Einige Plattformen sind beispielsweise vorzugsweise der Abwicklungshändler, da Kundinnen/Kunden direkt mit ihrer Plattform interagieren (zum Beispiel On-Demand-Plattformen). Manche Plattformen verfügen jedoch über verbundene Konten, die stattdessen direkt mit Kundinnen/Kunden interagieren (zum Beispiel ein Ladengeschäft auf einer E-Commerce-Plattform). Bei diesen Szenarien ist es möglicherweise sinnvoller, wenn das verbundene Konto der Abwicklungshändler ist. Sie können den Parameter `on_behalf_of` auf die ID eines verbundenen Kontos setzen, um dieses Konto zum Abwicklungshändler für die Zahlung zu machen. Bei Verwendung von `on_behalf_of`: - Zahlungen werden im Land und in der *Abwicklungswährung* (The settlement currency is the currency your bank account uses) des verbundenen Kontos *abgewickelt* (When funds are available in your Stripe balance). - Es wird die Gebührenstruktur für das Land des verbundenen Kontos verwendet. - Die Zahlungsbeschreibung des verbundenen Kontos wird auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wenn sich das verbundene Konto in einem anderen Land als die Plattform befindet, werden die Adresse und die Telefonnummer des verbundenen Kontos auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wie viele Tage ein [ausstehendes Guthaben](https://docs.stripe.com/connect/account-balances.md) vor der Auszahlung zurückgehalten wird, hängt von der Einstellung [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) auf dem verbundenen Konto ab. > #### Accounts v2 API > > Sie können die Accounts v2 API nicht zur Verwaltung der Auszahlungseinstellungen verwenden. Bitte nutzen Sie die Accounts v1 API. Wenn `on_behalf_of` weggelassen wird, ist die Plattform das für die Zahlung verantwortliche Unternehmen. > Der Parameter `on_behalf_of` wird nur für verbundene Konten mit Zahlungsfunktionen wie [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments) unterstützt. Konten, denen der [Empfänger-Rahmenvertrag](https://docs.stripe.com/connect/service-agreement-types.md#recipient) zugrunde liegt, können keine `card_payments` oder andere Zahlungsfunktionen anfordern. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \ -d "line_items[0][price_data][unit_amount]"=10000 \ -d "line_items[0][quantity]"=1 \ -d "payment_intent_data[on_behalf_of]"="{{CONNECTEDACCOUNT_ID}}" \ -d "payment_intent_data[transfer_group]"=ORDER100 \ -d mode=payment \ --data-urlencode success_url="https://example.com/success" ``` Betten Sie mit [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) ein vorgefertigtes Zahlungsformular auf Ihrer Website ein. Sehen Sie sich diese Integration [im Vergleich zu anderen Integrationstypen von Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability) an. #### Integrationsaufwand Complexity: 2/5 #### Integrationstyp Vorgefertigtes Zahlungsformular auf Ihrer Website einbetten #### Anpassung der Nutzeroberfläche Eingeschränkte Anpassung - 20 voreingestellte Schriftarten - 3 voreingestellte Rahmenradien - Nutzerdefinierte Hintergrund- und Rahmenfarbe - Individuelles Logo [Registrieren Sie sich](https://dashboard.stripe.com/register) zunächst für ein Stripe-Konto. Verwenden Sie unsere offiziellen Bibliotheken, um von Ihrer Anwendung aus auf die Stripe API zuzugreifen: #### 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' ``` ## Checkout-Sitzung erstellen [Clientseitig] [Serverseitig] Über eine [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) wird gesteuert, was die Kundinnen/Kunden auf dem integrierbaren Zahlungsformular sehen, z. B. Posten, den Bestellbetrag und die Währung. Erstellen Sie eine Checkout-Sitzung in einem serverseitigen Endpoint (zum Beispiel `/create-checkout-session`). Die Antwort enthält ein `client_secret`, das Sie im nächsten Schritt zur Bereitstellung von Checkout verwenden. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \ -d "line_items[0][price_data][unit_amount]"=10000 \ -d "line_items[0][quantity]"=1 \ -d "payment_intent_data[transfer_group]"=ORDER100 \ -d mode=payment \ -d ui_mode=embedded \ --data-urlencode return_url="https://example.com/return?session_id={CHECKOUT_SESSION_ID}" ``` - `line_items` – Dieses Atribut stellt die Artikel dar, die der Kunde/die Kundin kauft. Die Artikel werden im eingebetteten Zahlungsformular angezeigt. - `payment_intent_data[transfer_group]` – Verwenden Sie eine eindeutige Zeichenfolge wie `transfer_group`, um Objekte zu identifizieren, die miteinander verknüpft sind. Wenn Stripe automatisch eine Zahlung für einen PaymentIntent mit dem Wert `transfer_group` erstellt, wird derselbe Wert der `transfer_group` der Zahlung zugewiesen. - `return_url` – Stripe leitet den Kunden/die Kundin nach Durchführung eines Zahlungsversuchs an die Rückgabe-URL weiter und ersetzt die Zeichenfolge `{CHECKOUT_SESSION_ID}` durch die ID der Checkout-Sitzung. Rufen Sie damit die Checkout-Sitzung ab und prüfen Sie den Status, um zu entscheiden, was Ihrem Kunden/Ihrer Kundin angezeigt werden soll. Vergewissern Sie sich, dass die Rückgabe-URL einer Seite auf Ihrer Website entspricht, die den Status der Zahlung zeigt. Sie können auch Ihre eigenen Abfrageparameter anhängen, die während des Weiterleitungsprozesses bestehen bleiben. Weitere Informationen finden Sie unter [Passen Sie das Weiterleitungsverhalten mit einem integrierten Formular an](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form). (See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers) ## Checkout verbinden [Clientseitig] #### HTML + JS Checkout ist als Teil von [Stripe.js](https://docs.stripe.com/js.md) verfügbar. Nehmen Sie das Stripe.js-Skript in Ihre Seite auf, indem Sie es zum Header Ihrer HTML-Datei hinzufügen. Als Nächstes erstellen Sie einen leeren DOM-Knoten (Container), der zum Verbinden verwendet wird. ```html
``` Initialisieren Sie Stripe.js mit Ihrem veröffentlichbaren API-Schlüssel. Übergeben Sie das `client_secret` aus dem vorherigen Schritt an `options`, wenn Sie die Checkout-Instanz erstellen: ```javascript // Initialize Stripe.js const stripe = Stripe('<>'); initialize(); // Fetch Checkout Session and retrieve the client secret async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Initialize Checkout const checkout = await stripe.initEmbeddedCheckout({ fetchClientSecret, }); // Mount Checkout checkout.mount('#checkout'); } ``` #### React Installieren Sie Bibliotheken von Connect.js und die React Connect.js aus der [öffentlichen Registry von npm](https://www.npmjs.com/package/@stripe/react-connect-js). ```bash npm install --save @stripe/connect-js @stripe/react-connect-js ``` Um die eingebettete Checkout-Komponente zu verwenden, erstellen Sie einen `EmbeddedCheckoutProvider`. Rufen Sie `loadStripe` mit Ihrem veröffentlichbaren API-Schlüssel auf und übergeben Sie das zurückgegebene `Promise` an den Anbieter. Verwenden Sie die vom Anbieter akzeptierte Eigenschaft `options`, um das `client_secret` aus dem vorherigen Schritt zu übergeben. ```jsx import * as React from 'react'; import {loadStripe} from '@stripe/stripe-js'; import { EmbeddedCheckoutProvider, EmbeddedCheckout } from '@stripe/react-stripe-js'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); const App = ({clientSecret}) => { const options = {clientSecret}; return ( ) } ``` Checkout wird in einem iFrame gerendert, der Zahlungsinformationen über eine sichere HTTPS-Verbindung an Stripe sendet. Vermeiden Sie es, Checkout in einem anderen iFrame zu platzieren, da einige Zahlungsmethoden die Weiterleitung an eine gesonderte Seite zur Zahlungsbestätigung voraussetzen. ## Ereignisse nach Zahlung verarbeiten [Serverseitig] Stripe übermittelt ein [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed)-Ereignis, wenn die Zahlung abgeschlossen ist. [Verwenden Sie einen Webhook, um diese Ereignisse zu empfangen](https://docs.stripe.com/webhooks/quickstart.md) und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kundinnen/Kunden, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, anstatt auf einen Callback vom Client zu warten. Auf dem Client könnten die Kundinnen und Kunden das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist. Einige Zahlungsmethoden benötigen auch 2 bis 14 Tage bis zur Zahlungsbestätigung. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie mehrere [Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide) mit einer einzelnen Integration akzeptieren. Stripe empfiehlt, alle folgenden Ereignisse zu verarbeiten, wenn Zahlungen mit Checkout eingezogen werden: | Ereignis | Beschreibung | Nächste Schritte | | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Der Kunde/die Kundin hat die Zahlung nach der Übermittlung des Checkout-Formulars erfolgreich autorisiert. | Warten Sie, bis die Zahlung erfolgt ist oder fehlschlägt. | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Die Kundenzahlung war erfolgreich. | Führen Sie die Bestellung der gekauften Waren oder Dienstleistungen aus. | | [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Die Zahlung wurde abgelehnt oder ist aus einem anderen Grund fehlgeschlagen. | Kontaktieren Sie den Kunden/die Kundin per E-Mail und fordern Sie eine neue Bestellung von ihm/ihr an. | Diese Ereignisse beinhalten alle das [Checkout-Sitzungsobjekt](https://docs.stripe.com/api/checkout/sessions.md). Nach erfolgreicher Zahlung ändert sich der [Status](https://docs.stripe.com/payments/paymentintents/lifecycle.md) des zugrunde liegenden *PaymentIntent* (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) von `processing` in `succeeded` oder in einen Fehlerstatus. ## Transfer erstellen [Serverseitig] Senden Sie auf Ihrem Server Gelder von Ihrem Konto zu einem verbundenen Konto, indem Sie eine [Übertragung](https://docs.stripe.com/api/transfers/create.md) erstellen und die verwendete `transfer_group` angeben. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=7000 \ -d currency=usd \ -d destination="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` Transfer und Zahlungsbeträge müssen nicht übereinstimmen. Sie können eine einzelne Zahlung auf mehrere Übertragungen aufteilen oder mehrere Zahlungen in eine einzelne Übertragung einbeziehen. Im folgenden Beispiel wird eine zusätzliche Übertragung erstellt, die der gleichen `transfer_group` zugeordnet ist. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=2000 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ### Überweisungsoptionen Sie können der Zeichenfolge `transfer_group` einen beliebigen Wert zuweisen, solange dieser für einen einzelnen Geschäftsvorgang steht. Zudem können Sie Überweisungen ohne zugehörige Zahlung oder Angabe einer `transfer_group` durchführen, zum Beispiel wenn Sie einen Dienstleister bezahlen müssen und diesem Vorgang keine Kundenzahlung zugrunde liegt. > Die `transfer_group` identifiziert nur zugehörige Objekte. Sie hat keine Auswirkungen auf die Standardfunktionalität. Um zu verhindern, dass eine Übertragung ausgeführt wird, bevor die Gelder aus der zugehörigen Zahlung verfügbar sind, verwenden Sie das Attribut `source_transaction` der Überweisung. Standardmäßig schlägt eine Übertragungsanfrage fehl, wenn der Betrag das [verfügbare Kontoguthaben](https://docs.stripe.com/connect/account-balances.md) der Plattform übersteigt. Stripe wiederholt fehlgeschlagene Übertragungsanfragen nicht automatisch. Sie können fehlgeschlagene Übertragungsanfragen für Übertragungen vermeiden, die mit Zahlungen verbunden sind. Wenn Sie die zugehörige Zahlung [als source_transaction der Überweisung](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability) angeben, ist die Übertragungsanfrage automatisch erfolgreich. Die Übertragung erfolgt jedoch erst, wenn die Gelder aus dieser Zahlung auf dem Plattformkonto verfügbar sind. > Wenn Sie separate Zahlungen und Überweisungen verwenden, berücksichtigen Sie dies bei der Planung Ihres *Auszahlungs* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit)-Plans. Automatische Auszahlungen können Transfers stören, für die keine `source_transaction` definiert ist. ### Asynchrone Zahlungsmethoden Wenn Sie *asynchrone Zahlungsmethoden* (wie ACH Debit oder SEPA Debit) verwenden, warten Sie auf das Ereignis [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), bevor Sie eine Übertragung erstellen. Im Gegensatz zu Destination Charges storniert Stripe eine Übertragung nicht automatisch, wenn die zugehörige asynchrone Zahlung fehlschlägt. Wenn Sie eine Übertragung erstellen und die Zahlung anschließend fehlschlägt, wird das Guthaben Ihrer Plattform mit dem Übertragungsbetrag belastet. Sie müssen dann manuell [die Übertragung stornieren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers), um die Geldmittel zurückzuerhalten. ## Integration testen #### Karten | Kartennummer | Szenario | So führen Sie den Test durch | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000002500003155 | Für die Kartenzahlung ist eine *Authentifizierung* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000000000009995 | Die Karte wird mit einem Ablehnungscode wie `insufficient_funds` abgelehnt. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 6205500000000000004 | Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | #### Digitale Geldbörsen (Wallets) | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Alipay | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [sofortiger Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | #### Bankumleitungen | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | BECS-Lastschriftverfahren | Ihr/e Kund/in zahlt erfolgreich mit dem BECS-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `900123456` und BSB `000000` aus. Der bestätigte PaymentIntent geht zunächst in den Status `processing` über und dann 3 Minuten später in den Status `succeeded`. | | BECS-Lastschriftverfahren | Die Zahlung Ihres/Ihrer Kund/in schlägt fehl mit Code `account_closed` fehl. | Füllen Sie das Formular mit der Kontonummer `111111113` und BSB `000000` aus. | | Bancontact, EPS, iDEAL und Przelewy24 | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit sofortiger Benachrichtigung nicht authentifizieren. | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | Pay by Bank | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | | Pay by Bank | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit verzögerter Benachrichtigung nicht authentifizieren. | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | BLIK | BLIK-Zahlungen können aus verschiedenen Gründen fehlschlagen. Es gibt sofortige Fehler (der Code ist abgelaufen oder ungültig), verzögerte Fehler (die Bank lehnt ab) oder Zeitüberschreitungen (der/die Kund/in hat nicht rechtzeitig reagiert). | Verwenden Sie E-Mail-Muster, um [die verschiedenen Fehler zu simulieren](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Banklastschriften | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SEPA-Lastschrift | Ihr/e Kund/in zahlt erfolgreich mit dem SEPA-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `AT321904300235473204` aus. Die bestätigte PaymentIntent geht zunächst in den Status „wird verarbeitet“ und dann drei Minuten später in den Status „erfolgreich“ über. | | SEPA-Lastschrift | Der Status der PaymentIntent Ihres/Ihrer Kund/in wechselt von `processing` zu `requires_payment_method`. | Füllen Sie das Formular mit der Kontonummer `AT861904300235473202` aus. | #### Gutscheine | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | | Boleto, OXXO | Ihr/e Kund/in bezahlt mit einem Boleto- oder OXXO-Gutschein. | Wählen Sie als Zahlungsmethode Boleto oder OXXO aus und übermitteln Sie die Zahlung. Schließen Sie das OXXO-Dialogfeld, nachdem es angezeigt wurde. | Hier finden Sie weitere Informationen zum [Testen](https://docs.stripe.com/testing.md) Ihrer Integration. ## Optional: Weitere Zahlungsmethoden aktivieren Navigieren Sie im Dashboard zu [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), um zu konfigurieren, welche Zahlungsmethoden Ihre verbundenen Konten akzeptieren. Änderungen an den Standardeinstellungen gelten für alle neuen und bestehenden verbundenen Konten. Informationen zu den Zahlungsmethoden finden Sie in den folgenden Ressourcen: - [Ein Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business), der Ihnen bei der Auswahl der richtigen Zahlungsmethoden für Ihre Plattform hilft. - [Kontofunktionen](https://docs.stripe.com/connect/account-capabilities.md), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre verbundenen Konten funktionieren. - [Zahlungsmethode und Produktsupport](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre Stripe-Produkte und Zahlungsabläufe geeignet sind. Für jede Zahlungsmethode können Sie eine der folgenden Dropdown-Optionen wählen: | | | | | **Standardmäßig aktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang. Einige Zahlungsmethoden können nur deaktiviert oder gesperrt werden. Dies liegt daran, dass Ihre verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) sie auf ihrer Seite mit Einstellungen aktivieren müssen. | | **Standardmäßig deaktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie die Möglichkeit, sie zu aktivieren. | | **Blockiert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie nicht die Möglichkeit, sie zu aktivieren. | ![Dropdown-Optionen für Zahlungsmethoden, die jeweils eine verfügbare Option anzeigen (blockiert, standardmäßig aktiviert, standardmäßig deaktiviert)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Optionen für Zahlungsmethoden Wenn Sie eine Änderung an einer Zahlungsmethode vornehmen, müssen Sie auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und auf **Speichern und anwenden**, um Ihre verbundenen Konten zu aktualisieren. ![Dialogfeld, das nach dem Klicken auf die Schaltfläche „Speichern“ angezeigt wird, mit einer Liste der Änderungen, die der/die Nutzer/in geändert hat](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Dialogfeld „Speichern“ ### Verbundenen Konten die Verwaltung von Zahlungsmethoden gestatten Stripe empfiehlt, dass Sie Ihren verbundenen Konten erlauben, ihre eigenen Zahlungsmethoden anzupassen. Diese Option ermöglicht jedem verbundenen Konto mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API), seine Seite mit den [Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) anzuzeigen und zu aktualisieren. Nur Inhaber/innen der verbundenen Konten können ihre Zahlungsmethoden anpassen. Das Stripe-Dashboard zeigt die Standard-Zahlungsmethoden an, die Sie auf alle neuen und bestehenden verbundenen Konten angewendet haben. Ihre verbundenen Konten können diese Standardeinstellungen außer Kraft setzen, mit Ausnahme der von Ihnen blockierten Zahlungsmethoden. Aktivieren Sie das Kontrollkästchen **Anpassung des Kontos**, um diese Option zu aktivieren. Sie müssen auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und dann **Speichern und übernehmen** auswählen, um diese Einstellung zu aktualisieren. ![Screenshot des Kontrollkästchens, das aktiviert werden muss, wenn Inhaber/innen verbundener Konten das Anpassen von Zahlungsmethoden gestattet ist](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Kontrollkästchen „Anpassung des Kontos“ ### Funktionen der Zahlungsmethode Damit Ihre verbundenen Konten zusätzliche Zahlungsmethoden akzeptieren können, müssen deren `Accounts` über aktive Zahlungsmethoden verfügen. Wenn Sie unter [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) die Option „Standardmäßig aktiviert“ für eine Zahlungsmethode ausgewählt haben, fordert Stripe automatisch die erforderliche Funktion für neue und bestehende verbundene Konten an, sofern diese die Verifizierungsanforderungen erfüllen. Wenn das verbundene Konto die Anforderungen nicht erfüllt oder Sie die direkte Kontrolle behalten möchten, können Sie die Funktion manuell im Dashboard oder über die API anfordern. Die meisten Zahlungsmethoden haben die gleichen Verifizierungsanforderungen wie die `card_payments`-Funktion, mit einigen Einschränkungen und Ausnahmen. Die [Tabelle der Zahlungs­methoden­funktionen](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) führt die Zahlungsmethoden auf, die eine zusätzliche Verifizierung erfordern. #### Dashboard [Suchen Sie im Dashboard ein verbundenes Konto](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts), um dessen Funktionen zu bearbeiten und ausstehende Verifizierungsanforderungen einzusehen. #### API Für ein bestehendes verbundenes Konto können Sie die vorhandenen Funktionen [auflisten](https://docs.stripe.com/api/capabilities/list.md), um festzustellen, ob Sie zusätzliche Funktionen anfordern müssen. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Fordern Sie zusätzliche Funktionen an, indem Sie die Funktionen jedes verbundenen Kontos [aktualisieren](https://docs.stripe.com/api/capabilities/update.md). ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Es kann zu einer Verzögerung kommen, bevor die angeforderte Funktion aktiv wird. Wenn für die Funktion Aktivierungsanforderungen gelten, enthält die Antwort diese in den `requirements`-Arrays. ## Abwicklungshändler angeben Der Abwicklungshändler ist abhängig von den [Funktionen](https://docs.stripe.com/connect/account-capabilities.md), die für ein Konto eingerichtet sind, und davon, wie eine Zahlung erstellt wird. Der Abwicklungshändler bestimmt, wessen Informationen für die Durchführung der Zahlung verwendet werden. Dazu gehört die Zahlungsbeschreibung in der Abrechnung (entweder die der Plattform oder die des verbundenen Kontos), die auf dem Kreditkarten- oder Kontoauszug des Kunden/der Kundin für diese Zahlung angezeigt wird. Durch die Angabe des Abwicklungshändlers können Sie genauer festlegen, für wen Zahlungen erstellt werden sollen. Einige Plattformen sind beispielsweise vorzugsweise der Abwicklungshändler, da Kundinnen/Kunden direkt mit ihrer Plattform interagieren (zum Beispiel On-Demand-Plattformen). Manche Plattformen verfügen jedoch über verbundene Konten, die stattdessen direkt mit Kundinnen/Kunden interagieren (zum Beispiel ein Ladengeschäft auf einer E-Commerce-Plattform). Bei diesen Szenarien ist es möglicherweise sinnvoller, wenn das verbundene Konto der Abwicklungshändler ist. Sie können den Parameter `on_behalf_of` auf die ID eines verbundenen Kontos setzen, um dieses Konto zum Abwicklungshändler für die Zahlung zu machen. Bei Verwendung von `on_behalf_of`: - Zahlungen werden im Land und in der *Abwicklungswährung* (The settlement currency is the currency your bank account uses) des verbundenen Kontos *abgewickelt* (When funds are available in your Stripe balance). - Es wird die Gebührenstruktur für das Land des verbundenen Kontos verwendet. - Die Zahlungsbeschreibung des verbundenen Kontos wird auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wenn sich das verbundene Konto in einem anderen Land als die Plattform befindet, werden die Adresse und die Telefonnummer des verbundenen Kontos auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wie viele Tage ein [ausstehendes Guthaben](https://docs.stripe.com/connect/account-balances.md) vor der Auszahlung zurückgehalten wird, hängt von der Einstellung [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) auf dem verbundenen Konto ab. > #### Accounts v2 API > > Sie können die Accounts v2 API nicht zur Verwaltung der Auszahlungseinstellungen verwenden. Bitte nutzen Sie die Accounts v1 API. Wenn `on_behalf_of` weggelassen wird, ist die Plattform das für die Zahlung verantwortliche Unternehmen. > Der Parameter `on_behalf_of` wird nur für verbundene Konten mit Zahlungsfunktionen wie [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments) unterstützt. Konten, denen der [Empfänger-Rahmenvertrag](https://docs.stripe.com/connect/service-agreement-types.md#recipient) zugrunde liegt, können keine `card_payments` oder andere Zahlungsfunktionen anfordern. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \ -d "line_items[0][price_data][unit_amount]"=10000 \ -d "line_items[0][quantity]"=1 \ -d "payment_intent_data[on_behalf_of]"="{{CONNECTEDACCOUNT_ID}}" \ -d "payment_intent_data[transfer_group]"=ORDER100 \ -d mode=payment \ -d ui_mode=embedded \ --data-urlencode return_url="https://example.com/return" ``` Erstellen Sie eine nutzerdefinierte Zahlungsintegration, indem Sie Komponenten der Nutzeroberfläche auf Ihrer Website mit [Stripe Elements](https://docs.stripe.com/payments/elements.md) einbetten. Der clientseitige und der serverseitige Code erstellen ein Checkout-Formular, das verschiedene Zahlungsmethoden akzptiert. Sehen Sie sich diese Integration [im Vergleich zu anderen Integrationstypen von Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability) an. #### Integrationsaufwand Complexity: 3/5 #### Integrationstyp Komponenten der Nutzeroberfläche in einem nutzerdefinierten Zahlungsablauf kombinieren #### Anpassung der Nutzeroberfläche Anpassung auf CSS-Ebene mit der [Appearance API](https://docs.stripe.com/elements/appearance-api.md) [Registrieren Sie sich](https://dashboard.stripe.com/register) zunächst für ein Stripe-Konto. Verwenden Sie unsere offiziellen Bibliotheken, um von Ihrer Anwendung aus auf die Stripe API zuzugreifen: #### 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' ``` ## PaymentIntent erstellen [Serverseitig] Stripe verwendet ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md)-Objekt, um Ihre Absicht darzustellen, eine Kundenzahlung einzuziehen. Dabei werden die Abbuchungsversuche und Zahlungsstatusänderungen während des gesamten Vorgangs dokumentiert. In diesem Dokument finden Sie eine allgemeine Übersicht über die Zahlungsintegration. (See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers) Die Zahlungsmethoden, die Kundinnen/Kunden während des Bezahlvorgangs angezeigt werden, sind ebenfalls im PaymentIntent enthalten. Sie können Zahlungsmethoden durch Stripe automatisch aus Ihren Dashboard-Einstellungen abrufen lassen oder sie manuell auflisten. Sofern Ihre Integration keine codebasierte Option zum Anbieten von Zahlungsmethoden erfordert, listen Sie Zahlungsmethoden nicht manuell auf. Stripe wertet die Währung, die Einschränkungen für Zahlungsmethoden und andere Parameter aus, um die Liste der unterstützten Zahlungsmethoden zu ermitteln. Stripe priorisiert Zahlungsmethoden, die die Konversion steigern und die für die Währung und den Standort des Kunden/der Kundin am relevantesten sind. Stripe verbirgt Zahlungsmethoden mit niedrigerer Priorität in einem Überlaufmenü. #### Zahlungsmethoden über das Dashboard verwalten Erstellen Sie einen PaymentIntent auf Ihrem Server mit einem Betrag, einer Währung und dem Wert `transfer_group`, der der Übertragung der Gelder später zugeordnet wird. In der neuesten Version der API ist die Angabe des Parameters `automatic_payment_methods` optional, da Stripe die Funktionalität standardmäßig aktiviert. Sie können Zahlungsmethoden über das [Dashboard](https://dashboard.stripe.com/settings/payment_methods) verwalten. Stripe handhabt die Rückgabe der in Frage kommenden Zahlungsmethoden anhand von Faktoren wie Transaktionsbetrag, Währung und Zahlungsablauf. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d transfer_group=ORDER100 ``` #### Zahlungsmethoden manuell auflisten Erstellen Sie einen PaymentIntent auf Ihrem Server mit einem Betrag, einer Währung, einer Liste der Arten der Zahlungsmethoden und dem Wert `transfer_group`, der der Übertragung der Gelder später zugeordnet wird. Entscheiden Sie immer auf der Server-Seite, einer vertrauenswürdigen Umgebung, im Gegensatz zum Client, wie viel berechnet werden soll. Dadurch wird verhindert, dass böswillige Kundinnen/Kunden ihre eigenen Preise wählen können. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=eur \ -d "payment_method_types[]"=bancontact \ -d "payment_method_types[]"=card \ -d "payment_method_types[]"=eps \ -d "payment_method_types[]"=ideal \ -d "payment_method_types[]"=p24 \ -d "payment_method_types[]"=sepa_debit \ -d transfer_group=ORDER100 ``` Wählen Sie die Währung anhand der Zahlungsmethoden aus, die Sie anbieten möchten. Einige Zahlungsmethoden unterstützen mehrere Währungen und Länder. In diesem Beispiel werden Bancontact, Kreditkarten, EPS, iDEAL, Przelewy24 und SEPA-Lastschriften verwendet. > Jede Zahlungsmethode muss die im PaymentIntent übergebene Währung unterstützen, und Ihr Unternehmen muss in einem der Länder niedergelassen sein, das von jeder Zahlungsmethode unterstützt wird. Auf der Seite [Integrationsoptionen für Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/integration-options.md) finden Sie weitere Informationen zu den unterstützten Optionen. ### Client-Geheimnis abrufen Im PaymentIntent ist ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) enthalten, das auf dem Client verwendet wird, um Zahlungen sicher abzuschließen. Es gibt verschiedene Verfahren zum Übergeben des Client-Geheimnisses an den Client. #### Einseitige Anwendung Rufen Sie das Client-Geheimnis von einem Endpoint auf Ihrem Server ab, indem Sie die Browser-Funktion `fetch` verwenden. Diese Vorgehensweise funktioniert am besten, wenn es sich bei Ihrer Client-Seite um eine einseitige Anwendung handelt, insbesondere wenn sie mit einem modernen Frontend-Framework wie React erstellt wurde. Erstellen Sie den Server-Endpoint, der das Client-Geheimnis bereitstellt: #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end ``` Und dann rufen Sie das Client-Geheimnis mit JavaScript auf der Client-Seite ab: ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Serverseitiges Rendering Übergeben Sie das Client-Geheimnis von Ihrem Server an den Client. Diese Vorgehensweise funktioniert am besten, wenn Ihre Anwendung statische Inhalte auf dem Server generiert, bevor sie an den Browser gesendet werden. Fügen Sie das [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) in Ihr Bezahlformular ein. Rufen Sie in Ihrem serverseitigen Code das Client-Geheimnis aus dem PaymentIntent ab: #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## Zahlungsdaten erfassen [Clientseitig] Erfassen Sie Zahlungsdetails auf dem Client mit dem [Payment Element](https://docs.stripe.com/payments/payment-element.md). Das Payment Element ist eine vorgefertigte Komponente der Nutzeroberfläche, die die Erfassung von Zahlungsdaten für eine Vielzahl von Zahlungsmethoden vereinfacht. Das Payment Element enthält einen iFrame, der Zahlungsinformationen über eine sichere HTTPS-Verbindung an Stripe sendet. Vermeiden Sie es, das Payment Element in einem anderen iFrame zu platzieren, da einige Zahlungsmethoden die Weiterleitung an eine andere Seite zur Zahlungsbestätigung voraussetzen. Wenn Sie sich für die Verwendung eines Iframes entscheiden und Apple Pay oder Google Pay akzeptieren möchten, muss das Attribut [Zulassen](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) des Iframes auf `"payment*"` gesetzt sein. Die Adresse der Bezahlseite muss mit `https://` beginnen, nicht mit `http://`, damit Ihre Integration funktioniert. Sie können Ihre Integration ohne HTTPS testen. Denken Sie jedoch daran, dieses zu [aktivieren](https://docs.stripe.com/security/guide.md#tls), wenn Sie bereit sind, Live-Zahlungen zu akzeptieren. #### HTML + JS ### Stripe.js einrichten Das Payment Element ist ein Feature von Stripe.js und steht damit automatisch zur Verfügung. Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem Sie es in den `head` Ihrer HTML-Datei einbinden. Laden Sie Stripe.js immer direkt von js.stripe.com, um die PCI-Konformität zu gewährleisten. Fügen Sie das Skript nicht in ein Paket ein und hosten Sie selbst keine Kopie davon. ```html Checkout ``` Erstellen Sie auf Ihrer Bezahlseite eine Instanz von Stripe mit dem folgenden JavaScript: ```javascript // Set your publishable key: remember to change this to your live publishable key in production // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` ### Payment Element Ihrer Bezahlseite hinzufügen Das Payment Element benötigt einen festen Platz auf Ihrer Zahlungsseite. Erstellen Sie einen leeren DOM-Knoten (Container) mit einer eindeutigen ID in Ihrem Zahlungsformular: ```html
``` Wenn das vorherige Formular geladen wurde, erstellen Sie eine Instanz des Payment Element und verbinden es mit dem DOM-Knoten (Container). Übergeben Sie das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) aus dem vorherigen Schritt an `options`, wenn Sie die [Elements](https://docs.stripe.com/js/elements_object/create)-Instanz erstellen: Gehen Sie sorgfältig mit dem Client-Geheimnis um, denn es kann die Zahlung abschließen. Protokollieren Sie es nicht, betten Sie es nicht in URLs ein und geben Sie es nur dem/der Kund/in preis. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` #### React ### Stripe.js einrichten Installieren Sie [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) und den [Stripe.js-Loader](https://www.npmjs.com/package/@stripe/stripe-js) aus dem öffentlichen npm-Register: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Den Elements-Anbieter zu Ihrer Zahlungsseite hinzufügen und konfigurieren Um die Payment Element-Komponente zu verwenden, schließen Sie die Komponente Ihrer Bezahlseite in einen [Elements-Anbieter](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider) ein. Rufen Sie `loadStripe` mit Ihrem veröffentlichbaren Schlüssel auf und übergeben Sie das zurückgegebene `Promise` an den `Elements`-Anbieter. Übergeben Sie auch das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) aus dem vorherigen Schritt als `options` an den `Elements`-Anbieter. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { const options = { // passing the client secret obtained in step 3 clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Payment Element hinzufügen Verwenden Sie die Komponente `PaymentElement`, um Ihr Formular zu erstellen: ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
); }; export default CheckoutForm; ``` Stripe Elements ist eine Sammlung von Drop-In-Komponenten der Nutzeroberfläche. Um Ihr Formular weiter anzupassen oder andere Kundeninformationen zu erfassen, durchsuchen Sie die [Elements-Dokumentation](https://docs.stripe.com/payments/elements.md). Das Payment Element rendert ein dynamisches Formular, mit dem Kund/innen ihre gewünschte Zahlungsmethode auswählen können. Für jede Zahlungsmethode fordert das Formular die Kund/innen automatisch auf, alle erforderlichen Zahlungsdaten einzugeben. ### Erscheinungsbild anpassen Passen Sie das Payment Element an das Design Ihrer Website an, indem Sie beim Erstellen des `Elements`-Anbieters das [Erscheinungsbild-Objekt](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-appearance) an `options` übergeben. ### Adressen einholen Standardmäßig erfasst das Payment Element nur die erforderlichen Angaben zur Rechnungsadresse. Einige Verhaltensweisen, wie z. B. die [Berechnung der Steuer](https://docs.stripe.com/api/tax/calculations/create.md) oder die Eingabe der Versanddaten, erfordern die vollständige Adresse Ihrer Kundin/Ihres Kunden. Sie können Folgendes tun: - Verwenden Sie das [Address Element](https://docs.stripe.com/elements/address-element.md), um die Vorteile der Funktionen der automatischen Vervollständigung und Lokalisierung zu nutzen, um die vollständige Adresse Ihrer Kundin oder Ihres Kunden zu erfassen. Dies trägt dazu bei, eine möglichst genaue Steuerberechnung zu gewährleisten. - Erfassen Sie Adressdaten mit Ihrem eigenen benutzerdefinierten Formular. ### Apple Pay-Händler-Token anfordern Wenn Sie Ihre Integration für die [Annahme von Zahlungen per Apple Pay](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=checkout) konfiguriert haben, empfehlen wir die Konfiguration der Apple Pay-Schnittstelle, um ein Händler-Token zurückzugeben und von Händlern/Händlerinnen initiierte Transaktionen zu ermöglichen. [Fordern Sie den entsprechenden Händler-Token-Typ](https://docs.stripe.com/apple-pay/merchant-tokens.md?pay-element=web-pe) im Payment Element an. ## Zahlung an Stripe senden [Clientseitig] Verwenden Sie [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment), um die Zahlung mit Details aus dem Payment Element vorzunehmen. Geben Sie für diese Funktion eine [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) an, um anzugeben, wohin Stripe die Nutzer/innen nach Durchführung der Zahlung weiterleiten soll. Ihre Nutzer/innen werden möglicherweise zunächst an eine zwischengeschaltete Seite weitergeleitet, wie z. B. eine Bankautorisierungsseite, bevor sie zur `return_url` weitergeleitet werden. Kartenzahlungen werden sofort zur `return_url` weitergeleitet, wenn eine Zahlung erfolgreich war. Wenn Sie Kartenzahlungen nach Abschluss der Zahlung nicht weiterleiten möchten, können Sie [redirect](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) auf `if_required` festlegen. Dadurch werden nur Kundinnen/Kunden weitergeleitet, die mit weiterleitungsbasierten Zahlungsmethoden bezahlen. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Verwenden Sie die Hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) und [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook), um [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) über die Komponente Ihres Zahlungsformulars aufzurufen. Wenn Sie herkömmliche Klassenkomponenten gegenüber Hooks bevorzugen, können Sie stattdessen einen [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer) verwenden. ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Achten Sie darauf, dass die `return_url` auf eine Seite Ihrer Website verweist, die den Status der Zahlung angibt. Wenn Stripe den/die Kund/in an die `return_url` weiterleitet, stellen wir die folgenden URL-Abfrageparameter bereit: | Parameter | Beschreibung | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent` | Die eindeutige ID für die `PaymentIntent`. | | `payment_intent_client_secret` | Das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) des `PaymentIntent`-Objekts. | > Wenn Sie über Tools verfügen, die die Browser-Sitzung der Kund/innen verfolgen, müssen Sie möglicherweise die Domain `stripe.com` zur Referenz-Ausschlussliste hinzufügen. Weiterleitungen haben zur Folge, dass einige Tools neue Sitzungen erstellen. Dies wiederum hindert Sie daran, die gesamte Sitzung zu verfolgen. Verwenden Sie einen der Abfrageparameter, um den PaymentIntent abzurufen. Überprüfen Sie den [Status des PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md), um zu entscheiden, was Ihren Kundinnen/Kunden angezeigt werden soll. Sie können bei der Angabe der `return_url` auch Ihre eigenen Abfrageparameter anhängen, die während des Weiterleitungsvorgangs erhalten bleiben. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Ereignisse nach Zahlung verarbeiten [Serverseitig] Stripe sendet ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie [Webhook-Tool im Dashboard](https://dashboard.stripe.com/webhooks) oder folgen Sie der [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und führen Sie Aktionen aus, wie beispielsweise das Senden einer Bestellbestätigung per E-Mail, das Protokollieren des Verkaufs in der Datenbank oder das Starten eines Versand-Workflows. Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnten die Kund/innen das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist. Bösartige Clients könnten dann die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie [verschiedene Arten von Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide) mit einer einzelnen Integration akzeptieren. Neben der Abwicklung des `payment_intent.succeeded`-Ereignisses empfehlen wir die Abwicklung von diesen weiteren Ereignissen, wenn Sie Zahlungen mit dem Payment Element erfassen: | Ereignis | Beschreibung | Aktion | | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Wird gesendet, wenn Kundinnen und Kunden eine Zahlung erfolgreich abgeschlossen haben. | Senden Sie den Kund/innen eine Auftragsbestätigung und *wickeln* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) Sie die Bestellung ab. | | [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Wird gesendet, wenn eine/e Kund/in eine Zahlung erfolgreich veranlasst hat, die Zahlung aber noch nicht abgeschlossen ist. Dieses Ereignis wird am häufigsten gesendet, wenn der Kunde/die Kundin eine Bankabbuchung veranlasst. In Zukunft folgt darauf entweder ein `payment_intent.succeeded`- oder ein `payment_intent.payment_failed`-Ereignis. | Senden Sie eine Bestellbestätigung an die Kund/innen, in der angegeben ist, dass die Zahlung noch aussteht. Bei digitalen Waren können Sie die Bestellung abwickeln, bevor Sie darauf warten, dass die Zahlung erfolgt. | | [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Wird gesendet, wenn ein Kunde/eine Kundin einen Zahlungsversuch durchführt, die Zahlung jedoch fehlschlägt. | Wenn eine Zahlung von `processing` zu `payment_failed` übergeht, bieten Sie der Kundin/dem Kunden einen weiteren Zahlungsversuch an. | ## Transfer erstellen [Serverseitig] Senden Sie auf Ihrem Server Gelder von Ihrem Konto zu einem verbundenen Konto, indem Sie eine [Übertragung](https://docs.stripe.com/api/transfers/create.md) erstellen und die verwendete `transfer_group` angeben. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=7000 \ -d currency=usd \ -d destination="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` Transfer und Zahlungsbeträge müssen nicht übereinstimmen. Sie können eine einzelne Zahlung auf mehrere Übertragungen aufteilen oder mehrere Zahlungen in eine einzelne Übertragung einbeziehen. Im folgenden Beispiel wird eine zusätzliche Übertragung erstellt, die der gleichen `transfer_group` zugeordnet ist. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=2000 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ### Überweisungsoptionen Sie können der Zeichenfolge `transfer_group` einen beliebigen Wert zuweisen, solange dieser für einen einzelnen Geschäftsvorgang steht. Zudem können Sie Überweisungen ohne zugehörige Zahlung oder Angabe einer `transfer_group` durchführen, zum Beispiel wenn Sie einen Dienstleister bezahlen müssen und diesem Vorgang keine Kundenzahlung zugrunde liegt. > Die `transfer_group` identifiziert nur zugehörige Objekte. Sie hat keine Auswirkungen auf die Standardfunktionalität. Um zu verhindern, dass eine Übertragung ausgeführt wird, bevor die Gelder aus der zugehörigen Zahlung verfügbar sind, verwenden Sie das Attribut `source_transaction` der Überweisung. Standardmäßig schlägt eine Übertragungsanfrage fehl, wenn der Betrag das [verfügbare Kontoguthaben](https://docs.stripe.com/connect/account-balances.md) der Plattform übersteigt. Stripe wiederholt fehlgeschlagene Übertragungsanfragen nicht automatisch. Sie können fehlgeschlagene Übertragungsanfragen für Übertragungen vermeiden, die mit Zahlungen verbunden sind. Wenn Sie die zugehörige Zahlung [als source_transaction der Überweisung](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability) angeben, ist die Übertragungsanfrage automatisch erfolgreich. Die Übertragung erfolgt jedoch erst, wenn die Gelder aus dieser Zahlung auf dem Plattformkonto verfügbar sind. > Wenn Sie separate Zahlungen und Überweisungen verwenden, berücksichtigen Sie dies bei der Planung Ihres *Auszahlungs* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit)-Plans. Automatische Auszahlungen können Transfers stören, für die keine `source_transaction` definiert ist. ### Asynchrone Zahlungsmethoden Wenn Sie *asynchrone Zahlungsmethoden* (wie ACH Debit oder SEPA Debit) verwenden, warten Sie auf das Ereignis [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), bevor Sie eine Übertragung erstellen. Im Gegensatz zu Destination Charges storniert Stripe eine Übertragung nicht automatisch, wenn die zugehörige asynchrone Zahlung fehlschlägt. Wenn Sie eine Übertragung erstellen und die Zahlung anschließend fehlschlägt, wird das Guthaben Ihrer Plattform mit dem Übertragungsbetrag belastet. Sie müssen dann manuell [die Übertragung stornieren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers), um die Geldmittel zurückzuerhalten. ## Integration testen #### Karten | Kartennummer | Szenario | So führen Sie den Test durch | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000002500003155 | Für die Kartenzahlung ist eine *Authentifizierung* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000000000009995 | Die Karte wird mit einem Ablehnungscode wie `insufficient_funds` abgelehnt. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 6205500000000000004 | Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | #### Digitale Geldbörsen (Wallets) | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Alipay | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [sofortiger Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | #### Bankumleitungen | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | BECS-Lastschriftverfahren | Ihr/e Kund/in zahlt erfolgreich mit dem BECS-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `900123456` und BSB `000000` aus. Der bestätigte PaymentIntent geht zunächst in den Status `processing` über und dann 3 Minuten später in den Status `succeeded`. | | BECS-Lastschriftverfahren | Die Zahlung Ihres/Ihrer Kund/in schlägt fehl mit Code `account_closed` fehl. | Füllen Sie das Formular mit der Kontonummer `111111113` und BSB `000000` aus. | | Bancontact, EPS, iDEAL und Przelewy24 | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit sofortiger Benachrichtigung nicht authentifizieren. | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | Pay by Bank | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | | Pay by Bank | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit verzögerter Benachrichtigung nicht authentifizieren. | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | BLIK | BLIK-Zahlungen können aus verschiedenen Gründen fehlschlagen. Es gibt sofortige Fehler (der Code ist abgelaufen oder ungültig), verzögerte Fehler (die Bank lehnt ab) oder Zeitüberschreitungen (der/die Kund/in hat nicht rechtzeitig reagiert). | Verwenden Sie E-Mail-Muster, um [die verschiedenen Fehler zu simulieren](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Banklastschriften | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SEPA-Lastschrift | Ihr/e Kund/in zahlt erfolgreich mit dem SEPA-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `AT321904300235473204` aus. Die bestätigte PaymentIntent geht zunächst in den Status „wird verarbeitet“ und dann drei Minuten später in den Status „erfolgreich“ über. | | SEPA-Lastschrift | Der Status der PaymentIntent Ihres/Ihrer Kund/in wechselt von `processing` zu `requires_payment_method`. | Füllen Sie das Formular mit der Kontonummer `AT861904300235473202` aus. | #### Gutscheine | Zahlungsmethode | Szenario | So führen Sie den Test durch | | --------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | | Boleto, OXXO | Ihr/e Kund/in bezahlt mit einem Boleto- oder OXXO-Gutschein. | Wählen Sie als Zahlungsmethode Boleto oder OXXO aus und übermitteln Sie die Zahlung. Schließen Sie das OXXO-Dialogfeld, nachdem es angezeigt wurde. | Hier finden Sie weitere Informationen zum [Testen](https://docs.stripe.com/testing.md) Ihrer Integration. ## Optional: Weitere Zahlungsmethoden aktivieren Navigieren Sie im Dashboard zu [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), um zu konfigurieren, welche Zahlungsmethoden Ihre verbundenen Konten akzeptieren. Änderungen an den Standardeinstellungen gelten für alle neuen und bestehenden verbundenen Konten. Informationen zu den Zahlungsmethoden finden Sie in den folgenden Ressourcen: - [Ein Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business), der Ihnen bei der Auswahl der richtigen Zahlungsmethoden für Ihre Plattform hilft. - [Kontofunktionen](https://docs.stripe.com/connect/account-capabilities.md), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre verbundenen Konten funktionieren. - [Zahlungsmethode und Produktsupport](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre Stripe-Produkte und Zahlungsabläufe geeignet sind. Für jede Zahlungsmethode können Sie eine der folgenden Dropdown-Optionen wählen: | | | | | **Standardmäßig aktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang. Einige Zahlungsmethoden können nur deaktiviert oder gesperrt werden. Dies liegt daran, dass Ihre verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) sie auf ihrer Seite mit Einstellungen aktivieren müssen. | | **Standardmäßig deaktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie die Möglichkeit, sie zu aktivieren. | | **Blockiert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie nicht die Möglichkeit, sie zu aktivieren. | ![Dropdown-Optionen für Zahlungsmethoden, die jeweils eine verfügbare Option anzeigen (blockiert, standardmäßig aktiviert, standardmäßig deaktiviert)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Optionen für Zahlungsmethoden Wenn Sie eine Änderung an einer Zahlungsmethode vornehmen, müssen Sie auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und auf **Speichern und anwenden**, um Ihre verbundenen Konten zu aktualisieren. ![Dialogfeld, das nach dem Klicken auf die Schaltfläche „Speichern“ angezeigt wird, mit einer Liste der Änderungen, die der/die Nutzer/in geändert hat](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Dialogfeld „Speichern“ ### Verbundenen Konten die Verwaltung von Zahlungsmethoden gestatten Stripe empfiehlt, dass Sie Ihren verbundenen Konten erlauben, ihre eigenen Zahlungsmethoden anzupassen. Diese Option ermöglicht jedem verbundenen Konto mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API), seine Seite mit den [Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) anzuzeigen und zu aktualisieren. Nur Inhaber/innen der verbundenen Konten können ihre Zahlungsmethoden anpassen. Das Stripe-Dashboard zeigt die Standard-Zahlungsmethoden an, die Sie auf alle neuen und bestehenden verbundenen Konten angewendet haben. Ihre verbundenen Konten können diese Standardeinstellungen außer Kraft setzen, mit Ausnahme der von Ihnen blockierten Zahlungsmethoden. Aktivieren Sie das Kontrollkästchen **Anpassung des Kontos**, um diese Option zu aktivieren. Sie müssen auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und dann **Speichern und übernehmen** auswählen, um diese Einstellung zu aktualisieren. ![Screenshot des Kontrollkästchens, das aktiviert werden muss, wenn Inhaber/innen verbundener Konten das Anpassen von Zahlungsmethoden gestattet ist](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Kontrollkästchen „Anpassung des Kontos“ ### Funktionen der Zahlungsmethode Damit Ihre verbundenen Konten zusätzliche Zahlungsmethoden akzeptieren können, müssen deren `Accounts` über aktive Zahlungsmethoden verfügen. Wenn Sie unter [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) die Option „Standardmäßig aktiviert“ für eine Zahlungsmethode ausgewählt haben, fordert Stripe automatisch die erforderliche Funktion für neue und bestehende verbundene Konten an, sofern diese die Verifizierungsanforderungen erfüllen. Wenn das verbundene Konto die Anforderungen nicht erfüllt oder Sie die direkte Kontrolle behalten möchten, können Sie die Funktion manuell im Dashboard oder über die API anfordern. Die meisten Zahlungsmethoden haben die gleichen Verifizierungsanforderungen wie die `card_payments`-Funktion, mit einigen Einschränkungen und Ausnahmen. Die [Tabelle der Zahlungs­methoden­funktionen](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) führt die Zahlungsmethoden auf, die eine zusätzliche Verifizierung erfordern. #### Dashboard [Suchen Sie im Dashboard ein verbundenes Konto](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts), um dessen Funktionen zu bearbeiten und ausstehende Verifizierungsanforderungen einzusehen. #### API Für ein bestehendes verbundenes Konto können Sie die vorhandenen Funktionen [auflisten](https://docs.stripe.com/api/capabilities/list.md), um festzustellen, ob Sie zusätzliche Funktionen anfordern müssen. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Fordern Sie zusätzliche Funktionen an, indem Sie die Funktionen jedes verbundenen Kontos [aktualisieren](https://docs.stripe.com/api/capabilities/update.md). ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Es kann zu einer Verzögerung kommen, bevor die angeforderte Funktion aktiv wird. Wenn für die Funktion Aktivierungsanforderungen gelten, enthält die Antwort diese in den `requirements`-Arrays. ## Abwicklungshändler angeben Der Abwicklungshändler ist abhängig von den [Funktionen](https://docs.stripe.com/connect/account-capabilities.md), die für ein Konto eingerichtet sind, und davon, wie eine Zahlung erstellt wird. Der Abwicklungshändler bestimmt, wessen Informationen für die Durchführung der Zahlung verwendet werden. Dazu gehört die Zahlungsbeschreibung in der Abrechnung (entweder die der Plattform oder die des verbundenen Kontos), die auf dem Kreditkarten- oder Kontoauszug des Kunden/der Kundin für diese Zahlung angezeigt wird. Durch die Angabe des Abwicklungshändlers können Sie genauer festlegen, für wen Zahlungen erstellt werden sollen. Einige Plattformen sind beispielsweise vorzugsweise der Abwicklungshändler, da Kundinnen/Kunden direkt mit ihrer Plattform interagieren (zum Beispiel On-Demand-Plattformen). Manche Plattformen verfügen jedoch über verbundene Konten, die stattdessen direkt mit Kundinnen/Kunden interagieren (zum Beispiel ein Ladengeschäft auf einer E-Commerce-Plattform). Bei diesen Szenarien ist es möglicherweise sinnvoller, wenn das verbundene Konto der Abwicklungshändler ist. Sie können den Parameter `on_behalf_of` auf die ID eines verbundenen Kontos setzen, um dieses Konto zum Abwicklungshändler für die Zahlung zu machen. Bei Verwendung von `on_behalf_of`: - Zahlungen werden im Land und in der *Abwicklungswährung* (The settlement currency is the currency your bank account uses) des verbundenen Kontos *abgewickelt* (When funds are available in your Stripe balance). - Es wird die Gebührenstruktur für das Land des verbundenen Kontos verwendet. - Die Zahlungsbeschreibung des verbundenen Kontos wird auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wenn sich das verbundene Konto in einem anderen Land als die Plattform befindet, werden die Adresse und die Telefonnummer des verbundenen Kontos auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wie viele Tage ein [ausstehendes Guthaben](https://docs.stripe.com/connect/account-balances.md) vor der Auszahlung zurückgehalten wird, hängt von der Einstellung [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) auf dem verbundenen Konto ab. > #### Accounts v2 API > > Sie können die Accounts v2 API nicht zur Verwaltung der Auszahlungseinstellungen verwenden. Bitte nutzen Sie die Accounts v1 API. Wenn `on_behalf_of` weggelassen wird, ist die Plattform das für die Zahlung verantwortliche Unternehmen. > Der Parameter `on_behalf_of` wird nur für verbundene Konten mit Zahlungsfunktionen wie [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments) unterstützt. Konten, denen der [Empfänger-Rahmenvertrag](https://docs.stripe.com/connect/service-agreement-types.md#recipient) zugrunde liegt, können keine `card_payments` oder andere Zahlungsfunktionen anfordern. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` ![](https://b.stripecdn.com/docs-statics-srv/assets/ios-overview.9e0d68d009dc005f73a6f5df69e00458.png) Integrieren Sie die vorgefertigte Zahlungs-UI von Stripe in den Bezahlvorgang Ihrer iOS app mit der [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html)-Klasse. Sehen Sie sich unsere Beispielintegration [auf GitHub](https://github.com/stripe/stripe-ios/tree/master/Example/PaymentSheet%20Example) an. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### 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 [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 **StripePaymentSheet** 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 'StripePaymentSheet' ``` 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 StripePaymentSheet ``` #### 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/tree/master/StripePaymentSheet/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 **StripePaymentSheet.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/tree/master/StripePaymentSheet/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). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/test/apikeys) von Stripe, um es beim Start der App auszuführen. Dadurch kann Ihre App Anfragen an die Stripe-API senden. #### Swift ```swift import UIKitimportStripePaymentSheet @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > Verwenden Sie Ihre [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. ## Endpoint hinzufügen [Serverseitig] Diese Integration verwendet drei Stripe-API-Objekte: 1. [PaymentIntent](https://docs.stripe.com/api/payment_intents.md): Stripe verwendet diesen, um Ihre Absicht darzustellen, eine Zahlung von Ihren Kundinnen/Kunden anzufordern, wobei Abbuchungsversuche und Zahlungsstatusänderungen im gesamten Vorgang dokumentiert werden. 1. Ein/eine *Kunde/Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Um eine Zahlungsmethode für zukünftige Zahlungen einzurichten, muss diese einem Kunden/einer Kundin zugeordnet werden. Erstellen Sie ein Kundenobjekt, wenn Ihre Kundin/Ihr Kunde ein Konto bei Ihrem Unternehmen anlegt. Wenn eine Zahlung als Gast durchgeführt wird, können Sie vor der Zahlung ein Kundenobjekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. 1. Ein temporärer Kundenschlüssel (optional). Informationen zum Kundenobjekt sind vertraulich und können nicht direkt über die App abgerufen werden. Ein temporärer Schlüssel gewährt dem SDK vorübergehenden Zugriff auf den Kunden/die Kundin. Wenn Sie Karten speichern und wiederkehrenden Kunden und Kundinnen ermöglichen möchten, gespeicherte Karten wiederzuverwenden, benötigen Sie das Customer-Objekt und das temporäre Kundenschlüssel-Objekt für Ihre Integration. Andernfalls können Sie diese Objekte weglassen. Aus Sicherheitsgründen kann Ihre App diese Objekte nicht erstellen. Fügen Sie stattdessen einen Endpoint auf Ihrem Server hinzu, der: 1. Ruft den Kunden/die Kundin ab oder erstellt einen neuen/eine neue. 1. Erstellt einen temporären Schlüssel für den Kunden/die Kundin. 1. Erstellt einen PaymentIntent mit dem [Betrag](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), der [Währung](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), [dem Kunden/der Kundin](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) und einer [Übertragungsgruppe](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group), die der Übertragung von Geldern später zugeordnet werden sollen. 1. Gibt das *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) des PaymentIntent, das `secret` des temporären Schlüssels, die [Kunden-ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) und Ihren [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) an Ihre App zurück. Die Zahlungsmethoden, die Kundinnen/Kunden während des Bezahlvorgangs angezeigt werden, sind ebenfalls im PaymentIntent enthalten. Sie können Zahlungsmethoden durch Stripe aus Ihren [Dashboard-Einstellungen](https://dashboard.stripe.com/settings/payment_methods) abrufen lassen oder sie manuell auflisten. Sofern Ihre Integration keine codebasierte Option zum Anbieten von Zahlungsmethoden erfordert, listen Sie Zahlungsmethoden nicht manuell auf. Stripe wertet die Währung, die Einschränkungen für Zahlungsmethoden und andere Parameter aus, um die Liste der unterstützten Zahlungsmethoden zu ermitteln. Stripe priorisiert Zahlungsmethoden, die die Konversion steigern und die für die Währung und den Standort des Kunden/der Kundin am relevantesten sind. Wir verbergen Zahlungsmethoden mit niedrigerer Priorität in einem Überlaufmenü. #### Zahlungsmethoden über das Dashboard verwalten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="usd" \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter # is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d transfer_group="ORDER100" \ ``` #### Zahlungsmethoden manuell auflisten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="eur" \ -d "payment_method_types[]"="bancontact" \ -d "payment_method_types[]"="card" \ -d "payment_method_types[]"="ideal" \ -d "payment_method_types[]"="klarna" \ -d "payment_method_types[]"="sepa_debit" \ -d transfer_group="ORDER100" \ ``` Jede Zahlungsmethode muss die im PaymentIntent übergebene Währung unterstützen, und Ihr Unternehmen muss in einem der Länder ansässig sein, die jede Zahlungsmethode unterstützt. Auf der Seite [Optionen für die Integration von Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/integration-options.md) finden Sie weitere Informationen zu den unterstützten Zahlungsmethoden. ## Zahlungsformular integrieren [Clientseitig] Um das mobile Payment Element auf Ihrem Checkout-Bildschirm anzuzeigen, stellen Sie bitte Folgendes sicher: - Zeigen Sie vom Kunden/von der Kundin gekaufte Produkte und den Gesamtbetrag an - Verwenden Sie das [Address Element](https://docs.stripe.com/elements/address-element.md?platform=ios), um alle benötigten Versanddaten des Kunden/der Kundin zu erfassen - Fügen Sie eine Checkout-Schaltfläche ein, um die Nutzeroberfläche von Stripe anzuzeigen #### UIKit Rufen Sie auf dem Checkout-Bildschirm Ihrer App das PaymentIntent-Client-Geheimnis, das CustomerSession-Client-Geheimnis, die Kunden-ID 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 `STPAPIClient.shared` fest und initialisieren Sie das [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html). #### iOS (Swift) ```swift import UIKit@_spi(CustomerSessionBetaAccess) import StripePaymentSheet class CheckoutViewController: UIViewController { @IBOutlet weak var checkoutButton: UIButton! var paymentSheet: PaymentSheet? let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint override func viewDidLoad() { super.viewDidLoad() checkoutButton.addTarget(self, action: #selector(didTapCheckoutButton), for: .touchUpInside) checkoutButton.isEnabled = false // MARK: Fetch the PaymentIntent client secret, CustomerSession client secret, Customer ID, 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 customerId = json["customer"] as? String, let customerSessionClientSecret = json["customerSessionClientSecret"] as? String, let paymentIntentClientSecret = json["paymentIntent"] as? String, let publishableKey = json["publishableKey"] as? String, let self = self else { // Handle error return } STPAPIClient.shared.publishableKey = publishableKey// MARK: Create a PaymentSheet instance var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "Example, Inc." configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. configuration.allowsDelayedPaymentMethods = true self.paymentSheet = PaymentSheet(paymentIntentClientSecret:paymentIntentClientSecret, configuration: configuration) DispatchQueue.main.async { self.checkoutButton.isEnabled = true } }) task.resume() } } ``` Wenn Kund/innen auf die Schaltfläche **Checkout** tippen, rufen Sie bitte `present` auf, um das Zahlungsformular anzuzeigen. Nachdem die Zahlung abgeschlossen wurde, verwirft Stripe das Formular und der Abschlussblock wird mit einem [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html) aufgerufen. #### iOS (Swift) ```swift @objc func didTapCheckoutButton() { // MARK: Start the checkout process paymentSheet?.present(from: self) { paymentResult in // MARK: Handle the payment result switch paymentResult { case .completed: print("Your order is confirmed") case .canceled: print("Canceled!") case .failed(let error): print("Payment failed: \(error)") } } } ``` #### SwiftUI Erstellen Sie ein `ObservableObject`-Modell für Ihren Bezahlbildschirm. Dieses Modell veröffentlicht ein [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html) und ein [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html). ```swift import StripePaymentSheet import SwiftUI class CheckoutViewModel: ObservableObject { let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint @Published var paymentSheet: PaymentSheet? @Published var paymentResult: PaymentSheetResult? } ``` Rufen Sie das PaymentIntent-Client-Geheimnis, das CustomerSession-Client-Geheimnis, die Kunden-ID 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 `STPAPIClient.shared` fest und initialisieren Sie das [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html). ```swift @_spi(CustomerSessionBetaAccess) import StripePaymentSheet import SwiftUI class CheckoutViewModel: ObservableObject { let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint @Published var paymentSheet: PaymentSheet? @Published var paymentResult: PaymentSheetResult? func preparePaymentSheet() { // MARK: Fetch thePaymentIntent and Customer information from the backend 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 customerId = json["customer"] as? String, let customerSessionClientSecret = json["customerSessionClientSecret"] as? String, letpaymentIntentClientSecret = json["paymentIntent"] as? String, let publishableKey = json["publishableKey"] as? String, let self = self else { // Handle error return } STPAPIClient.shared.publishableKey = publishableKey// MARK: Create a PaymentSheet instance var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "Example, Inc." configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. configuration.allowsDelayedPaymentMethods = true DispatchQueue.main.async { self.paymentSheet = PaymentSheet(paymentIntentClientSecret:paymentIntentClientSecret, configuration: configuration) } }) task.resume() } } struct CheckoutView: View { @ObservedObject var model = CheckoutViewModel() var body: some View { VStack { if model.paymentSheet != nil { Text("Ready to pay.") } else { Text("Loading…") } }.onAppear { model.preparePaymentSheet() } } } ``` Fügen Sie Ihrer `View` ein [PaymentSheet.PaymentButton](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/PaymentButton.html) hinzu. Diese verhält sich ähnlich wie eine SwiftUI-`Button` und kann durch Hinzufügen einer `View` angepasst werden. Wenn Sie auf die Schaltfläche tippen, wird das PaymentSheet angezeigt. Beim Abschließen der Zahlung verwirft Stripe das PaymentSheet und der `onCompletion`-Handler mit einem [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html)-Objekt aufgerufen. ```swift @_spi(CustomerSessionBetaAccess) import StripePaymentSheet import SwiftUI class CheckoutViewModel: ObservableObject { let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint @Published var paymentSheet: PaymentSheet? @Published var paymentResult: PaymentSheetResult? func preparePaymentSheet() { // MARK: Fetch the PaymentIntent and Customer information from the backend 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 customerId = json["customer"] as? String, let customerSessionClientSecret = json["customerSessionClientSecret"] as? String, let paymentIntentClientSecret = json["paymentIntent"] as? String, let publishableKey = json["publishableKey"] as? String, let self = self else { // Handle error return } STPAPIClient.shared.publishableKey = publishableKey // MARK: Create a PaymentSheet instance var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "Example, Inc." configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret) // Set `allowsDelayedPaymentMethods` to true if your business can handle payment methods // that complete payment after a delay, like SEPA Debit and Sofort. configuration.allowsDelayedPaymentMethods = true DispatchQueue.main.async { self.paymentSheet = PaymentSheet(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) } }) task.resume() } func onPaymentCompletion(result: PaymentSheetResult) { self.paymentResult = result } } struct CheckoutView: View { @ObservedObject var model = CheckoutViewModel() var body: some View { VStack {if let paymentSheet = model.paymentSheet { PaymentSheet.PaymentButton( paymentSheet: paymentSheet, onCompletion: model.onPaymentCompletion ) { Text("Buy") } } else { Text("Loading…") }if let result = model.paymentResult { switch result { case .completed: Text("Payment complete") case .failed(let error): Text("Payment failed: \(error.localizedDescription)") case .canceled: Text("Payment canceled.") } } }.onAppear { model.preparePaymentSheet() } } } ``` Wenn das Ergebnis von `PaymentSheetResult` `.completed` lautet, informieren Sie den/die Nutzer/in, (zum Beispiel durch die Anzeige einer Bestellbestätigung). Wenn Sie `allowsDelayedPaymentMethods` auf true festlegen, werden Zahlungsmethoden mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification) wie US-Bankkonten zugelassen. Für diese Zahlungsmethoden ist der endgültige Zahlungsstatus nicht bekannt, wenn das `PaymentSheet` abgeschlossen wird. Stattdessen ist sie erfolgreich oder schlägt fehl. Wenn Sie diese Art von Zahlungsmethoden unterstützen, informieren Sie den Kunden/die Kundin darüber, dass seine/ihre Bestellung bestätigt ist, und führen seine/ihre Bestellung erst aus (z. B. das Produkt versenden), wenn die Zahlung erfolgreich ist. ## 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). #### 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 } } } } } ``` ## Ereignisse nach Zahlung verarbeiten [Serverseitig] Stripe sendet ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie [Webhook-Tool im Dashboard](https://dashboard.stripe.com/webhooks) oder folgen Sie der [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und führen Sie Aktionen aus, wie beispielsweise das Senden einer Bestellbestätigung per E-Mail, das Protokollieren des Verkaufs in der Datenbank oder das Starten eines Versand-Workflows. Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnten die Kund/innen das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist. Bösartige Clients könnten dann die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie [verschiedene Arten von Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide) mit einer einzelnen Integration akzeptieren. Neben der Abwicklung des `payment_intent.succeeded`-Ereignisses empfehlen wir die Abwicklung von diesen weiteren Ereignissen, wenn Sie Zahlungen mit dem Payment Element erfassen: | Ereignis | Beschreibung | Aktion | | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Wird gesendet, wenn Kundinnen und Kunden eine Zahlung erfolgreich abgeschlossen haben. | Senden Sie den Kund/innen eine Auftragsbestätigung und *wickeln* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) Sie die Bestellung ab. | | [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Wird gesendet, wenn eine/e Kund/in eine Zahlung erfolgreich veranlasst hat, die Zahlung aber noch nicht abgeschlossen ist. Dieses Ereignis wird am häufigsten gesendet, wenn der Kunde/die Kundin eine Bankabbuchung veranlasst. In Zukunft folgt darauf entweder ein `payment_intent.succeeded`- oder ein `payment_intent.payment_failed`-Ereignis. | Senden Sie eine Bestellbestätigung an die Kund/innen, in der angegeben ist, dass die Zahlung noch aussteht. Bei digitalen Waren können Sie die Bestellung abwickeln, bevor Sie darauf warten, dass die Zahlung erfolgt. | | [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Wird gesendet, wenn ein Kunde/eine Kundin einen Zahlungsversuch durchführt, die Zahlung jedoch fehlschlägt. | Wenn eine Zahlung von `processing` zu `payment_failed` übergeht, bieten Sie der Kundin/dem Kunden einen weiteren Zahlungsversuch an. | ## Transfer erstellen [Serverseitig] Senden Sie auf Ihrem Server Gelder von Ihrem Konto zu einem verbundenen Konto, indem Sie eine [Übertragung](https://docs.stripe.com/api/transfers/create.md) erstellen und die verwendete `transfer_group` angeben. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=7000 \ -d currency=usd \ -d destination="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` Transfer und Zahlungsbeträge müssen nicht übereinstimmen. Sie können eine einzelne Zahlung auf mehrere Übertragungen aufteilen oder mehrere Zahlungen in eine einzelne Übertragung einbeziehen. Im folgenden Beispiel wird eine zusätzliche Übertragung erstellt, die der gleichen `transfer_group` zugeordnet ist. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=2000 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ### Überweisungsoptionen Sie können der Zeichenfolge `transfer_group` einen beliebigen Wert zuweisen, solange dieser für einen einzelnen Geschäftsvorgang steht. Zudem können Sie Überweisungen ohne zugehörige Zahlung oder Angabe einer `transfer_group` durchführen, zum Beispiel wenn Sie einen Dienstleister bezahlen müssen und diesem Vorgang keine Kundenzahlung zugrunde liegt. > Die `transfer_group` identifiziert nur zugehörige Objekte. Sie hat keine Auswirkungen auf die Standardfunktionalität. Um zu verhindern, dass eine Übertragung ausgeführt wird, bevor die Gelder aus der zugehörigen Zahlung verfügbar sind, verwenden Sie das Attribut `source_transaction` der Überweisung. Standardmäßig schlägt eine Übertragungsanfrage fehl, wenn der Betrag das [verfügbare Kontoguthaben](https://docs.stripe.com/connect/account-balances.md) der Plattform übersteigt. Stripe wiederholt fehlgeschlagene Übertragungsanfragen nicht automatisch. Sie können fehlgeschlagene Übertragungsanfragen für Übertragungen vermeiden, die mit Zahlungen verbunden sind. Wenn Sie die zugehörige Zahlung [als source_transaction der Überweisung](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability) angeben, ist die Übertragungsanfrage automatisch erfolgreich. Die Übertragung erfolgt jedoch erst, wenn die Gelder aus dieser Zahlung auf dem Plattformkonto verfügbar sind. > Wenn Sie separate Zahlungen und Überweisungen verwenden, berücksichtigen Sie dies bei der Planung Ihres *Auszahlungs* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit)-Plans. Automatische Auszahlungen können Transfers stören, für die keine `source_transaction` definiert ist. ### Asynchrone Zahlungsmethoden Wenn Sie *asynchrone Zahlungsmethoden* (wie ACH Debit oder SEPA Debit) verwenden, warten Sie auf das Ereignis [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), bevor Sie eine Übertragung erstellen. Im Gegensatz zu Destination Charges storniert Stripe eine Übertragung nicht automatisch, wenn die zugehörige asynchrone Zahlung fehlschlägt. Wenn Sie eine Übertragung erstellen und die Zahlung anschließend fehlschlägt, wird das Guthaben Ihrer Plattform mit dem Übertragungsbetrag belastet. Sie müssen dann manuell [die Übertragung stornieren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers), um die Geldmittel zurückzuerhalten. ## Integration testen #### Karten | Kartennummer | Szenario | So führen Sie den Test durch | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000002500003155 | Für die Kartenzahlung ist eine *Authentifizierung* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000000000009995 | Die Karte wird mit einem Ablehnungscode wie `insufficient_funds` abgelehnt. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 6205500000000000004 | Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | #### Bankumleitungen | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Bancontact, iDEAL | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit sofortiger Benachrichtigung nicht authentifizieren. | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | Pay by Bank | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | | Pay by Bank | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit verzögerter Benachrichtigung nicht authentifizieren. | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | BLIK | BLIK-Zahlungen können aus verschiedenen Gründen fehlschlagen. Es gibt sofortige Fehler (der Code ist abgelaufen oder ungültig), verzögerte Fehler (die Bank lehnt ab) oder Zeitüberschreitungen (der/die Kund/in hat nicht rechtzeitig reagiert). | Verwenden Sie E-Mail-Muster, um [die verschiedenen Fehler zu simulieren](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Banklastschriften | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SEPA-Lastschrift | Ihr/e Kund/in zahlt erfolgreich mit dem SEPA-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `AT321904300235473204` aus. Die bestätigte PaymentIntent geht zunächst in den Status „wird verarbeitet“ und dann drei Minuten später in den Status „erfolgreich“ über. | | SEPA-Lastschrift | Der Status der PaymentIntent Ihres/Ihrer Kund/in wechselt von `processing` zu `requires_payment_method`. | Füllen Sie das Formular mit der Kontonummer `AT861904300235473202` aus. | Hier finden Sie weitere Informationen zum [Testen](https://docs.stripe.com/testing.md) Ihrer Integration. ## Scannen von Karten aktivieren Um die Unterstützung für das Scannen von Karten für iOS zu aktivieren, setzen Sie `NSCameraUsageDescription` (**Datenschutz – Beschreibung Kameranutzung**) in der `Info.plist` Ihrer Anwendung und geben einen Grund für den Zugriff auf die Kamera an (z. B. „Zum Scannen von Karten“). ## Optional: Apple Pay aktivieren > Wenn auf Ihrem Checkout-Bildschirm die Schaltfläche **Apple Pay** angezeigt wird, folgen Sie der [Apple Pay-Anleitung](https://docs.stripe.com/apple-pay.md#present-payment-sheet) und verwenden Sie `ApplePayContext`, um Zahlungen über Ihre Apple Pay-Schaltfläche einzuziehen. Mit `PaymentSheet` können Sie andere Arten von Zahlungsmethoden abwickeln. ### Für eine Apple-Händler-ID registrieren Beantragen Sie eine Apple-Händler-ID, indem Sie sich auf der Apple Developer-Website [für eine neue Kennung registrieren](https://developer.apple.com/account/resources/identifiers/add/merchant). Tragen Sie eine Beschreibung und eine Kennung in das Formular ein. Die Beschreibung ist nur für Ihre internen Zwecke bestimmt und kann später geändert werden. Stripe empfiehlt, dass Sie den Namen Ihrer App als Kennung verwenden, zum Beispiel `merchant.com.{{YOUR_APP_NAME}}`. ### Neues Apple Pay-Zertifikat erstellen Erstellen Sie ein Zertifikat für Ihre App, um Zahlungsdaten zu verschlüsseln. Gehen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard, klicken Sie auf **Neue Anwendung hinzufügen** und befolgen Sie die Anleitung. Laden Sie eine Certificate Signing Request (CSR)-Datei herunter, um ein sicheres Zertifikat von Apple zu erhalten, mit dem Sie Apple Pay verwenden können. Eine CSR-Datei muss verwendet werden, um genau ein Zertifikat auszustellen. Wenn Sie Ihre Apple-Händler-ID wechseln, müssen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard gehen, um eine neue CSR und ein Zertifikat zu erhalten. ### Mit Xcode integrieren Fügen Sie Ihrer App die **Apple Pay**-Funktion hinzu. Öffnen Sie in Xcode Ihre Projekteinstellungen, klicken Sie auf die Registerkarte **Signing & Capabilities** (Anmeldung und Funktionen) und fügen Sie die **Apple Pay**-Funktion hinzu. Möglicherweise werden Sie an dieser Stelle aufgefordert, sich bei Ihrem Entwicklerkonto anzumelden. Wählen Sie die zuvor erstellte Händler-ID aus. Ihre App sollte nun Apple Pay unterstützen. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Apple Pay-Funktion in Xcode aktivieren ### Apple Pay hinzufügen #### Einmalige Zahlung Um Apple Pay zum PaymentSheet hinzuzufügen, setzen Sie [applePay](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp), nachdem Sie `PaymentSheet.Configuration` mit Ihrer Apple-Händler-ID und dem [Ländercode Ihres Unternehmens](https://dashboard.stripe.com/settings/account) initialisiert haben. #### iOS (Swift) ```swift var configuration = PaymentSheet.Configuration() configuration.applePay = .init( merchantId: "merchant.com.your_app_name", merchantCountryCode: "US" ) ``` #### Wiederkehrende Zahlungen Um Apple Pay zum PaymentSheet hinzuzufügen, setzen Sie [applePay](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp), nachdem Sie `PaymentSheet.Configuration` mit Ihrer Apple-Händler-ID und dem [Ländercode Ihres Unternehmens](https://dashboard.stripe.com/settings/account) initialisiert haben. Gemäß den [Apple-Richtlinien](https://developer.apple.com/design/human-interface-guidelines/apple-pay#Supporting-subscriptions) für wiederkehrende Zahlungen müssen Sie auch zusätzliche Attribute für `PKPaymentRequest` festlegen. Fügen Sie in [ApplePayConfiguration.paymentRequestHandlers](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/applepayconfiguration/handlers/paymentrequesthandler) einen Handler hinzu, um die [PKPaymentRequest.paymentSummaryItems](https://developer.apple.com/documentation/passkit/pkpaymentrequest/1619231-paymentsummaryitems) mit dem Betrag zu konfigurieren, den Sie berechnen möchten (z. B. 9,95 USD pro Monat). Sie können auch [Händler-Token](https://developer.apple.com/apple-pay/merchant-tokens/) übernehmen, indem Sie die Eigenschaften `recurringPaymentRequest` oder `automaticReloadPaymentRequest` für `PKPaymentRequest` festlegen. Weitere Informationen zur Verwendung wiederkehrender Zahlungen mit Apple Pay finden Sie in der [PassKit-Dokumentation von Apple](https://developer.apple.com/documentation/passkit/pkpaymentrequest). #### iOS (Swift) ```swift let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers( paymentRequestHandler: { request in // PKRecurringPaymentSummaryItem is available on iOS 15 or later if #available(iOS 15.0, *) { let billing = PKRecurringPaymentSummaryItem(label: "My Subscription", amount: NSDecimalNumber(string: "59.99")) // Payment starts today billing.startDate = Date() // Payment ends in one year billing.endDate = Date().addingTimeInterval(60 * 60 * 24 * 365) // Pay once a month. billing.intervalUnit = .month billing.intervalCount = 1 // recurringPaymentRequest is only available on iOS 16 or later if #available(iOS 16.0, *) { request.recurringPaymentRequest = PKRecurringPaymentRequest(paymentDescription: "Recurring", regularBilling: billing, managementURL: URL(string: "https://my-backend.example.com/customer-portal")!) request.recurringPaymentRequest?.billingAgreement = "You'll be billed $59.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'" } request.paymentSummaryItems = [billing] request.currencyCode = "USD" } else { // On older iOS versions, set alternative summary items. request.paymentSummaryItems = [PKPaymentSummaryItem(label: "Monthly plan starting July 1, 2022", amount: NSDecimalNumber(string: "59.99"), type: .final)] } return request } ) var configuration = PaymentSheet.Configuration() configuration.applePay = .init(merchantId: "merchant.com.your_app_name", merchantCountryCode: "US", customHandlers: customHandlers) ``` ### Bestellverfolgung Um Informationen zur [Bestellverfolgung](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) in iOS 16 oder höher hinzuzufügen, konfigurieren Sie einen [authorizationResultHandler](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/applepayconfiguration/handlers/authorizationresulthandler) in Ihren `PaymentSheet.ApplePayConfiguration.Handlers`. Stripe ruft Ihre Implementierung auf, nachdem die Zahlung durchgeführt wurde, aber bevor iOS das Apple Pay-Formular schließt. Rufen Sie in Ihrer Implementierung von `authorizationResultHandler` die Bestelldetails für die abgeschlossene Bestellung von Ihrem Server ab. Fügen Sie die Details dem bereitgestellten [PKPaymentAuthorizationResult](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationresult) hinzu und geben Sie das geänderte Ergebnis zurück. Weitere Informationen zur Bestellverfolgung finden Sie in der [Dokumentation zu Wallet-Bestellungen von Apple](https://developer.apple.com/documentation/walletorders). #### iOS (Swift) ```swift let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers( authorizationResultHandler: { result in do { // Fetch the order details from your service let myOrderDetails = try await MyAPIClient.shared.fetchOrderDetails(orderID: orderID) result.orderDetails = PKPaymentOrderDetails( orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, // "com.myapp.order" orderIdentifier: myOrderDetails.orderIdentifier, // "ABC123-AAAA-1111" webServiceURL: myOrderDetails.webServiceURL, // "https://my-backend.example.com/apple-order-tracking-backend" authenticationToken: myOrderDetails.authenticationToken) // "abc123" // Return your modified PKPaymentAuthorizationResult return result } catch { return PKPaymentAuthorizationResult(status: .failure, errors: [error]) } } ) var configuration = PaymentSheet.Configuration() configuration.applePay = .init(merchantId: "merchant.com.your_app_name", merchantCountryCode: "US", customHandlers: customHandlers) ``` ## Optional: Formular anpassen Alle Anpassungen werden mithilfe des [PaymentSheet.Configuration](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html)-Objekts konfiguriert. ### Erscheinungsbild Customize colors, fonts, and so on to match the look and feel of your app by using the [appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=ios). ### Layout der Zahlungsmethode Konfigurieren Sie das Layout der Zahlungsmethoden im Formular mit [paymentMethodLayout](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/configuration-swift.struct/paymentmethodlayout). Sie können sie horizontal oder vertikal anzeigen oder das Layout von Stripe automatisch optimieren lassen. ![](https://b.stripecdn.com/docs-statics-srv/assets/ios-mpe-payment-method-layouts.9d0513e2fcec5660378ba1824d952054.png) #### Swift ```swift var configuration = PaymentSheet.Configuration() configuration.paymentMethodLayout = .automatic ``` ### Adressen der Nutzer/innen erfassen Erfassen Sie lokale und internationale Versand- und Rechnungsadressen von Ihren Kundinnen und Kunden mithilfe des [Address Element](https://docs.stripe.com/elements/address-element.md?platform=ios). ### Anzeigename des Händlers Geben Sie einen kundenorientierten Unternehmensnamen an, indem Sie [merchantDisplayName](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:18StripePaymentSheet0bC0C13ConfigurationV19merchantDisplayNameSSvp) festlegen. Standardmäßig handelt es sich dabei um den Namen Ihrer App. #### Swift ```swift var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "My app, Inc." ``` ### Dunkelmodus `PaymentSheet` passt sich automatisch an die systemweiten Erscheinungsbildeinstellungen des Nutzers/der Nutzerin an (heller und dunkler Modus). Wenn Ihre App den Dunkelmodus nicht unterstützt, können Sie den [Stil](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:18StripePaymentSheet0bC0C13ConfigurationV5styleAC18UserInterfaceStyleOvp) auf den Modus `alwaysLight` oder `alwaysDark` einstellen. ```swift var configuration = PaymentSheet.Configuration() configuration.style = .alwaysLight ``` ### Standardabrechnungsdetails Um Standardwerte für die im Zahlungsformular erfassten Rechnungsdetails festzulegen, konfigurieren Sie die Eigenschaft `defaultBillingDetails`. Die Felder von `PaymentSheet` werden vorab mit den von Ihnen angegebenen Werten ausgefüllt. ```swift var configuration = PaymentSheet.Configuration() configuration.defaultBillingDetails.address.country = "US" configuration.defaultBillingDetails.email = "foo@bar.com" ``` ### Erfassung der Rechnungsdetails Verwenden Sie `billingDetailsCollectionConfiguration`, um anzugeben, wie Sie Rechnungsdetails im Zahlungsformular erfassen möchten. Sie können den Namen, die E-Mail-Adresse, die Telefonnummer und die Adresse Ihrer Kundinnen und Kunden erfassen. Wenn Sie nur die für die Zahlungsmethode erforderlichen Rechnungsdetails angeben möchten, legen Sie `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` auf „true“ fest. In diesem Fall werden `PaymentSheet.Configuration.defaultBillingDetails` als [Abrechnungsdetails](https://docs.stripe.com/api/payment_methods/object.md?lang=node#payment_method_object-billing_details) der Zahlungsmethode festgelegt. Wenn Sie zusätzliche Rechnungsdetails erfassen möchten, die für die Zahlungsmethode nicht unbedingt erforderlich sind, legen Sie `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` auf „false“ fest. In diesem Fall werden die über das `PaymentSheet` erfassten Rechnungsdetails als Rechnungsdetails der Zahlungsmethode festgelegt. ```swift var configuration = PaymentSheet.Configuration() configuration.defaultBillingDetails.email = "foo@bar.com" configuration.billingDetailsCollectionConfiguration.name = .always configuration.billingDetailsCollectionConfiguration.email = .never configuration.billingDetailsCollectionConfiguration.address = .full configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = true ``` > Wenden Sie sich an Ihren Rechtsbeistand bezüglich der Gesetze, die für das Erfassen von Informationen gelten. Erfassen Sie Telefonnummern nur, wenn Sie sie für die Transaktion benötigen. ## Optional: Zahlung in Ihrer Nutzeroberfläche abschließen Sie können das Zahlungsformular anzeigen, um nur die Details einer Zahlungsmethode zu erfassen, und später eine `confirm`-Methode aufrufen, um die Zahlung in der Nutzeroberfläche Ihrer App abzuschließen. Dies ist nützlich, wenn Sie eine nutzerspezifische Kaufschaltfläche haben oder zusätzliche Schritte erforderlich sind, nachdem Sie die Zahlungsdetails erfasst haben. ![](https://b.stripecdn.com/docs-statics-srv/assets/ios-multi-step.cd631ea4f1cd8cf3f39b6b9e1e92b6c5.png) Schließen Sie die Zahlung über die Nutzeroberfläche Ihrer App ab #### UIKit Die folgenden Schritte führen Sie durch den Abschluss der Zahlung in der Nutzeroberfläche Ihrer Nutzeroberfläche. Sehen Sie sich unsere Beispiel-Integration auf [GitHub](https://github.com/stripe/stripe-ios/blob/master/Example/PaymentSheet%20Example/PaymentSheet%20Example/ExampleCustomCheckoutViewController.swift) an. 1. Initialisieren Sie zunächst [PaymentSheet.FlowController](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller) anstelle von `PaymentSheet` und aktualisieren Sie Ihre Nutzeroberfläche mit der Eigenschaft `paymentOption`. Diese Eigenschaft enthält ein Bild und ein Label, die die ursprünglich ausgewählte Standardzahlungsmethode des/der Kund/in darstellen. ```swift PaymentSheet.FlowController.create(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) { [weak self] result in switch result { case .failure(let error): print(error) case .success(let paymentSheetFlowController): self?.paymentSheetFlowController = paymentSheetFlowController // Update your UI using paymentSheetFlowController.paymentOption } } ``` 1. Rufen Sie als Nächstes `presentPaymentOptions` auf, um die Zahlungsdetails zu erfassen. Wenn Sie fertig sind, aktualisieren Sie Ihre Nutzeroberfläche erneut mit der Eigenschaft `paymentOption`. ```swift paymentSheetFlowController.presentPaymentOptions(from: self) { // Update your UI using paymentSheetFlowController.paymentOption } ``` 1. Rufen Sie schließlich `confirm` auf. ```swift paymentSheetFlowController.confirm(from: self) { paymentResult in // MARK: Handle the payment result switch paymentResult { case .completed: print("Payment complete!") case .canceled: print("Canceled!") case .failed(let error): print(error) } } ``` #### SwiftUI Die folgenden Schritte führen Sie durch den Abschluss der Zahlung in der Nutzeroberfläche Ihrer Nutzeroberfläche. Sehen Sie sich unsere Beispielintegration auf [GitHub](https://github.com/stripe/stripe-ios/blob/master/Example/PaymentSheet%20Example/PaymentSheet%20Example/ExampleSwiftUICustomPaymentFlow.swift) an. 1. Initialisieren Sie zunächst [PaymentSheet.FlowController](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller) anstelle von `PaymentSheet`. Die Eigenschaft `paymentOption` enthält ein Bild und eine Beschriftung, die die aktuell ausgewählte Zahlungsmethode des/der Kund/in darstellen und die Sie in Ihrer Nutzeroberfläche verwenden können. ```swift PaymentSheet.FlowController.create(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) { [weak self] result in switch result { case .failure(let error): print(error) case .success(let paymentSheetFlowController): self?.paymentSheetFlowController = paymentSheetFlowController // Use the paymentSheetFlowController.paymentOption properties in your UI myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? "Select a payment method" myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage(systemName: "square.and.pencil")! } } ``` 1. Verwenden Sie [PaymentSheet.FlowController.PaymentOptionsButton](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller/paymentoptionsbutton), um die Schaltfläche anzuordnen, die das Formular zum Erfassen der Zahlungsdetails vorlegt. Wenn `PaymentSheet.FlowController` das Argument `onSheetDismissed` aufruft, spiegelt die `paymentOption` für die `PaymentSheet.FlowController`-Instanz die aktuell ausgewählte Zahlungsmethode wider. ```swift PaymentSheet.FlowController.PaymentOptionsButton( paymentSheetFlowController: paymentSheetFlowController, onSheetDismissed: { myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? "Select a payment method" myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage(systemName: "square.and.pencil")! }, content: { /* An example button */ HStack { Text(myPaymentMethodLabel) Image(uiImage: myPaymentMethodImage) } } ) ``` 1. Verwenden Sie [PaymentSheet.FlowController.PaymentOptionsButton](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller/paymentoptionsbutton), um die Schaltfläche zur Bestätigung der Zahlung anzuordnen. ```swift PaymentSheet.FlowController.ConfirmButton( paymentSheetFlowController: paymentSheetFlowController, onCompletion: { result in // MARK: Handle the payment result switch result { case .completed: print("Payment complete!") case .canceled: print("Canceled!") case .failed(let error): print(error) } }, content: { /* An example button */ Text("Pay") } ) ``` Wenn das Ergebnis von `PaymentSheetResult` `.completed` lautet, informieren Sie den/die Nutzer/in, (zum Beispiel durch die Anzeige einer Bestellbestätigung). Wenn Sie `allowsDelayedPaymentMethods` auf true festlegen, werden Zahlungsmethoden mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification) wie US-Bankkonten zugelassen. Für diese Zahlungsmethoden ist der endgültige Zahlungsstatus nicht bekannt, wenn das `PaymentSheet` abgeschlossen wird. Stattdessen ist sie erfolgreich oder schlägt fehl. Wenn Sie diese Art von Zahlungsmethoden unterstützen, informieren Sie den Kunden/die Kundin darüber, dass seine/ihre Bestellung bestätigt ist, und führen seine/ihre Bestellung erst aus (z. B. das Produkt versenden), wenn die Zahlung erfolgreich ist. ## Optional: Weitere Zahlungsmethoden aktivieren Navigieren Sie im Dashboard zu [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), um zu konfigurieren, welche Zahlungsmethoden Ihre verbundenen Konten akzeptieren. Änderungen an den Standardeinstellungen gelten für alle neuen und bestehenden verbundenen Konten. Informationen zu den Zahlungsmethoden finden Sie in den folgenden Ressourcen: - [Ein Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business), der Ihnen bei der Auswahl der richtigen Zahlungsmethoden für Ihre Plattform hilft. - [Kontofunktionen](https://docs.stripe.com/connect/account-capabilities.md), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre verbundenen Konten funktionieren. - [Zahlungsmethode und Produktsupport](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre Stripe-Produkte und Zahlungsabläufe geeignet sind. Für jede Zahlungsmethode können Sie eine der folgenden Dropdown-Optionen wählen: | | | | | **Standardmäßig aktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang. Einige Zahlungsmethoden können nur deaktiviert oder gesperrt werden. Dies liegt daran, dass Ihre verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) sie auf ihrer Seite mit Einstellungen aktivieren müssen. | | **Standardmäßig deaktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie die Möglichkeit, sie zu aktivieren. | | **Blockiert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie nicht die Möglichkeit, sie zu aktivieren. | ![Dropdown-Optionen für Zahlungsmethoden, die jeweils eine verfügbare Option anzeigen (blockiert, standardmäßig aktiviert, standardmäßig deaktiviert)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Optionen für Zahlungsmethoden Wenn Sie eine Änderung an einer Zahlungsmethode vornehmen, müssen Sie auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und auf **Speichern und anwenden**, um Ihre verbundenen Konten zu aktualisieren. ![Dialogfeld, das nach dem Klicken auf die Schaltfläche „Speichern“ angezeigt wird, mit einer Liste der Änderungen, die der/die Nutzer/in geändert hat](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Dialogfeld „Speichern“ ### Verbundenen Konten die Verwaltung von Zahlungsmethoden gestatten Stripe empfiehlt, dass Sie Ihren verbundenen Konten erlauben, ihre eigenen Zahlungsmethoden anzupassen. Diese Option ermöglicht jedem verbundenen Konto mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API), seine Seite mit den [Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) anzuzeigen und zu aktualisieren. Nur Inhaber/innen der verbundenen Konten können ihre Zahlungsmethoden anpassen. Das Stripe-Dashboard zeigt die Standard-Zahlungsmethoden an, die Sie auf alle neuen und bestehenden verbundenen Konten angewendet haben. Ihre verbundenen Konten können diese Standardeinstellungen außer Kraft setzen, mit Ausnahme der von Ihnen blockierten Zahlungsmethoden. Aktivieren Sie das Kontrollkästchen **Anpassung des Kontos**, um diese Option zu aktivieren. Sie müssen auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und dann **Speichern und übernehmen** auswählen, um diese Einstellung zu aktualisieren. ![Screenshot des Kontrollkästchens, das aktiviert werden muss, wenn Inhaber/innen verbundener Konten das Anpassen von Zahlungsmethoden gestattet ist](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Kontrollkästchen „Anpassung des Kontos“ ### Funktionen der Zahlungsmethode Damit Ihre verbundenen Konten zusätzliche Zahlungsmethoden akzeptieren können, müssen deren `Accounts` über aktive Zahlungsmethoden verfügen. Wenn Sie unter [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) die Option „Standardmäßig aktiviert“ für eine Zahlungsmethode ausgewählt haben, fordert Stripe automatisch die erforderliche Funktion für neue und bestehende verbundene Konten an, sofern diese die Verifizierungsanforderungen erfüllen. Wenn das verbundene Konto die Anforderungen nicht erfüllt oder Sie die direkte Kontrolle behalten möchten, können Sie die Funktion manuell im Dashboard oder über die API anfordern. Die meisten Zahlungsmethoden haben die gleichen Verifizierungsanforderungen wie die `card_payments`-Funktion, mit einigen Einschränkungen und Ausnahmen. Die [Tabelle der Zahlungs­methoden­funktionen](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) führt die Zahlungsmethoden auf, die eine zusätzliche Verifizierung erfordern. #### Dashboard [Suchen Sie im Dashboard ein verbundenes Konto](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts), um dessen Funktionen zu bearbeiten und ausstehende Verifizierungsanforderungen einzusehen. #### API Für ein bestehendes verbundenes Konto können Sie die vorhandenen Funktionen [auflisten](https://docs.stripe.com/api/capabilities/list.md), um festzustellen, ob Sie zusätzliche Funktionen anfordern müssen. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Fordern Sie zusätzliche Funktionen an, indem Sie die Funktionen jedes verbundenen Kontos [aktualisieren](https://docs.stripe.com/api/capabilities/update.md). ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Es kann zu einer Verzögerung kommen, bevor die angeforderte Funktion aktiv wird. Wenn für die Funktion Aktivierungsanforderungen gelten, enthält die Antwort diese in den `requirements`-Arrays. ## Abwicklungshändler angeben Der Abwicklungshändler ist abhängig von den [Funktionen](https://docs.stripe.com/connect/account-capabilities.md), die für ein Konto eingerichtet sind, und davon, wie eine Zahlung erstellt wird. Der Abwicklungshändler bestimmt, wessen Informationen für die Durchführung der Zahlung verwendet werden. Dazu gehört die Zahlungsbeschreibung in der Abrechnung (entweder die der Plattform oder die des verbundenen Kontos), die auf dem Kreditkarten- oder Kontoauszug des Kunden/der Kundin für diese Zahlung angezeigt wird. Durch die Angabe des Abwicklungshändlers können Sie genauer festlegen, für wen Zahlungen erstellt werden sollen. Einige Plattformen sind beispielsweise vorzugsweise der Abwicklungshändler, da Kundinnen/Kunden direkt mit ihrer Plattform interagieren (zum Beispiel On-Demand-Plattformen). Manche Plattformen verfügen jedoch über verbundene Konten, die stattdessen direkt mit Kundinnen/Kunden interagieren (zum Beispiel ein Ladengeschäft auf einer E-Commerce-Plattform). Bei diesen Szenarien ist es möglicherweise sinnvoller, wenn das verbundene Konto der Abwicklungshändler ist. Sie können den Parameter `on_behalf_of` auf die ID eines verbundenen Kontos setzen, um dieses Konto zum Abwicklungshändler für die Zahlung zu machen. Bei Verwendung von `on_behalf_of`: - Zahlungen werden im Land und in der *Abwicklungswährung* (The settlement currency is the currency your bank account uses) des verbundenen Kontos *abgewickelt* (When funds are available in your Stripe balance). - Es wird die Gebührenstruktur für das Land des verbundenen Kontos verwendet. - Die Zahlungsbeschreibung des verbundenen Kontos wird auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wenn sich das verbundene Konto in einem anderen Land als die Plattform befindet, werden die Adresse und die Telefonnummer des verbundenen Kontos auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wie viele Tage ein [ausstehendes Guthaben](https://docs.stripe.com/connect/account-balances.md) vor der Auszahlung zurückgehalten wird, hängt von der Einstellung [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) auf dem verbundenen Konto ab. > #### Accounts v2 API > > Sie können die Accounts v2 API nicht zur Verwaltung der Auszahlungseinstellungen verwenden. Bitte nutzen Sie die Accounts v1 API. Wenn `on_behalf_of` weggelassen wird, ist die Plattform das für die Zahlung verantwortliche Unternehmen. > Der Parameter `on_behalf_of` wird nur für verbundene Konten mit Zahlungsfunktionen wie [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments) unterstützt. Konten, denen der [Empfänger-Rahmenvertrag](https://docs.stripe.com/connect/service-agreement-types.md#recipient) zugrunde liegt, können keine `card_payments` oder andere Zahlungsfunktionen anfordern. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` ![](https://b.stripecdn.com/docs-statics-srv/assets/android-overview.471eaf89a760f5b6a757fd96b6bb9b60.png) Integrieren Sie die vorgefertigte Zahlungs-UI von Stripe in den Bezahlvorgang Ihrer Android-App mit der [PaymentSheet](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html)-Klasse. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe-API kommunizieren können. Nutzen Sie die 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 `stripe-android` 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 { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.0.2") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.0.2") } ``` > 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). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) von Stripe so, dass dieser Anfragen an die API stellen kann, wie beispielsweise in Ihrer Unterklasse `Application`: #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Verwenden Sie Ihre [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. ## Endpoint hinzufügen [Serverseitig] Diese Integration verwendet drei Stripe-API-Objekte: 1. [PaymentIntent](https://docs.stripe.com/api/payment_intents.md): Stripe verwendet diesen, um Ihre Absicht darzustellen, eine Zahlung von Ihren Kundinnen/Kunden anzufordern, wobei Abbuchungsversuche und Zahlungsstatusänderungen im gesamten Vorgang dokumentiert werden. 1. Ein/eine *Kunde/Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Um eine Zahlungsmethode für zukünftige Zahlungen einzurichten, muss diese einem Kunden/einer Kundin zugeordnet werden. Erstellen Sie ein Kundenobjekt, wenn Ihre Kundin/Ihr Kunde ein Konto bei Ihrem Unternehmen anlegt. Wenn eine Zahlung als Gast durchgeführt wird, können Sie vor der Zahlung ein Kundenobjekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. 1. Ein temporärer Kundenschlüssel (optional). Informationen zum Kundenobjekt sind vertraulich und können nicht direkt über die App abgerufen werden. Ein temporärer Schlüssel gewährt dem SDK vorübergehenden Zugriff auf den Kunden/die Kundin. Wenn Sie Karten speichern und wiederkehrenden Kunden und Kundinnen ermöglichen möchten, gespeicherte Karten wiederzuverwenden, benötigen Sie das Customer-Objekt und das temporäre Kundenschlüssel-Objekt für Ihre Integration. Andernfalls können Sie diese Objekte weglassen. Aus Sicherheitsgründen kann Ihre App diese Objekte nicht erstellen. Fügen Sie stattdessen einen Endpoint auf Ihrem Server hinzu, der: 1. Ruft den Kunden/die Kundin ab oder erstellt einen neuen/eine neue. 1. Erstellt einen temporären Schlüssel für den Kunden/die Kundin. 1. Erstellt einen PaymentIntent mit dem [Betrag](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), der [Währung](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), [dem Kunden/der Kundin](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) und einer [Übertragungsgruppe](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group), die der Übertragung von Geldern später zugeordnet werden sollen. 1. Gibt das *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) des PaymentIntent, das `secret` des temporären Schlüssels, die [Kunden-ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) und Ihren [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) an Ihre App zurück. Die Zahlungsmethoden, die Kundinnen/Kunden während des Bezahlvorgangs angezeigt werden, sind ebenfalls im PaymentIntent enthalten. Sie können Zahlungsmethoden durch Stripe aus Ihren [Dashboard-Einstellungen](https://dashboard.stripe.com/settings/payment_methods) abrufen lassen oder sie manuell auflisten. Sofern Ihre Integration keine codebasierte Option zum Anbieten von Zahlungsmethoden erfordert, listen Sie Zahlungsmethoden nicht manuell auf. Stripe wertet die Währung, die Einschränkungen für Zahlungsmethoden und andere Parameter aus, um die Liste der unterstützten Zahlungsmethoden zu ermitteln. Stripe priorisiert Zahlungsmethoden, die die Konversion steigern und die für die Währung und den Standort des Kunden/der Kundin am relevantesten sind. Wir verbergen Zahlungsmethoden mit niedrigerer Priorität in einem Überlaufmenü. #### Zahlungsmethoden über das Dashboard verwalten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="usd" \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter # is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d transfer_group="ORDER100" \ ``` #### Zahlungsmethoden manuell auflisten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="eur" \ -d "payment_method_types[]"="bancontact" \ -d "payment_method_types[]"="card" \ -d "payment_method_types[]"="ideal" \ -d "payment_method_types[]"="klarna" \ -d "payment_method_types[]"="sepa_debit" \ -d transfer_group="ORDER100" \ ``` Jede Zahlungsmethode muss die im PaymentIntent übergebene Währung unterstützen, und Ihr Unternehmen muss in einem der Länder ansässig sein, die jede Zahlungsmethode unterstützt. Auf der Seite [Optionen für die Integration von Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/integration-options.md) finden Sie weitere Informationen zu den unterstützten Zahlungsmethoden. ## Zahlungsformular integrieren [Clientseitig] Bevor das mobile Payment Element angezeigt wird, sollte Ihre Checkout-Seite: - Zeigen Sie die gekauften Produkte und den Gesamtbetrag an - Erfassen Sie erforderliche Versandinformationen mithilfe des [Address Element](https://docs.stripe.com/elements/address-element.md?platform=android). - Fügen Sie eine Checkout-Schaltfläche ein, um die Nutzeroberfläche von Stripe anzuzeigen #### Jetpack Compose [Initialisieren](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-builder/index.html) Sie eine `PaymentSheet`-Instanz innerhalb von `onCreate` Ihrer Checkout-Aktivität, wobei eine Methode zur Verarbeitung des Ergebnisses übergeben wird. ```kotlin import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps } ``` Rufen Sie als Nächstes das PaymentIntent-Client-Geheimnis, das Client-Geheimnis der Kunden-Sitzung, die Kundennummer und den veröffentlichbaren Schlüssel vom Endpoint ab, den Sie im vorigen Schritt erstellt haben. Legen Sie den veröffentlichbaren Schlüssel mithilfe von `PaymentConfiguration` fest und speichern Sie die anderen für den Zeitpunkt, an dem Sie das PaymentSheet präsentieren. ```kotlin import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberimport androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build()val context = LocalContext.current var customerConfig by remember { mutableStateOf(null) } varpaymentIntentClientSecret by remember { mutableStateOf(null) } LaunchedEffect(context) { // Make a request to your own server and retrieve payment configurations val networkResult = ... if (networkResult.isSuccess) {paymentIntentClientSecret = networkResult.paymentIntent customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession( id = networkResult.customer, clientSecret = networkResult.customerSessionClientSecret )PaymentConfiguration.init(context, networkResult.publishableKey)} } } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps } ``` Wenn der Kunde/die Kundin auf Ihre Checkout-Schaltfläche tippt, rufen Sie [presentWithPaymentIntent](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#1814490530%2FFunctions%2F2002900378) auf, um das Zahlungsformular anzuzeigen. Sobald die Zahlung kundenseitig abgeschlossen wurde, wird das Formular verworfen und [PaymentSheetResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html) mit einem [PaymentSheetResult](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result/index.html) aufgerufen. ```kotlin import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() val context = LocalContext.current var customerConfig by remember { mutableStateOf(null) } var paymentIntentClientSecret by remember { mutableStateOf(null) } LaunchedEffect(context) { // Make a request to your own server and retrieve payment configurations val networkResult = ... if (networkResult.isSuccess) { paymentIntentClientSecret = networkResult.paymentIntent customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession( id = networkResult.customer, clientSecret = networkResult.customerSessionClientSecret ) PaymentConfiguration.init(context, networkResult.publishableKey) } }Button( onClick = { val currentConfig = customerConfig val currentClientSecret =paymentIntentClientSecret if (currentConfig != null && currentClientSecret != null) { presentPaymentSheet(paymentSheet, currentConfig, currentClientSecret) } } ) { Text("Checkout") } }private fun presentPaymentSheet( paymentSheet: PaymentSheet, customerConfig: PaymentSheet.CustomerConfiguration,paymentIntentClientSecret: String ) { paymentSheet.presentWithPaymentIntent(paymentIntentClientSecret, PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name") .customer(customerConfig) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. .allowsDelayedPaymentMethods(true) .build() ) } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {when(paymentSheetResult) { is PaymentSheetResult.Canceled -> { print("Canceled") } is PaymentSheetResult.Failed -> { print("Error: ${paymentSheetResult.error}") } is PaymentSheetResult.Completed -> { // Display for example, an order confirmation screen print("Completed") } } } ``` #### Ansichten (klassisch) [Initialisieren](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#-394860221%2FConstructors%2F2002900378) Sie innerhalb von `onCreate` Ihrer Checkout-Aktivität eine `PaymentSheet`-Instanz und übergeben Sie eine Methode, um das Ergebnis zu bearbeiten. #### Kotlin ```kotlin import com.stripe.android.paymentsheet.PaymentSheet class CheckoutActivity : AppCompatActivity() { lateinit var paymentSheet: PaymentSheet override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) paymentSheet = PaymentSheet.Builder(::onPaymentSheetResult).build(this) } fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps } } ``` Rufen Sie als Nächstes das PaymentIntent-Client-Geheimnis, das Client-Geheimnis der Kunden-Sitzung, die Kundennummer und den veröffentlichbaren Schlüssel vom Endpoint ab, den Sie im vorigen Schritt erstellt haben. Legen Sie den veröffentlichbaren Schlüssel mithilfe von `PaymentConfiguration` fest und speichern Sie die anderen für den Zeitpunkt, an dem Sie das PaymentSheet präsentieren. #### Kotlin ```kotlin import com.stripe.android.paymentsheet.PaymentSheet class CheckoutActivity : AppCompatActivity() { lateinit var paymentSheet: PaymentSheetlateinit var customerConfig: PaymentSheet.CustomerConfiguration lateinit varpaymentIntentClientSecret: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) paymentSheet = PaymentSheet.Builder(::onPaymentSheetResult).build(this)lifecycleScope.launch { // Make a request to your own server and retrieve payment configurations val networkResult = MyBackend.getPaymentConfig() if (networkResult.isSuccess) {paymentIntentClientSecret = networkResult.paymentIntent customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession( id = networkResult.customer, clientSecret = networkResult.customerSessionClientSecret )PaymentConfiguration.init(context, networkResult.publishableKey)} } } fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps } } ``` Wenn der Kunde/die Kundin auf Ihre Checkout-Schaltfläche tippt, rufen Sie [presentWithPaymentIntent](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#1814490530%2FFunctions%2F2002900378) auf, um das Zahlungsformular anzuzeigen. Sobald die Zahlung kundenseitig abgeschlossen wurde, wird das Formular verworfen und [PaymentSheetResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html) mit einem [PaymentSheetResult](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result/index.html) aufgerufen. #### Kotlin ```kotlin // ... class CheckoutActivity : AppCompatActivity() { lateinit var paymentSheet: PaymentSheet lateinit var customerConfig: PaymentSheet.CustomerConfiguration lateinit var paymentIntentClientSecret: String // ...fun presentPaymentSheet() { paymentSheet.presentWithPaymentIntent(paymentIntentClientSecret, PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name") .customer(customerConfig) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. .allowsDelayedPaymentMethods(true) .build() ) } fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {when(paymentSheetResult) { is PaymentSheetResult.Canceled -> { print("Canceled") } is PaymentSheetResult.Failed -> { print("Error: ${paymentSheetResult.error}") } is PaymentSheetResult.Completed -> { // Display for example, an order confirmation screen print("Completed") } } } } ``` Wenn Sie `allowsDelayedPaymentMethods` auf true festlegen, werden Zahlungsmethoden mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification) wie US-Bankkonten zugelassen. Für diese Zahlungsmethoden ist der endgültige Zahlungsstatus nicht bekannt, wenn das `PaymentSheet` abgeschlossen wird. Stattdessen ist sie erfolgreich oder schlägt fehl. Wenn Sie diese Art von Zahlungsmethoden unterstützen, informieren Sie den Kunden/die Kundin darüber, dass seine/ihre Bestellung bestätigt ist, und führen seine/ihre Bestellung erst aus (z. B. das Produkt versenden), wenn die Zahlung erfolgreich ist. ## Ereignisse nach Zahlung verarbeiten [Serverseitig] Stripe sendet ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie [Webhook-Tool im Dashboard](https://dashboard.stripe.com/webhooks) oder folgen Sie der [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und führen Sie Aktionen aus, wie beispielsweise das Senden einer Bestellbestätigung per E-Mail, das Protokollieren des Verkaufs in der Datenbank oder das Starten eines Versand-Workflows. Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnten die Kund/innen das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist. Bösartige Clients könnten dann die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie [verschiedene Arten von Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide) mit einer einzelnen Integration akzeptieren. Neben der Abwicklung des `payment_intent.succeeded`-Ereignisses empfehlen wir die Abwicklung von diesen weiteren Ereignissen, wenn Sie Zahlungen mit dem Payment Element erfassen: | Ereignis | Beschreibung | Aktion | | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Wird gesendet, wenn Kundinnen und Kunden eine Zahlung erfolgreich abgeschlossen haben. | Senden Sie den Kund/innen eine Auftragsbestätigung und *wickeln* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) Sie die Bestellung ab. | | [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Wird gesendet, wenn eine/e Kund/in eine Zahlung erfolgreich veranlasst hat, die Zahlung aber noch nicht abgeschlossen ist. Dieses Ereignis wird am häufigsten gesendet, wenn der Kunde/die Kundin eine Bankabbuchung veranlasst. In Zukunft folgt darauf entweder ein `payment_intent.succeeded`- oder ein `payment_intent.payment_failed`-Ereignis. | Senden Sie eine Bestellbestätigung an die Kund/innen, in der angegeben ist, dass die Zahlung noch aussteht. Bei digitalen Waren können Sie die Bestellung abwickeln, bevor Sie darauf warten, dass die Zahlung erfolgt. | | [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Wird gesendet, wenn ein Kunde/eine Kundin einen Zahlungsversuch durchführt, die Zahlung jedoch fehlschlägt. | Wenn eine Zahlung von `processing` zu `payment_failed` übergeht, bieten Sie der Kundin/dem Kunden einen weiteren Zahlungsversuch an. | ## Transfer erstellen [Serverseitig] Senden Sie auf Ihrem Server Gelder von Ihrem Konto zu einem verbundenen Konto, indem Sie eine [Übertragung](https://docs.stripe.com/api/transfers/create.md) erstellen und die verwendete `transfer_group` angeben. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=7000 \ -d currency=usd \ -d destination="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` Transfer und Zahlungsbeträge müssen nicht übereinstimmen. Sie können eine einzelne Zahlung auf mehrere Übertragungen aufteilen oder mehrere Zahlungen in eine einzelne Übertragung einbeziehen. Im folgenden Beispiel wird eine zusätzliche Übertragung erstellt, die der gleichen `transfer_group` zugeordnet ist. ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=2000 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ### Überweisungsoptionen Sie können der Zeichenfolge `transfer_group` einen beliebigen Wert zuweisen, solange dieser für einen einzelnen Geschäftsvorgang steht. Zudem können Sie Überweisungen ohne zugehörige Zahlung oder Angabe einer `transfer_group` durchführen, zum Beispiel wenn Sie einen Dienstleister bezahlen müssen und diesem Vorgang keine Kundenzahlung zugrunde liegt. > Die `transfer_group` identifiziert nur zugehörige Objekte. Sie hat keine Auswirkungen auf die Standardfunktionalität. Um zu verhindern, dass eine Übertragung ausgeführt wird, bevor die Gelder aus der zugehörigen Zahlung verfügbar sind, verwenden Sie das Attribut `source_transaction` der Überweisung. Standardmäßig schlägt eine Übertragungsanfrage fehl, wenn der Betrag das [verfügbare Kontoguthaben](https://docs.stripe.com/connect/account-balances.md) der Plattform übersteigt. Stripe wiederholt fehlgeschlagene Übertragungsanfragen nicht automatisch. Sie können fehlgeschlagene Übertragungsanfragen für Übertragungen vermeiden, die mit Zahlungen verbunden sind. Wenn Sie die zugehörige Zahlung [als source_transaction der Überweisung](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability) angeben, ist die Übertragungsanfrage automatisch erfolgreich. Die Übertragung erfolgt jedoch erst, wenn die Gelder aus dieser Zahlung auf dem Plattformkonto verfügbar sind. > Wenn Sie separate Zahlungen und Überweisungen verwenden, berücksichtigen Sie dies bei der Planung Ihres *Auszahlungs* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit)-Plans. Automatische Auszahlungen können Transfers stören, für die keine `source_transaction` definiert ist. ### Asynchrone Zahlungsmethoden Wenn Sie *asynchrone Zahlungsmethoden* (wie ACH Debit oder SEPA Debit) verwenden, warten Sie auf das Ereignis [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), bevor Sie eine Übertragung erstellen. Im Gegensatz zu Destination Charges storniert Stripe eine Übertragung nicht automatisch, wenn die zugehörige asynchrone Zahlung fehlschlägt. Wenn Sie eine Übertragung erstellen und die Zahlung anschließend fehlschlägt, wird das Guthaben Ihrer Plattform mit dem Übertragungsbetrag belastet. Sie müssen dann manuell [die Übertragung stornieren](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers), um die Geldmittel zurückzuerhalten. ## Integration testen #### Karten | Kartennummer | Szenario | So führen Sie den Test durch | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000002500003155 | Für die Kartenzahlung ist eine *Authentifizierung* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase) erforderlich. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 4000000000009995 | Die Karte wird mit einem Ablehnungscode wie `insufficient_funds` abgelehnt. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | | 6205500000000000004 | Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern. | Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an. | #### Bankumleitungen | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Bancontact, iDEAL | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit sofortiger Benachrichtigung nicht authentifizieren. | Wählen Sie eine beliebige, auf Weiterleitung basierende Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | Pay by Bank | Ihr Kunde/Ihre Kundin zahlt erfolgreich mit einer auf Weiterleitung basierenden Zahlungsmethode mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung abschließen**. | | Pay by Bank | Ihr/e Kund/in konnte sich auf der iDEAL-Weiterleitungsseite für eine auf Weiterleitung basierende Zahlungsmethode mit verzögerter Benachrichtigung nicht authentifizieren. | Wählen Sie die Zahlungsmethode aus, füllen Sie die erforderlichen Informationen aus und bestätigen Sie die Zahlung. Klicken Sie dann auf der Weiterleitungsseite auf **Testzahlung fehlgeschlagen**. | | BLIK | BLIK-Zahlungen können aus verschiedenen Gründen fehlschlagen. Es gibt sofortige Fehler (der Code ist abgelaufen oder ungültig), verzögerte Fehler (die Bank lehnt ab) oder Zeitüberschreitungen (der/die Kund/in hat nicht rechtzeitig reagiert). | Verwenden Sie E-Mail-Muster, um [die verschiedenen Fehler zu simulieren](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) | #### Banklastschriften | Zahlungsmethode | Szenario | So führen Sie den Test durch | | ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SEPA-Lastschrift | Ihr/e Kund/in zahlt erfolgreich mit dem SEPA-Lastschriftverfahren. | Füllen Sie das Formular mit der Kontonummer `AT321904300235473204` aus. Die bestätigte PaymentIntent geht zunächst in den Status „wird verarbeitet“ und dann drei Minuten später in den Status „erfolgreich“ über. | | SEPA-Lastschrift | Der Status der PaymentIntent Ihres/Ihrer Kund/in wechselt von `processing` zu `requires_payment_method`. | Füllen Sie das Formular mit der Kontonummer `AT861904300235473202` aus. | Hier finden Sie weitere Informationen zum [Testen](https://docs.stripe.com/testing.md) Ihrer Integration. ## Optional: Google Pay aktivieren ### Integration einrichten Um Google Pay zu verwenden, aktivieren Sie zuerst die Google Pay API, indem Sie dem Tag `` Ihrer Datei **AndroidManifest.xml** Folgendes hinzufügen: ```xml ... ``` Weitere Informationen finden Sie in der [Google Pay API](https://developers.google.com/pay/api/android/guides/setup) für Android. ### Google Pay hinzufügen Um Google Pay zu Ihrer Integration hinzuzufügen, übergeben Sie [PaymentSheet.GooglePayConfiguration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-google-pay-configuration/index.html) mit Ihrer Google Pay-Umgebung (Produktion oder Test) sowie den [Ländercode Ihres Unternehmens](https://dashboard.stripe.com/settings/account), wenn Sie [PaymentSheet.Configuration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html). #### Kotlin ```kotlin val googlePayConfiguration = PaymentSheet.GooglePayConfiguration( environment = PaymentSheet.GooglePayConfiguration.Environment.Test, countryCode = "US", currencyCode = "USD" // Required for Setup Intents, optional for Payment Intents ) val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name") .googlePay(googlePayConfiguration) .build() ``` ### Google Pay testen Google bietet Ihnen die Möglichkeit, Zahlungen über seine [Testkartensuite](https://developers.google.com/pay/api/android/guides/resources/test-card-suite) zu testen. Sie können Stripe-[Testkarten](https://docs.stripe.com/testing.md) mit der Testsuite verwenden. In einem Land, in dem Google Pay unterstützt wird, müssen Sie Google Pay mit einem physischen Android-Gerät anstelle eines simulierten Geräts testen. Melden Sie sich mit einer echten in Google Wallet gespeicherten Karte bei einem Google-Konto auf Ihrem Testgerät an. ## Optional: Formular anpassen Alle Anpassungen werden mithilfe des Objekts [PaymentSheet.Configuration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html) konfiguriert. ### Erscheinungsbild Customize colors, fonts, and more to match the look and feel of your app by using the [appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=android). ### Layout der Zahlungsmethode Konfigurieren Sie das Layout der Zahlungsmethoden im Formular mit [paymentMethodLayout](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/-builder/index.html#2123253356%2FFunctions%2F2002900378). Sie können sie horizontal oder vertikal anzeigen oder das Layout von Stripe automatisch optimieren lassen. ![](https://b.stripecdn.com/docs-statics-srv/assets/android-mpe-payment-method-layouts.3bcfe828ceaad1a94e0572a22d91733f.png) #### Kotlin ```kotlin PaymentSheet.Configuration.Builder("Example, Inc.") .paymentMethodLayout(PaymentSheet.PaymentMethodLayout.Automatic) .build() ``` ### Adressen der Nutzer/innen erfassen Erfassen Sie lokale und internationale Versand- und Rechnungsadressen von Ihren Kundinnen und Kunden mithilfe des [Address Element](https://docs.stripe.com/elements/address-element.md?platform=android). ### Anzeigename des Unternehmens Geben Sie einen kundenorientierten Unternehmensnamen an, indem Sie [merchantDisplayName](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html#-191101533%2FProperties%2F2002900378) festlegen. Standardmäßig handelt es sich dabei um den Namen Ihrer App. #### Kotlin ```kotlin PaymentSheet.Configuration.Builder( merchantDisplayName = "My app, Inc." ).build() ``` ### Dunkelmodus Standardmäßig passt `PaymentSheet` sich automatisch an die systemweiten Erscheinungsbildeinstellungen des/der Nutzer/in an (heller und dunkler Modus). Dies können Sie ä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) ``` ### Standardabrechnungsdetails Um Standardwerte für die im Zahlungsformular erfassten Rechnungsdetails festzulegen, konfigurieren Sie die Eigenschaft `defaultBillingDetails`. Die Felder von `PaymentSheet` werden vorab mit den von Ihnen angegebenen Werten ausgefüllt. #### Kotlin ```kotlin val address = PaymentSheet.Address(country = "US") val billingDetails = PaymentSheet.BillingDetails( address = address, email = "foo@bar.com" ) val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.") .defaultBillingDetails(billingDetails) .build() ``` ### Erfassung von Abrechnungsdetails konfigurieren `BillingDetailsCollectionConfiguration` verwenden, um anzugeben, wie Sie Rechnungsdetails im PaymentSheet erfassen möchten. Sie können den Namen, die E-Mail-Adresse, die Telefonnummer und die Adresse Ihrer Kundinnen und Kunden erfassen. Wenn Sie dem PaymentMethod-Objekt Standard-Abrechnungsdetails zuordnen möchten, auch wenn diese Felder nicht auf der Nutzeroberfläche erfasst werden, legen Sie `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` auf `true` fest. #### Kotlin ```kotlin val billingDetails = PaymentSheet.BillingDetails( email = "foo@bar.com" ) val billingDetailsCollectionConfiguration = BillingDetailsCollectionConfiguration( attachDefaultsToPaymentMethod = true, name = BillingDetailsCollectionConfiguration.CollectionMode.Always, email = BillingDetailsCollectionConfiguration.CollectionMode.Never, address = BillingDetailsCollectionConfiguration.AddressCollectionMode.Full, ) val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.") .defaultBillingDetails(billingDetails) .billingDetailsCollectionConfiguration(billingDetailsCollectionConfiguration) .build() ``` > Wenden Sie sich an Ihren Rechtsbeistand bezüglich der Gesetze, die für das Erfassen von Informationen gelten. Erfassen Sie Telefonnummern nur, wenn Sie sie für die Transaktion benötigen. ## Optional: Zahlung in Ihrer Nutzeroberfläche abschließen Sie können das Zahlungsformular anzeigen, um nur die Details einer Zahlungsmethode zu erfassen, und die Zahlung in der Nutzeroberfläche Ihrer App abzuschließen. Dies ist nützlich, wenn Sie eine nutzerspezifische Kaufschaltfläche haben oder zusätzliche Schritte erfordern, nachdem die Zahlungsdetails erfasst wurden. ![](https://b.stripecdn.com/docs-statics-srv/assets/android-multi-step.84d8a0a44b1baa596bda491322b6d9fd.png) > Eine Muster-Integration ist [auf unserem GitHub verfügbar](https://github.com/stripe/stripe-android/blob/master/paymentsheet-example/src/main/java/com/stripe/android/paymentsheet/example/samples/ui/paymentsheet/custom_flow/CustomFlowActivity.kt). 1. Initialisieren Sie zunächst [PaymentSheet.FlowController](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html) anstelle von `PaymentSheet` mit einer der [Builder](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/-builder/index.html)-Methoden. #### Android (Kotlin) ```kotlin class CheckoutActivity : AppCompatActivity() { private lateinit var flowController: PaymentSheet.FlowController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val flowController = PaymentSheet.FlowController.Builder( resultCallback = ::onPaymentSheetResult, paymentOptionResultCallback = ::onPaymentOption, ).build(this) } } ``` 1. Rufen Sie als Nächstes `configureWithPaymentIntent` mit den Stripe-Objektschlüsseln auf, die Sie von Ihrem Backend abgerufen haben, und aktualisieren Ihre Nutzeroberfläche im Callback mithilfe von [getPaymentOption()](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#-2091462043%2FFunctions%2F2002900378). Diese enthält ein Bild und ein Label, das die aktuell vom Kunden/von der Kundin ausgewählte Zahlungsmethode darstellt. #### Android (Kotlin) ```kotlin flowController.configureWithPaymentIntent( paymentIntentClientSecret = paymentIntentClientSecret, configuration = PaymentSheet.Configuration.Builder("Example, Inc.") .customer(PaymentSheet.CustomerConfiguration( id = customerId, ephemeralKeySecret = ephemeralKeySecret )) .build() ) { isReady, error -> if (isReady) { // Update your UI using `flowController.getPaymentOption()` } else { // handle FlowController configuration failure } } ``` 1. Rufen Sie als Nächstes [presentPaymentOptions](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#449924733%2FFunctions%2F2002900378) auf, um die Zahlungsdetails zu erfassen. Wenn der Kunde/die Kundin fertig ist, beendet sich das Formular von selbst und ruft den zuvor in `create` übergebenen [paymentOptionCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-option-callback/index.html) auf. Setzen Sie diese Methode ein, um Ihre Nutzeroberfläche mit der zurückgegebenen `paymentOption` zu aktualisieren. #### Android (Kotlin) ```kotlin // ... flowController.presentPaymentOptions() // ... private fun onPaymentOption(paymentOptionResult: PaymentOptionResult) { val paymentOption = paymentOptionResult.paymentOption if (paymentOption != null) { paymentMethodButton.text = paymentOption.label paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds( paymentOption.drawableResourceId, 0, 0, 0 ) } else { paymentMethodButton.text = "Select" paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds( null, null, null, null ) } } ``` 1. Rufen Sie schließlich [„bestätigen“](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#-479056656%2FFunctions%2F2002900378) auf, um die Zahlung abzuschließen. Wenn der Kunde/die Kundin den Vorgang abgeschlossen hat, beendet sich das Formular von selbst und ruft das zuvor in `create` übergebene [paymentResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html#237248767%2FFunctions%2F2002900378) auf. #### Android (Kotlin) ```kotlin // ... flowController.confirmPayment() // ... private fun onPaymentSheetResult( paymentSheetResult: PaymentSheetResult ) { when (paymentSheetResult) { is PaymentSheetResult.Canceled -> { // Payment canceled } is PaymentSheetResult.Failed -> { // Payment Failed. See logcat for details or inspect paymentSheetResult.error } is PaymentSheetResult.Completed -> { // Payment Complete } } } ``` Wenn Sie `allowsDelayedPaymentMethods` auf true festlegen, werden Zahlungsmethoden mit [verzögerter Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification) wie US-Bankkonten zugelassen. Für diese Zahlungsmethoden ist der endgültige Zahlungsstatus nicht bekannt, wenn das `PaymentSheet` abgeschlossen wird. Stattdessen ist sie erfolgreich oder schlägt fehl. Wenn Sie diese Art von Zahlungsmethoden unterstützen, informieren Sie den Kunden/die Kundin darüber, dass seine/ihre Bestellung bestätigt ist, und führen seine/ihre Bestellung erst aus (z. B. das Produkt versenden), wenn die Zahlung erfolgreich ist. ## Optional: Weitere Zahlungsmethoden aktivieren Navigieren Sie im Dashboard zu [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), um zu konfigurieren, welche Zahlungsmethoden Ihre verbundenen Konten akzeptieren. Änderungen an den Standardeinstellungen gelten für alle neuen und bestehenden verbundenen Konten. Informationen zu den Zahlungsmethoden finden Sie in den folgenden Ressourcen: - [Ein Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business), der Ihnen bei der Auswahl der richtigen Zahlungsmethoden für Ihre Plattform hilft. - [Kontofunktionen](https://docs.stripe.com/connect/account-capabilities.md), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre verbundenen Konten funktionieren. - [Zahlungsmethode und Produktsupport](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support), um sicherzustellen, dass die gewählten Zahlungsmethoden für Ihre Stripe-Produkte und Zahlungsabläufe geeignet sind. Für jede Zahlungsmethode können Sie eine der folgenden Dropdown-Optionen wählen: | | | | | **Standardmäßig aktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang. Einige Zahlungsmethoden können nur deaktiviert oder gesperrt werden. Dies liegt daran, dass Ihre verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) sie auf ihrer Seite mit Einstellungen aktivieren müssen. | | **Standardmäßig deaktiviert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie die Möglichkeit, sie zu aktivieren. | | **Blockiert** | Ihre verbundenen Konten akzeptieren diese Zahlungsmethode beim Bezahlvorgang nicht. Wenn Sie Ihren verbundenen Konten mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) erlauben, ihre eigenen Zahlungsmethoden zu verwalten, haben sie nicht die Möglichkeit, sie zu aktivieren. | ![Dropdown-Optionen für Zahlungsmethoden, die jeweils eine verfügbare Option anzeigen (blockiert, standardmäßig aktiviert, standardmäßig deaktiviert)](https://b.stripecdn.com/docs-statics-srv/assets/dropdowns.ef651d721d5939d81521dd34dde4577f.png) Optionen für Zahlungsmethoden Wenn Sie eine Änderung an einer Zahlungsmethode vornehmen, müssen Sie auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und auf **Speichern und anwenden**, um Ihre verbundenen Konten zu aktualisieren. ![Dialogfeld, das nach dem Klicken auf die Schaltfläche „Speichern“ angezeigt wird, mit einer Liste der Änderungen, die der/die Nutzer/in geändert hat](https://b.stripecdn.com/docs-statics-srv/assets/dialog.a56ea7716f60db9778706790320d13be.png) Dialogfeld „Speichern“ ### Verbundenen Konten die Verwaltung von Zahlungsmethoden gestatten Stripe empfiehlt, dass Sie Ihren verbundenen Konten erlauben, ihre eigenen Zahlungsmethoden anzupassen. Diese Option ermöglicht jedem verbundenen Konto mit *Zugriff auf das Stripe-Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API), seine Seite mit den [Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) anzuzeigen und zu aktualisieren. Nur Inhaber/innen der verbundenen Konten können ihre Zahlungsmethoden anpassen. Das Stripe-Dashboard zeigt die Standard-Zahlungsmethoden an, die Sie auf alle neuen und bestehenden verbundenen Konten angewendet haben. Ihre verbundenen Konten können diese Standardeinstellungen außer Kraft setzen, mit Ausnahme der von Ihnen blockierten Zahlungsmethoden. Aktivieren Sie das Kontrollkästchen **Anpassung des Kontos**, um diese Option zu aktivieren. Sie müssen auf **Änderungen überprüfen** in der Leiste unten im Bildschirm klicken und dann **Speichern und übernehmen** auswählen, um diese Einstellung zu aktualisieren. ![Screenshot des Kontrollkästchens, das aktiviert werden muss, wenn Inhaber/innen verbundener Konten das Anpassen von Zahlungsmethoden gestattet ist](https://b.stripecdn.com/docs-statics-srv/assets/checkbox.275bd35d2a025272f03af029a144e577.png) Kontrollkästchen „Anpassung des Kontos“ ### Funktionen der Zahlungsmethode Damit Ihre verbundenen Konten zusätzliche Zahlungsmethoden akzeptieren können, müssen deren `Accounts` über aktive Zahlungsmethoden verfügen. Wenn Sie unter [Zahlungsmethoden für Ihre verbundenen Konten verwalten](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) die Option „Standardmäßig aktiviert“ für eine Zahlungsmethode ausgewählt haben, fordert Stripe automatisch die erforderliche Funktion für neue und bestehende verbundene Konten an, sofern diese die Verifizierungsanforderungen erfüllen. Wenn das verbundene Konto die Anforderungen nicht erfüllt oder Sie die direkte Kontrolle behalten möchten, können Sie die Funktion manuell im Dashboard oder über die API anfordern. Die meisten Zahlungsmethoden haben die gleichen Verifizierungsanforderungen wie die `card_payments`-Funktion, mit einigen Einschränkungen und Ausnahmen. Die [Tabelle der Zahlungs­methoden­funktionen](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) führt die Zahlungsmethoden auf, die eine zusätzliche Verifizierung erfordern. #### Dashboard [Suchen Sie im Dashboard ein verbundenes Konto](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts), um dessen Funktionen zu bearbeiten und ausstehende Verifizierungsanforderungen einzusehen. #### API Für ein bestehendes verbundenes Konto können Sie die vorhandenen Funktionen [auflisten](https://docs.stripe.com/api/capabilities/list.md), um festzustellen, ob Sie zusätzliche Funktionen anfordern müssen. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \ -u "<>:" ``` Fordern Sie zusätzliche Funktionen an, indem Sie die Funktionen jedes verbundenen Kontos [aktualisieren](https://docs.stripe.com/api/capabilities/update.md). ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \ -u "<>:" \ -d requested=true ``` Es kann zu einer Verzögerung kommen, bevor die angeforderte Funktion aktiv wird. Wenn für die Funktion Aktivierungsanforderungen gelten, enthält die Antwort diese in den `requirements`-Arrays. ## Abwicklungshändler angeben Der Abwicklungshändler ist abhängig von den [Funktionen](https://docs.stripe.com/connect/account-capabilities.md), die für ein Konto eingerichtet sind, und davon, wie eine Zahlung erstellt wird. Der Abwicklungshändler bestimmt, wessen Informationen für die Durchführung der Zahlung verwendet werden. Dazu gehört die Zahlungsbeschreibung in der Abrechnung (entweder die der Plattform oder die des verbundenen Kontos), die auf dem Kreditkarten- oder Kontoauszug des Kunden/der Kundin für diese Zahlung angezeigt wird. Durch die Angabe des Abwicklungshändlers können Sie genauer festlegen, für wen Zahlungen erstellt werden sollen. Einige Plattformen sind beispielsweise vorzugsweise der Abwicklungshändler, da Kundinnen/Kunden direkt mit ihrer Plattform interagieren (zum Beispiel On-Demand-Plattformen). Manche Plattformen verfügen jedoch über verbundene Konten, die stattdessen direkt mit Kundinnen/Kunden interagieren (zum Beispiel ein Ladengeschäft auf einer E-Commerce-Plattform). Bei diesen Szenarien ist es möglicherweise sinnvoller, wenn das verbundene Konto der Abwicklungshändler ist. Sie können den Parameter `on_behalf_of` auf die ID eines verbundenen Kontos setzen, um dieses Konto zum Abwicklungshändler für die Zahlung zu machen. Bei Verwendung von `on_behalf_of`: - Zahlungen werden im Land und in der *Abwicklungswährung* (The settlement currency is the currency your bank account uses) des verbundenen Kontos *abgewickelt* (When funds are available in your Stripe balance). - Es wird die Gebührenstruktur für das Land des verbundenen Kontos verwendet. - Die Zahlungsbeschreibung des verbundenen Kontos wird auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wenn sich das verbundene Konto in einem anderen Land als die Plattform befindet, werden die Adresse und die Telefonnummer des verbundenen Kontos auf der Kreditkartenabrechnung des Kunden/der Kundin angezeigt. - Wie viele Tage ein [ausstehendes Guthaben](https://docs.stripe.com/connect/account-balances.md) vor der Auszahlung zurückgehalten wird, hängt von der Einstellung [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) auf dem verbundenen Konto ab. > #### Accounts v2 API > > Sie können die Accounts v2 API nicht zur Verwaltung der Auszahlungseinstellungen verwenden. Bitte nutzen Sie die Accounts v1 API. Wenn `on_behalf_of` weggelassen wird, ist die Plattform das für die Zahlung verantwortliche Unternehmen. > Der Parameter `on_behalf_of` wird nur für verbundene Konten mit Zahlungsfunktionen wie [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments) unterstützt. Konten, denen der [Empfänger-Rahmenvertrag](https://docs.stripe.com/connect/service-agreement-types.md#recipient) zugrunde liegt, können keine `card_payments` oder andere Zahlungsfunktionen anfordern. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` ![](https://b.stripecdn.com/docs-statics-srv/assets/ios-overview.9e0d68d009dc005f73a6f5df69e00458.png) Diese Integration vereint alle für die Zahlung erforderlichen Schritte, einschließlich der Erfassung der Zahlungsdaten und der Bestätigung der Zahlung, in einem einzigen Fenster, das über Ihrer App angezeigt wird. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe-API kommunizieren können. Nutzen Sie die 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. ## Endpoint hinzufügen [Serverseitig] Diese Integration verwendet drei Stripe-API-Objekte: 1. [PaymentIntent](https://docs.stripe.com/api/payment_intents.md): Stripe verwendet diesen, um Ihre Absicht darzustellen, eine Zahlung von Ihren Kundinnen/Kunden anzufordern, wobei Abbuchungsversuche und Zahlungsstatusänderungen im gesamten Vorgang dokumentiert werden. 1. Ein/eine *Kunde/Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Um eine Zahlungsmethode für zukünftige Zahlungen einzurichten, muss diese einem Kunden/einer Kundin zugeordnet werden. Erstellen Sie ein Kundenobjekt, wenn Ihre Kundin/Ihr Kunde ein Konto bei Ihrem Unternehmen anlegt. Wenn eine Zahlung als Gast durchgeführt wird, können Sie vor der Zahlung ein Kundenobjekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. 1. Ein temporärer Kundenschlüssel (optional). Informationen zum Kundenobjekt sind vertraulich und können nicht direkt über die App abgerufen werden. Ein temporärer Schlüssel gewährt dem SDK vorübergehenden Zugriff auf den Kunden/die Kundin. Wenn Sie Karten speichern und wiederkehrenden Kunden und Kundinnen ermöglichen möchten, gespeicherte Karten wiederzuverwenden, benötigen Sie das Customer-Objekt und das temporäre Kundenschlüssel-Objekt für Ihre Integration. Andernfalls können Sie diese Objekte weglassen. Aus Sicherheitsgründen kann Ihre App diese Objekte nicht erstellen. Fügen Sie stattdessen einen Endpoint auf Ihrem Server hinzu, der: 1. Ruft den Kunden/die Kundin ab oder erstellt einen neuen/eine neue. 1. Erstellt einen temporären Schlüssel für den Kunden/die Kundin. 1. Erstellt einen PaymentIntent mit dem [Betrag](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), der [Währung](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), [dem Kunden/der Kundin](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) und einer [Übertragungsgruppe](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group), die der Übertragung von Geldern später zugeordnet werden sollen. 1. Gibt das *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) des PaymentIntent, das `secret` des temporären Schlüssels, die [Kunden-ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) und Ihren [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) an Ihre App zurück. Die Zahlungsmethoden, die Kundinnen/Kunden während des Bezahlvorgangs angezeigt werden, sind ebenfalls im PaymentIntent enthalten. Sie können Zahlungsmethoden durch Stripe aus Ihren [Dashboard-Einstellungen](https://dashboard.stripe.com/settings/payment_methods) abrufen lassen oder sie manuell auflisten. Sofern Ihre Integration keine codebasierte Option zum Anbieten von Zahlungsmethoden erfordert, listen Sie Zahlungsmethoden nicht manuell auf. Stripe wertet die Währung, die Einschränkungen für Zahlungsmethoden und andere Parameter aus, um die Liste der unterstützten Zahlungsmethoden zu ermitteln. Stripe priorisiert Zahlungsmethoden, die die Konversion steigern und die für die Währung und den Standort des Kunden/der Kundin am relevantesten sind. Wir verbergen Zahlungsmethoden mit niedrigerer Priorität in einem Überlaufmenü. #### Zahlungsmethoden über das Dashboard verwalten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="usd" \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter # is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d transfer_group="ORDER100" \ ``` #### Zahlungsmethoden manuell auflisten Sie können eine Implementierung dieses Endpoints auf [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) zum Testen abspalten und bereitstellen. #### curl ```bash # Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u <>: \ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u <>: \ -H "Stripe-Version: 2026-02-25.clover" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=10000 \ -d "currency"="eur" \ -d "payment_method_types[]"="bancontact" \ -d "payment_method_types[]"="card" \ -d "payment_method_types[]"="ideal" \ -d "payment_method_types[]"="klarna" \ -d "payment_method_types[]"="sepa_debit" \ -d transfer_group="ORDER100" \ ``` Jede Zahlungsmethode muss die im PaymentIntent übergebene Währung unterstützen, und Ihr Unternehmen muss in einem der Länder ansässig sein, die jede Zahlungsmethode unterstützt. Auf der Seite [Optionen für die Integration von Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/integration-options.md) finden Sie weitere Informationen zu den unterstützten Zahlungsmethoden. ## Zahlungsformular integrieren [Clientseitig] Bevor das mobile Payment Element angezeigt wird, sollte Ihr Checkout-Seite folgendes anzeigen: - Die gekauften Produkte und den Gesamtbetrag anzeigen - Alle benötigten Versanddaten erfassen - Fügen Sie eine Checkout-Schaltfläche ein, um die Nutzeroberfläche von Stripe anzuzeigen Erstellen Sie im Checkout Ihrer App eine Netzwerkanfrage an den im vorigen Schritt erstellten Backend-Endpoint und rufen Sie `initPaymentSheet` aus dem `useStripe`-Hook auf. ```javascript export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const [loading, setLoading] = useState(false); const fetchPaymentSheetParams = async () => { const response = await fetch(`${API_URL}/payment-sheet`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const { paymentIntent, ephemeralKey, customer } = await response.json(); return { paymentIntent, ephemeralKey, customer, }; }; const initializePaymentSheet = async () => { const { paymentIntent, ephemeralKey, customer, } = await fetchPaymentSheetParams(); const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, // Set `allowsDelayedPaymentMethods` to true if your business can handle payment //methods that complete payment after a delay, like SEPA Debit and Sofort. allowsDelayedPaymentMethods: true, defaultBillingDetails: { name: 'Jane Doe', } }); if (!error) { setLoading(true); } }; const openPaymentSheet = async () => { // see below }; useEffect(() => { initializePaymentSheet(); }, []); return (