# Zukünftige Zahlungen per Cash App Pay einrichten

Erfahren Sie, wie Sie Details für Cash App Pay speichern und später Zahlungen Ihrer Kundinnen/Kunden akzeptieren.

In diesem Leitfaden wird erläutert, wie Sie die Zahlungsangaben für Cash App Pay mit [Checkout](https://docs.stripe.com/payments/checkout.md), unserer vollständig gehosteten Bezahlseite, speichern.

Wie Sie wiederkehrende Zahlungen nach dem Speichern einer Zahlungsmethode in Checkout erstellen, erfahren Sie unter [Ein Abonnement mit Cash App Pay einrichten](https://docs.stripe.com/billing/subscriptions/cash-app-pay.md).

## Stripe einrichten [Serverseitig]

Zunächst benötigen Sie ein Stripe Konto. [Jetzt registrieren](https://dashboard.stripe.com/register).

Verwenden Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrer Anwendung 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'
```

## Eine/n Kund/in erstellen oder abrufen [Serverseitig]

Um die Zahlungsmethode Cash App Pay für künftige Zahlungen zu hinterlegen, ordnen Sie diese den gewünschten *Kundinnen und Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zu.

Erstellen Sie ein [Customer-Objekt](https://docs.stripe.com/api/customers.md), wenn Kundinnen/Kunden ein Konto bei Ihrem Unternehmen anlegen. Verknüpfen Sie die ID des Customer-Objekts mit Ihrer eigenen internen Darstellung dieses Kunden/dieser Kundin. Alternativ können Sie einen neuen Kunden/eine neue Kundin auch später erstellen, unmittelbar bevor Sie eine Zahlungsmethode für zukünftige Zahlungen speichern.

Legen Sie eine neue Kundin/einen neuen Kunden an oder rufen Sie Ihren Kundenbestand ab, um sie/ihn mit dieser Zahlung zu verknüpfen. Fügen Sie den folgenden Code auf Ihrem Server hinzu, um neue Kundinnen/Kunden zu erstellen.

```curl
curl https://api.stripe.com/v1/customers \
  -u "<<YOUR_SECRET_KEY>>:" \
  --data-urlencode "description=My First Test Customer (created for API docs)"
```

## Checkout-Sitzung erstellen [Serverseitig]

Ihre Kundinnen und Kunden müssen Sie autorisieren, damit Sie deren Cash App-Konto für zukünftige Zahlungen über Stripe Checkout verwenden dürfen. Auf diese Weise können Sie Cash App-Zahlungen annehmen. Fügen Sie Ihrer Website eine Schaltfläche zum Bezahlen hinzu, über die ein serverseitiger Endpoint aufgerufen wird, um eine [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) zu erstellen.

```html
<html>
  <head>
    <title>Checkout</title>
  </head>
  <body>
    <form action="/create-checkout-session" method="POST">
      <button type="submit">Checkout</button>
    </form>
  </body>
</html>
```

Erstellen Sie eine Checkout-Sitzung im `setup`-Modus, um die erforderlichen Informationen zu erfassen. Leiten Sie Ihre Kundinnen/Kunden nach dem Erstellen der Checkout-Sitzung zu der in der Antwort zurückgegebenen [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) weiter.

#### Ruby

```ruby
client.v1.checkout.sessions.create({
  mode: 'setup',payment_method_types: ['card', 'cashapp'],
  customer: customer.id,
  success_url: 'https://example.com/success',
})
```

## Integration testen [Serverseitig]

#### Testen von mobilen Web-Apps

Um Ihre Integration zu testen, wählen Sie als Zahlungsmethode Cash App Pay aus und tippen Sie auf **Bezahlen**. Während des Tests werden Sie auf eine Testzahlungsseite weitergeleitet, auf der Sie die Zahlung genehmigen oder ablehnen können.

Wenn Sie im Live-Modus auf **Bezahlen** tippen, werden Sie zur mobilen Anwendung von Cash App weitergeleitet. In der Cash App haben Sie keine Möglichkeit, die Zahlung zu genehmigen oder abzulehnen. Die Zahlung wird nach abgeschlossener Weiterleitung automatisch genehmigt.

#### Testen von Web-Apps für den Desktop

Scannen Sie den QR-Code mit einer QR-Code-Scanner-App auf Ihrem Mobilgerät, um Ihre Integration zu testen. Während des Tests enthält die Nutzlast des QR-Codes eine URL, die Sie zu einer Testzahlungsseite weiterleitet, auf der Sie die Testzahlung genehmigen oder ablehnen können.

Im Live-Modus werden Sie durch Scannen des QR-Codes zur mobilen Anwendung von Cash App weitergeleitet. In der Cash App haben Sie keine Möglichkeit, die Zahlung zu genehmigen oder abzulehnen. Nachdem Sie den QR-Code gescannt haben, wird die Zahlung automatisch genehmigt.

# Direct API

> This is a Direct API for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/cash-app-pay/set-up-payment?payment-ui=direct-api.

Verwenden Sie die [Setup Intents API](https://docs.stripe.com/payments/setup-intents.md), um die Details der Zahlungsmethode im Voraus zu erfassen und den endgültigen Betrag oder das Zahlungsdatum zu einem späteren Zeitpunkt zu bestimmen. Dies ist nützlich für Folgendes:

- Zahlungsmethoden in einer Wallet speichern, um zukünftige Einkäufe zu optimieren
- Einziehen von Zuschlägen nach Abwicklung einer Dienstleistung
- [Kostenlosen Testzeitraum für ein Abonnement starten](https://docs.stripe.com/billing/subscriptions/trials.md)

Verwenden Sie die Payment Intents API, um Angaben zur Zahlungsmethode zu erfassen und die gespeicherte Zahlungsmethode umgehend zu belasten.

Wie Sie wiederkehrende Zahlungen nach dem Speichern einer Zahlungsmethode in Checkout erstellen, erfahren Sie unter [Ein Abonnement mit Cash App Pay einrichten](https://docs.stripe.com/billing/subscriptions/cash-app-pay.md).

## Stripe einrichten [Serverseitig]

Zunächst benötigen Sie ein Stripe-Konto. [Jetzt registrieren](https://dashboard.stripe.com/register).

Verwenden Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrer Anwendung 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'
```

## Eine/n Kund/in erstellen oder abrufen [Serverseitig]

Um eine Cash App Pay-Zahlungsmethode für zukünftige Zahlungen zu speichern, müssen Sie sie einem/einer *Kund/in* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen.

Erstellen Sie ein Kundenobjekt, wenn Ihr/e Kund/in ein Konto bei Ihrem Unternehmen anlegt. Verknüpfen Sie die ID des Kundenobjekts mit Ihrer eigenen internen Darstellung eines/einer Kund/in. Alternativ können Sie das Kundenobjekt erstellen, bevor Sie eine Zahlungsmethode für zukünftige Zahlungen speichern.

Fügen Sie den folgenden Code auf Ihrem Server ein, um eine/n neue/n Kund/in zu erstellen.

```curl
curl https://api.stripe.com/v1/customers \
  -u "<<YOUR_SECRET_KEY>>:" \
  --data-urlencode "description=My First Test Customer (created for API docs)"
```

## Zeigen Sie die Autorisierungsbedingungen auf Ihrem Zahlungsformular an [Client-seitig]

Speichern Sie die Cash App Pay-Anmeldeinformationen Ihrer Kundinnen/Kunden([$Cashtag](https://cash.app/help/us/en-us/3123-cashtags)), um deren Konto für zukünftige *Off-Session-Zahlungen* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) zu belasten. Ihr nutzerspezifisches Zahlungsformular muss einen schriftlichen Autorisierungshinweis enthalten, bevor der [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) bzw. [SetupIntent](https://docs.stripe.com/api/setup_intents.md) bestätigt wird.

Die Autorisierungsbedingungen müssen nur angezeigt werden, wenn Sie das $Cashtag von Kundinnen/Kunden zum ersten Mal speichern.

Wir empfehlen Ihnen, den folgenden Text für Ihr individuelles Zahlungsformular zu verwenden:

> Indem Sie fortfahren, erteilen Sie Rocket Rides die Genehmigung, Ihr Cash&nbsp;App-Konto in Höhe dieser und künftiger Zahlungen im Einklang mit den AGB von Rocket Rides zu belasten, bis diese Genehmigung widerrufen wird. Sie können diese Zustimmung jederzeit in Ihren Cash&nbsp;App-Einstellungen ändern.

#### Zahlungsmethode mit der Setup Intents API speichern

Verwenden Sie die [Setup Intents API](https://docs.stripe.com/payments/setup-intents.md), um Angaben zur Zahlungsmethode im Voraus zu erfassen. Den endgültigen Betrag bzw. das Zahlungsdatum können Sie zu einem späteren Zeitpunkt bestimmen. Dies ist nützlich für Folgendes:

- Zahlungsmethoden für Kund/innen speichern, damit deren spätere Käufe keine Authentifizierungen erfordern
- Kostenlosen Testzeitraum für ein *Abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) starten

## SetupIntent erstellen und Zahlungsmethode speichern [Serverseitig]

Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, mit dem Sie eine Zahlungsmethode eines Kunden/einer Kundin für zukünftige Zahlungen einrichten können. Der SetupIntent verfolgt die Schritte dieses Einrichtungsvorgangs. Erstellen Sie einen SetupIntent auf Ihrem Server, wobei [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `cashapp` gesetzt ist, und geben Sie die Kunden-ID und [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) oder `usage=on_session` an.

```curl
curl https://api.stripe.com/v1/setup_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d "payment_method_data[type]=cashapp" \
  -d usage=off_session \
  -d customer={{CUSTOMER_ID}}
```

### Client-Geheimnis abrufen

Im SetupIntent 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 SetupIntent
  {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/setup_intents/object.md#setup_intent_object-client_secret) in Ihr Bezahlformular ein. Rufen Sie in Ihrem serverseitigen Code das Client-Geheimnis aus dem SetupIntent ab:

#### Ruby

```erb
<form id="payment-form" data-secret="<%= @intent.client_secret %>">
  <button id="submit">Submit</button>
</form>
```

```ruby
get '/checkout' do
  @intent = # ... Fetch or create the SetupIntent
  erb :checkout
end
```

Als Nächstes speichern Sie Cash App Pay mittels [Stripe.js](https://docs.stripe.com/payments/elements.md) auf dem Client.

Binden Sie das Stripe.js-Skript in Ihre Zahlungsseite ein, indem Sie es im `head` Ihrer HTML-Datei einfügen.

```html
<head>
  <title>Checkout</title>
  <script src="https://js.stripe.com/dahlia/stripe.js"></script>
</head>
```

Erstellen Sie auf Ihrer Checkout-Seite mit dem folgenden JavaScript eine Instanz von Stripe.js:

```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('<<YOUR_PUBLISHABLE_KEY>>');
```

Verwenden Sie `stripe.confirmCashappSetup`, um den SetupIntent clientseitig zu bestätigen, und geben Sie eine [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) und optionale [mandate_data](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data) an. Verwenden Sie die [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url), um Kundinnen und Kunden nach einem erfolgreichen SetupIntent auf eine bestimmte Seite weiterzuleiten.

```javascript
const form = document.getElementById('setup-form');

form.addEventListener('submit', function(event) {
  event.preventDefault();

  // Set the clientSecret here
  stripe.confirmCashappSetup(
    clientSecret,
    {
      payment_method: {
        type: 'cashapp',
      },
      return_url: 'https://www.example.com/checkout/done',
    },
  );
});
```

Kundinnen/Kunden können Cash App Pay über ihr Mobilgerät oder Desktop-Apps authentifizieren. Nachdem `confirmCashappSetup` aufgerufen wurde, bestimmt der kundenseitig verwendete Client die Authentifizierungsmethode, also z.&nbsp;B. eine Weiterleitung für Mobilgeräte oder einen QR-Code für Desktops. Die Authentifizierungsantwort enthält außerdem eine Zahlungsmethoden-ID, die Sie im nächsten Schritt verwenden müssen, um eine PaymentIntent zu erstellen.

#### Authentifizierung mobiler Anwendungen

Nachdem `confirmCashappSetup` aufgerufen wurde, leitet Stripe Ihre Kundinnen/Kunden zur Autorisierung an Cash App weiter. Nachdem sie die Zahlung autorisiert haben, sendet Stripe Ihre Kundinnen/Kunden an die `return_url` des Setup Intent. Stripe fügt `setup_intent`, `setup_intent_client_secret`, `redirect_pm_type` und `redirect_status` als URL-Abfrageparameter zusätzlich zu allen vorhandenen Abfrageparametern in `return_url` hinzu.

Eine Authentifizierungssitzung läuft nach 10&nbsp;Minuten ab und dann wechselt der Status des SetupIntent wieder auf `require_payment_method`. Nach der Statusänderung sehen Kundinnen/Kunden einen Autorisierungsfehler und müssen den Vorgang von vorne beginnen.

#### Authentifizierung über Desktop-Web-App

Nachdem `confirmCashappSetup` aufgerufen wurde, wird ein QR-Code auf der Webseite angezeigt. Ihre Kundinnen/Kunden können diesen QR-Code mit der Kamera ihres Mobilgeräts oder mit der mobilen Anwendung von Cash App scannen und so die Autorisierungssitzung abschließen. Ein paar Sekunden nach der erfolgreichen Authentifizierung wird das QR-Code-Modal automatisch geschlossen.

Eine Authentifizierungssitzung läuft nach 10&nbsp;Minuten ab. Sie können den QR-Code bis zu 20 Mal aktualisieren, bevor der Status des SetupIntent wieder auf `require_payment_method` wechselt. Nach der Statusänderung sehen Kundinnen/Kunden einen Autorisierungsfehler und müssen den Vorgang von vorne beginnen.

## Optional: Weiterleitung und Authentifizierung manuell handhaben

Wir empfehlen die Verwendung von Stripe.js, um Weiterleitungen zu verarbeiten und Authentifizierung über `confirmCashappSetup` durchzuführen. Sie können Weiterleitungen und Authentifizierungen jedoch auch manuell auf Ihrem Server handhaben.

Geben Sie `handleActions: false` im `confirmCashappSetup`-Aufruf an.

```javascript
const form = document.getElementById('payment-form');

form.addEventListener('submit', function(event) {
  event.preventDefault();

  // Set the clientSecret here you got in Step 2
  stripe.confirmCashappSetup(
    clientSecret,
    {
      payment_method: {
        type: 'cashapp',
      },
      return_url: 'https://www.example.com/checkout/done',
    },
    {
      handleActions: false
    },
  ).then((result) => {
    if (result.error) {
      // Display error to your customer.
    } else if (result.paymentIntent.status === "requires_action") {
      const nextAction = result.setupIntent.next_action.cashapp_handle_redirect_or_display_qr_code;
      const expiresAt = nextAction.qr_code.expires_at;
      if (IS_MOBILE) {
        // This URL redirects the customer to Cash App to approve or decline the payment.
        const mobileAuthUrl = nextAction.mobile_auth_url;
      } else if (IS_DESKTOP) {
        // Render the QR code and display it to the customer using the below image source.
        const imageUrlSvg = nextAction.qr_code.image_url_svg;
        const imageUrlPng = nextAction.qr_code.image_url_png;
      }
    }
  });
});
```

Die SetupIntent-Antwort enthält den Status `requires_action`, was bedeutet, dass Ihre Nutzer/innen eine weitere Aktion durchführen müssen, um das Speichern der Zahlungsmethode abzuschließen.

#### Authentifizierung mobiler Anwendungen

Wenn eine Kundin bzw. ein Kunde eine Cash App Pay-Zahlungsmethode auf einem Mobilgerät speichert:

1. Leiten Sie die Kundin bzw. den Kunden zu der URL weiter, die als Eigenschaft `next_action.cashapp_handle_redirect_or_display_qr_code.mobile_auth_url` in der SetupIntent-Antwort festgelegt ist. Dadurch wird der Kunde zu Cash App weitergeleitet, wo er die Authentifizierungssitzung abschließen kann.
1. Die `mobile_auth_url` läuft nach 30&nbsp;Sekunden ab. Sollte die Kundin oder der Kunde vor Ablauf nicht zur `mobile_auth_url` weitergeleitet werden, rufen Sie bitte [stripe.retrieveSetupIntent](https://docs.stripe.com/js/setup_intents/retrieve_setup_intent) auf, um eine neue `mobile_auth_url` zu erhalten.

#### Authentifizierung über Desktop-Web-App

Wenn eine Kundin bzw. ein Kunde eine Cash App Pay-Zahlungsmethode in einer Desktop-Webanwendung speichert:

1. Leiten Sie die Kundin bzw. den Kunden zu der URL weiter, die als Eigenschaft `next_action.cashapp_handle_redirect_or_display_qr_code.hosted_instructions_url` in der SetupIntent-Antwort festgelegt ist.
1. Die Kundin bzw. der Kunde scannt den auf dieser Seite angezeigten QR-Code entweder mit der Kamera seines Mobilgeräts oder mit der Mobilanwendung Cash App, um die Authentifizierung abzuschließen.

Nach einer erfolgreichen In-App-Authentifizierung leitet Cash App die Kundinnen und Kunden zur `return_url` weiter, die Sie in der Anfrage zum Abschluss des Bezahlvorgangs festgelegt haben, und SetupIntent wechselt automatisch in den Status `succeeded`. Die SetupIntent-Antwort enthält auch eine Zahlungsmethoden-ID, die Sie für zukünftige PaymentIntents wiederverwenden können.

#### Zahlungsmethode mit der Payment Intents API speichern

Verwenden Sie die [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md), um Angaben zur Zahlungsmethode beim Bezahlvorgang zu erfassen und eine Zahlungsmethode für eine Kundin/einen Kunden zu speichern. Dies ist nützlich für Folgendes:

- Zahlungsmethoden für Kund/innen speichern, damit deren spätere Käufe keine Authentifizierungen erfordern
- Kostenlosen Testzeitraum für ein *Abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) starten

## PaymentIntent erstellen und Zahlungsmethode speichern [Serverseitig]

Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ist ein Objekt, das Ihre Absicht darstellt, Kundinnen/Kunden Zahlungen in Rechnung zu stellen. Wenn Sie bei der PaymentIntent-Anfrage keine gespeicherte Zahlungsmethode angeben, erstellen wir eine neue Zahlungsmethode und fügen diese den Kundinnen und Kunden hinzu, bevor der PaymentIntent bestätigt wird. Erstellen Sie einen PaymentIntent auf Ihrem Server, wobei [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) auf `cashapp` festgelegt ist, und geben Sie die Kunden-ID, `confirm=true`, [setup_future_usage=off_session](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) (oder `on_session`) mit einer [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) und optionalen [mandate_data](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-mandate_data) an. Verwenden Sie die [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url), um Kundinnen/Kunden nach erfolgreicher PaymentIntent auf eine bestimmte Seite weiterzuleiten.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d "payment_method_data[type]=cashapp" \
  -d "mandate_data[customer_acceptance][type]=online" \
  -d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \
  -d "mandate_data[customer_acceptance][online][user_agent]=device" \
  --data-urlencode "return_url=https://www.stripe.com" \
  -d customer={{CUSTOMER_ID}} \
  -d setup_future_usage=off_session \
  -d amount=1000 \
  -d currency=usd \
  -d statement_descriptor=test_statement \
  -d capture_method=automatic \
  -d confirm=true
```

Der zurückgegebene PaymentIntent enthält 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)), das clientseitig verwendet wird, um Zahlungen sicher abzuschließen, ohne das gesamte PaymentIntent-Objekt zu übergeben. Übergeben Sie das Client-Geheimnis an die Anwendung auf Client-Seite, um mit dem Zahlungsvorgang fortzufahren.

Die PaymentIntent-Antwort enthält den Status `requires_action`. Das bedeutet, dass Ihre Nutzer/innen einen weiteren Schritt ausführen müssen, um den PaymentIntent abzuschließen. Verwenden Sie das Objekt `next_action.cashapp_handle_redirect_or_display_qr_code.hosted_instructions_url` aus derselben PaymentIntent-Antwort, um Ihre Kundinnen/Kunden zu einer Seite weiterzuleiten, über die sie die mobile App von Cash App öffnen und die Authentifizierungssitzung abschließen können. Nach einer erfolgreichen In-App-Authentifizierung leitet Cash App die Kundinnen/Kunden an die `return_url` weiter, die Sie in der Anfrage festgelegt haben. Dort wird der Bezahlvorgang abgeschlossen und der PaymentIntent wechselt automatisch in den Status `succeeded`. Die PaymentIntent-Antwort enthält auch eine Zahlungsmethoden-ID, die Sie mit zukünftigen PaymentIntents wiederverwenden können.

## PaymentIntent mit einer gespeicherten Zahlungsmethode erstellen [Serverseitig]

Nachdem Sie eine [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) erstellt haben, können Sie zukünftige Zahlungen per Cash App Pay annehmen, indem Sie ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellen und bestätigen. Verwenden Sie zum Bestätigen eines PaymentIntent dieselbe Zahlungsmethoden-ID aus dem vorherigen SetupIntent- oder PaymentIntent-Objekt. Der Wert `off_session` muss auch auf „true“ gesetzt sein, wenn sich Kundinnen und Kunden in diesem PaymentIntent nicht in einem Bezahlvorgang befinden.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d payment_method={{PAYMENT_METHOD_ID}} \
  -d amount=1000 \
  -d currency=usd \
  -d customer={{CUSTOMER_ID}} \
  -d statement_descriptor=test_statement \
  -d capture_method=automatic \
  -d confirm=true \
  -d off_session=true
```

## Umgang mit dem Widerruf wiederverwendbarer Zahlungsmethoden

Es gibt zwei Möglichkeiten, eine wiederverwendbare Zahlungsmethode zu widerrufen:

- Kundinnen und Kunden können eine wiederverwendbare Zahlungsmethode in der mobilen App von Cash App deaktivieren. In diesem Fall sendet Stripe das Ereignis [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Abonnieren Sie [Webhook](https://docs.stripe.com/webhooks.md)-Ereignisse und rufen Sie [PaymentMethod trennen](https://docs.stripe.com/api/payment_methods/detach.md) auf, um sie zu deaktivieren.
- Kundinnen/Kunden können auch wiederverwendbare Zahlungsmethoden auf Ihrer Nutzeroberfläche deaktivieren, sofern dies unterstützt wird. In diesem Fall kann Ihr Server [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) aufrufen, um sie zu deaktivieren.

In beiden Fällen wird Ihnen nach dem Aufruf der [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), ein [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached)-Ereignis gesendet.


# iOS

> This is a iOS for when payment-ui is mobile and platform is ios. View the full page at https://docs.stripe.com/payments/cash-app-pay/set-up-payment?payment-ui=mobile&platform=ios.

Verwenden Sie die [Setup Intents API](https://docs.stripe.com/payments/setup-intents.md), um die Details der Zahlungsmethode im Voraus zu erfassen und den endgültigen Betrag oder das Zahlungsdatum zu einem späteren Zeitpunkt zu bestimmen. Dies ist nützlich für Folgendes:

- Zahlungsmethoden in einer Wallet speichern, um zukünftige Einkäufe zu optimieren
- Einziehen von Zuschlägen nach Abwicklung einer Dienstleistung
- [Kostenlosen Testzeitraum für ein Abonnement starten](https://docs.stripe.com/billing/subscriptions/trials.md)

In diesem Leitfaden erfahren Sie, wie Sie zunächst Angaben zu Zahlungsmethoden mit der Setup Intents API speichern und wie Sie zu einem späteren Zeitpunkt über die Payment Intents API gespeicherte Zahlungsmethoden belasten.

## 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 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 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 **StripePaymentsUI** 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 'StripePaymentsUI'
   ```
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 StripePaymentsUI
   ```

#### 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/StripePaymentsUI/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 **StripePaymentsUI.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/StripePaymentsUI/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 UIKitimportStripePaymentsUI

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<<YOUR_PUBLISHABLE_KEY>>"
        // 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.

## Kund/innen erstellen oder abrufen [Serverseitig]

Um die Zahlungsmethode Cash App Pay für künftige Zahlungen zu speichern, müssen Sie sie den gewünschten *Kund/innen* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen.

Erstellen Sie Kundenobjekte, wenn Kund/innen Konten bei Ihrem Unternehmen anlegen. Verknüpfen Sie die ID der Kundenobjekte mit Ihrer eigenen internen Darstellung der Kund/innen. Alternativ können Sie das Kundenobjekt erstellen, bevor Sie eine Zahlungsmethode für künftige Zahlungen speichern.

Fügen Sie den folgenden Code auf Ihrem Server ein, um neue Kund/innen zu erstellen.

```curl
curl https://api.stripe.com/v1/customers \
  -u "<<YOUR_SECRET_KEY>>:" \
  --data-urlencode "description=My First Test Customer (created for API docs)"
```

## SetupIntent erstellen [Serverseitig]

Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, mit dem Sie eine Zahlungsmethode eines Kunden/einer Kundin für zukünftige Zahlungen einrichten können. Der SetupIntent verfolgt die Schritte dieses Einrichtungsvorgangs. Erstellen Sie einen SetupIntent auf Ihrem Server, wobei [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `cashapp` gesetzt ist, und geben Sie die Kunden-ID und [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) oder `usage=on_session` an.

```curl
curl https://api.stripe.com/v1/setup_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d "payment_method_data[type]=cashapp" \
  -d usage=off_session \
  -d customer={{CUSTOMER_ID}}
```

## Zeigen Sie die Autorisierungsbedingungen auf Ihrem Zahlungsformular an [Clientseitig]

Speichern Sie die Cash App Pay-Anmeldeinformationen Ihrer Kundinnen/Kunden([$Cashtag](https://cash.app/help/us/en-us/3123-cashtags)), um deren Konto für zukünftige *Off-Session-Zahlungen* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) zu belasten. Ihr nutzerspezifisches Zahlungsformular muss einen schriftlichen Autorisierungshinweis enthalten, bevor der [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) bzw. [SetupIntent](https://docs.stripe.com/api/setup_intents.md) bestätigt wird.

Die Autorisierungsbedingungen müssen nur angezeigt werden, wenn Sie das $Cashtag eines Kunden/einer Kundin zum ersten Mal speichern.

Wir empfehlen Ihnen, den folgenden Text für Ihr individuelles Zahlungsformular zu verwenden.

> Indem Sie fortfahren, erteilen Sie Rocket Rides die Genehmigung, Ihr Cash-App-Konto in Höhe dieser und künftiger Zahlungen zu belasten im Einklang mit den AGB von Rocket Rides, bis diese Genehmigung widerrufen wird. Sie können dies jederzeit in Ihren Cash-App-Einstellungen ändern.

## Angaben zur Zahlungsmethode erfassen [Clientseitig]

#### Swift

```swift
// Cash App Pay does not require additional parameters so we only need to pass the initialized
// STPPaymentMethodCashAppParams instance to STPPaymentMethodParams
let cashApp = STPPaymentMethodCashAppParams()
let paymentMethodParams = STPPaymentMethodParams(cashApp: cashApp, billingDetails: nil, metadata: nil)
```

## Zahlung an Stripe senden [Clientseitig]

Rufen Sie das Client-Geheimnis von der erstellten SetupIntent ab und rufen Sie [STPPaymentHandler confirmSetupIntent](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentHandler.html#/c:objc\(cs\)STPPaymentHandler\(im\)confirmSetupIntent:withAuthenticationContext:completion:). auf. Dies entspricht einer Webansicht, sodass die Kund/innen die Zahlung in Cash App durchführen können. Danach wird der Completion-Block mit dem Ergebnis der Zahlung aufgerufen.

#### Swift

```swift
let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret)
setupIntentParams.paymentMethodParams = paymentMethodParams
setupIntentParams.returnURL = "payments-example://stripe-redirect"

STPPaymentHandler.shared().confirmSetupIntent(withParams: setupIntentParams, authenticationContext: self) { (handlerStatus, setupIntent, error) in
    switch handlerStatus {
    case .succeeded:
        // Setup succeeded

    case .canceled:
        // Setup was canceled

    case .failed:
        // Setup failed

    @unknown default:
        fatalError()
    }
}
```

## PaymentIntent mit einer gespeicherten Zahlungsmethode erstellen [Serverseitig]

Nachdem Sie eine [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) erstellt haben, können Sie zukünftige Zahlungen per Cash App Pay annehmen, indem Sie ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellen und bestätigen. Verwenden Sie zum Bestätigen eines PaymentIntent dieselbe Zahlungsmethoden-ID aus dem vorherigen SetupIntent- oder PaymentIntent-Objekt. Der Wert `off_session` muss auch auf „true“ gesetzt sein, wenn sich Kundinnen und Kunden in diesem PaymentIntent nicht in einem Bezahlvorgang befinden.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d payment_method={{PAYMENT_METHOD_ID}} \
  -d amount=1000 \
  -d currency=usd \
  -d customer={{CUSTOMER_ID}} \
  -d statement_descriptor=test_statement \
  -d capture_method=automatic \
  -d confirm=true \
  -d off_session=true
```

## Umgang mit dem Widerruf wiederverwendbarer Zahlungsmethoden

Es gibt zwei Möglichkeiten, eine wiederverwendbare Zahlungsmethode zu widerrufen:

- Kundinnen und Kunden können eine wiederverwendbare Zahlungsmethode in der mobilen App von Cash App deaktivieren. In diesem Fall sendet Stripe das Ereignis [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Abonnieren Sie [Webhook](https://docs.stripe.com/webhooks.md)-Ereignisse und rufen Sie [PaymentMethod trennen](https://docs.stripe.com/api/payment_methods/detach.md) auf, um sie zu deaktivieren.
- Kundinnen/Kunden können auch wiederverwendbare Zahlungsmethoden auf Ihrer Nutzeroberfläche deaktivieren, sofern dies unterstützt wird. In diesem Fall kann Ihr Server [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) aufrufen, um sie zu deaktivieren.

In beiden Fällen wird Ihnen nach dem Aufruf der [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), ein [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached)-Ereignis gesendet.


# Android

> This is a Android for when payment-ui is mobile and platform is android. View the full page at https://docs.stripe.com/payments/cash-app-pay/set-up-payment?payment-ui=mobile&platform=android.
Available in: US
Sie können die [Setup Intents API](https://docs.stripe.com/payments/setup-intents.md) oder die [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md) verwenden, um Daten für künftige Zahlungen per Cash App Pay zu speichern.

## 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 diese offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus:

#### Ruby

```bash
# Available as a gem
sudo gem install stripe
```

```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```

### Clientseitig

Das [Stripe Android SDK](https://github.com/stripe/stripe-android) ist Open Source und [vollständig dokumentiert](https://stripe.dev/stripe-android/).

Um das SDK zu installieren, fügen Sie `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.3.0")
  // Include the financial connections SDK to support US bank account as a payment method
  implementation("com.stripe:financial-connections:23.3.0")
}
```

> Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-android/releases) auf GitHub. Um bei Veröffentlichung eines neuen Release eine Benachrichtigung zu erhalten, [beobachten Sie Veröffentlichungen für das jeweilige Repository](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository).

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,
            "<<YOUR_PUBLISHABLE_KEY>>"
        )
    }
}
```

> 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.

Stripe-Beispiele nutzen auch [OkHttp](https://github.com/square/okhttp) und [GSON](https://github.com/google/gson), um HTTP-Anfragen an einen Server zu stellen.

## Kund/innen erstellen oder abrufen [Serverseitig]

Um die Zahlungsmethode Cash App Pay für künftige Zahlungen zu speichern, müssen Sie sie den gewünschten *Kund/innen* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen.

Erstellen Sie Kundenobjekte, wenn Kund/innen Konten bei Ihrem Unternehmen anlegen. Verknüpfen Sie die ID der Kundenobjekte mit Ihrer eigenen internen Darstellung der Kund/innen. Alternativ können Sie das Kundenobjekt erstellen, bevor Sie eine Zahlungsmethode für künftige Zahlungen speichern.

Fügen Sie den folgenden Code auf Ihrem Server ein, um neue Kund/innen zu erstellen.

```curl
curl https://api.stripe.com/v1/customers \
  -u "<<YOUR_SECRET_KEY>>:" \
  --data-urlencode "description=My First Test Customer (created for API docs)"
```

## SetupIntent erstellen [Serverseitig]

Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, mit dem Sie eine Zahlungsmethode eines Kunden/einer Kundin für zukünftige Zahlungen einrichten können. Der SetupIntent verfolgt die Schritte dieses Einrichtungsvorgangs. Erstellen Sie einen SetupIntent auf Ihrem Server, wobei [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `cashapp` gesetzt ist, und geben Sie die Kunden-ID und [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) oder `usage=on_session` an.

```curl
curl https://api.stripe.com/v1/setup_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d "payment_method_data[type]=cashapp" \
  -d usage=off_session \
  -d customer={{CUSTOMER_ID}}
```

## Zeigen Sie die Autorisierungsbedingungen auf Ihrem Zahlungsformular an [Clientseitig]

Speichern Sie die Cash App Pay-Anmeldeinformationen Ihrer Kundinnen/Kunden([$Cashtag](https://cash.app/help/us/en-us/3123-cashtags)), um deren Konto für zukünftige *Off-Session-Zahlungen* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) zu belasten. Ihr nutzerspezifisches Zahlungsformular muss einen schriftlichen Autorisierungshinweis enthalten, bevor der [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) bzw. [SetupIntent](https://docs.stripe.com/api/setup_intents.md) bestätigt wird.

Die Autorisierungsbedingungen müssen nur angezeigt werden, wenn Sie das $Cashtag eines Kunden/einer Kundin zum ersten Mal speichern.

Wir empfehlen Ihnen, den folgenden Text für Ihr individuelles Zahlungsformular zu verwenden.

> Indem Sie fortfahren, erteilen Sie Rocket Rides die Genehmigung, Ihr Cash-App-Konto in Höhe dieser und künftiger Zahlungen zu belasten im Einklang mit den AGB von Rocket Rides, bis diese Genehmigung widerrufen wird. Sie können dies jederzeit in Ihren Cash-App-Einstellungen ändern.

## Angaben zur Zahlungsmethode an Stripe senden [Clientseitig]

Rufen Sie das Client-Geheimnis aus dem von Ihnen erstellten SetupIntent ab, und rufen Sie [PaymentLauncher bestätigen](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/confirm.html) auf. Dies entspricht einer Webansicht, über die die Kund/innen die Einrichtung mit Cash App Pay durchführen können. Nach Abschluss wird der angegebene `PaymentResultCallback` mit dem Ergebnis der Zahlung aufgerufen.

#### Kotlin

```kotlin
class CashAppPaySetupActivity : AppCompatActivity() {

    // ...

    private val paymentLauncher: PaymentLauncher by lazy {
        val paymentConfiguration = PaymentConfiguration.getInstance(applicationContext)
        PaymentLauncher.create(
            activity = this,
            publishableKey = paymentConfiguration.publishableKey,
            stripeAccountId = paymentConfiguration.stripeAccountId,
            callback = ::onPaymentResult,
        )
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        // …
        startCheckout()
    }

    private fun startCheckout() {
        // Create a SetupIntent on your backend and return the client_secret here
        val setupIntentClientSecret = // …

        val cashAppPayParams = PaymentMethodCreateParams.createCashAppPay()

        val confirmParams = ConfirmSetupIntentParams.create(
            paymentMethodCreateParams = cashAppPayParams,
            clientSecret = setupIntentClientSecret,
            // Add a mandate ID or MandateDataParams…
        )

        paymentLauncher.confirm(confirmParams)
    }

    private fun onPaymentResult(paymentResult: PaymentResult) {
        // Handle the setup result…
    }
}
```

## PaymentIntent mit einer gespeicherten Zahlungsmethode erstellen [Serverseitig]

Nachdem Sie eine [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) erstellt haben, können Sie zukünftige Zahlungen per Cash App Pay annehmen, indem Sie ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellen und bestätigen. Verwenden Sie zum Bestätigen eines PaymentIntent dieselbe Zahlungsmethoden-ID aus dem vorherigen SetupIntent- oder PaymentIntent-Objekt. Der Wert `off_session` muss auch auf „true“ gesetzt sein, wenn sich Kundinnen und Kunden in diesem PaymentIntent nicht in einem Bezahlvorgang befinden.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "payment_method_types[]=cashapp" \
  -d payment_method={{PAYMENT_METHOD_ID}} \
  -d amount=1000 \
  -d currency=usd \
  -d customer={{CUSTOMER_ID}} \
  -d statement_descriptor=test_statement \
  -d capture_method=automatic \
  -d confirm=true \
  -d off_session=true
```

## Umgang mit dem Widerruf wiederverwendbarer Zahlungsmethoden

Es gibt zwei Möglichkeiten, eine wiederverwendbare Zahlungsmethode zu widerrufen:

- Kundinnen und Kunden können eine wiederverwendbare Zahlungsmethode in der mobilen App von Cash App deaktivieren. In diesem Fall sendet Stripe das Ereignis [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Abonnieren Sie [Webhook](https://docs.stripe.com/webhooks.md)-Ereignisse und rufen Sie [PaymentMethod trennen](https://docs.stripe.com/api/payment_methods/detach.md) auf, um sie zu deaktivieren.
- Kundinnen/Kunden können auch wiederverwendbare Zahlungsmethoden auf Ihrer Nutzeroberfläche deaktivieren, sofern dies unterstützt wird. In diesem Fall kann Ihr Server [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) aufrufen, um sie zu deaktivieren.

In beiden Fällen wird Ihnen nach dem Aufruf der [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), ein [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached)-Ereignis gesendet.

