# Zahlungen für bestehende Kundinnen/Kunden
Erfahren Sie, wie Sie eine bestehende Zahlungsmethode belasten, während ein Kunde/eine Kundin On-Session ist.
# Von Stripe gehostete Seite
Eine Bezahlvorgang ermöglicht es Käuferinnen und Käufern, ihre Zahlungen einzugeben. Wenn der/die Käufer/in ein/e bestehende/r Kunde/Kundin ist, können Sie den Bezahlvorgang so konfigurieren, dass die Angaben mit einer der [gespeicherten Karten](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=stripe-hosted) des Kunden/der Kundin vorausgefüllt werden. Bei der Bezahlvorgangs-Sitzung werden bis zu 50 gespeicherte Karten angezeigt, mit denen der Kunde zahlen kann.

## Checkout-Sitzung erstellen [Clientseitig] [Serverseitig]
Fügen Sie Ihrer Website eine Schaltfläche zum Bezahlen hinzu, die einen serverseitigen Endpoint aufruft, um eine Checkout-Sitzung zu erstellen.
```html
Checkout
```
Checkout unterstützt die Wiederverwendung bestehender kundenkonfigurierter `Account`-Objekte mit dem Parameter [customer_account](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_account) oder von `Customer`-Objekten mit dem Parameter [customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer). Bei der Wiederverwendung bestehender Kundinnen und Kunden werden alle durch Checkout erstellten Objekte, wie z. B. `PaymentIntents` und `Subscriptions`, dem Objekt zugeordnet, das diese Kundin oder diesen Kunden darstellt.
> #### Verwenden Sie die Accounts v2 API zum Darstellen von Kundinnen und Kunden
>
> Die Accounts v2 API ist allgemein für Connect-Nutzer/innen verfügbar und für andere Stripe-Nutzer/innen in der öffentlichen Vorschau. Wenn an der Accounts v2 Vorschau teilnehmen, müssen Sie eine [Vorschauversion](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) in Ihrem Code angeben.
>
> Um Zugriff auf die Accounts v2 Vorschau anzufordern, {% collect-email modal=true modal_link_text=“sign up.” list=“payin-payout-reuse-waitlist@stripe.com” send_direct_email=true intro_text=“Sind Sie am frühzeitigen Zugang zur Vorschau der Accounts v2 API interessiert?" body_text=“Wir sind gerade dabei, die Vorschau von Accounts v2 bereitzustellen. Um Zugang zu beantragen, geben Sie unten Ihre E-Mail-Adresse ein.” form_cta_text=“Registrieren” success_text=“Danke! Wir melden uns bald.” show_email_confirmation=wahr /%}
>
> Für die meisten Anwendungsfälle empfehlen wir, [Ihre Kundinnen und Kunden als vom Kunden bzw. von der Kundin konfigurierte Account-Objekte abzubilden](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), anstatt [Customer](https://docs.stripe.com/api/customers.md)-Objekte zu verwenden.
Hängen Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` an die `success_url` an, um Zugriff auf die Sitzungs-ID zu erhalten, sobald Ihre Kundin/Ihr Kunde eine Checkout-Sitzung erfolgreich abgeschlossen hat. Leiten Sie Ihren Kunden/Ihre Kundin nach Erstellen der Checkout-Sitzung an die in der Antwort zurückgegebene [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) weiter.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
--data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
--data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
```
## Optional: Weitere gespeicherte Zahlungsmethoden anzeigen [Serverseitig]
> #### Compliance
>
> Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Wenn Sie einem Kunden/einer Kundin zuvor genutzte Zahlungsmethoden für zukünftige Einkäufe anzeigen, stellen Sie sicher, dass Sie die Zustimmung eingeholt haben, um die Details der Zahlungsmethode für diese spezifische zukünftige Verwendung zu speichern.
Standardmäßig werden nur Zahlungsmethoden angezeigt, die auf [Erneute Anzeige immer zulassen](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) eingestellt sind.
Apple Pay und Google Pay können während einer Checkout-Sitzung nicht wiederverwendet werden, daher erscheinen diese Zahlungsmethoden nicht in der Liste der gespeicherten Optionen. Sie müssen die Nutzeroberfläche von Google Pay und Apple Pay sowie die Nutzeroberfläche der Zahlungsanforderung jedes Mal anzeigen, wenn die Checkout-Sitzung aktiv ist.
Sie können andere zuvor gespeicherte Zahlungsmethoden anzeigen, indem Sie weitere Werte für die erneute Anzeige in die Checkout-Sitzung aufnehmen oder die Einstellung `allow_redisplay` einer Zahlungsmethode auf `always` setzen.
- Verwenden Sie den `allow_redisplay_filters`[Parameter](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-allow_redisplay_filters), um anzugeben, welche gespeicherten Zahlungsmethoden in Checkout angezeigt werden sollen. Sie können jeden der gültigen Werte festlegen: `limited`, `unspecified` und `always`.
Wenn Sie in Ihrer Checkout-Sitzung die Filterung für die erneute Anzeige angeben, wird das Standardverhalten außer Kraft gesetzt. Sie müssen daher den Wert `always` angeben, um die gespeicherten Zahlungsmethoden anzuzeigen.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
--data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
--data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
- [Aktualisieren Sie die Zahlungsmethode](https://docs.stripe.com/api/payment_methods/update.md), um den Wert `allow_redisplay` für einzelne Zahlungsmethoden festzulegen.
```curl
curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}} \
-u "<>:" \
-d allow_redisplay=always
```
## Felder auf der Zahlungsseite vorab ausfüllen
Wenn alle folgenden Bedingungen zutreffen, füllt Checkout die Felder **E-Mail-Adresse**, **Name**, **Karte** und **Rechnungsadresse** auf der Zahlungsseite automatisch mit den Angaben von der gespeicherten Karte der Kundin/des Kunden aus:
- Checkout befindet sich im Modus `payment` oder `subscription`. Im Modus `setup` wird das Vorausfüllen von Feldern nicht unterstützt.
- Die Kundin/der Kunde verfügt über eine gespeicherte Karte. Checkout unterstützt nur das Vorabausfüllen von Kartenzahlungsmethoden.
- Bei der gespeicherten Karte ist `allow_redisplay` auf `always` festgelegt oder Sie haben die [Standardeinstellung für die Anzeige](https://docs.stripe.com/payments/existing-customers.md#display-additional-saved-payment-methods) angepasst.
- Die Zahlungsmethode beinhaltet [`billing_details`](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-billing_details), die vom Wert [`billing_address_collection`](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-billing_address_collection) der Checkout-Sitzung benötigt werden:
- `auto` erfordert Werte für `email`, `name` und `address[country]`. Für Rechnungsadressen in den USA, Kanada und Großbritannien ist auch `address[postal_code]` erforderlich.
- `required` erfordert Werte für `email`, `name` und alle `address`-Felder.
Wenn Ihre Kundin/Ihr Kunde mehrere Karten gespeichert hat, füllt Checkout die Kartendaten gemäß der folgenden Priorisierung aus:
- Im `payment`-Modus füllt Stripe die Felder mit der zuletzt gespeicherten Karte der Kundin/des Kunden vorab aus.
- Im Modus `Abonnement` füllt Stripe die Standard-Zahlungsmethode der Kundin/des Kunden im Voraus aus, wenn es sich um eine Karte handelt. Andernfalls pflegt Stripe die neueste gespeicherte Karte ein.
Wenn Checkout [eine Versandadresse erfasst](https://docs.stripe.com/payments/collect-addresses.md), werden die Felder für die Versandadresse vorausgefüllt, wenn sich die Versandadresse der Kundin/des Kunden in einem der von der Checkout-Session [unterstützten Länder](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-shipping_address_collection-allowed_countries) befindet.
Damit Ihre Kundschaft gespeicherte Karten während eines Bezahlvorgangs entfernen kann, setzen Sie [save_payment_method_options[payment_method_remove]](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_remove) auf `enabled`.
> #### Zeitüberschreitung beim vorab Ausfüllen
>
> Die vorausgefüllte Zahlungsmethode wird nach Erstellung der Checkout-Sitzung 30 Minuten lang angezeigt. Nach Ablauf wird die Zahlungsmethode aus Sicherheitsgründen nicht mehr vorab ausgefüllt, wenn dieselbe Checkout-Sitzung geladen wird.
## Ereignisse nach der Zahlung verarbeiten [Serverseitig]
Stripe sendet das Ereignis [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed), wenn ein Kunde/eine Kundin eine Zahlung in der Checkout-Sitzung abschließt. Verwenden Sie das [Webhook-Tool des Dashboards](https://dashboard.stripe.com/webhooks) oder befolgen Sie die [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und zu verarbeiten. Dies kann zu Folgendem führen:
- Senden Sie eine Bestellbestätigung per E-Mail an Ihre Kundinnen/Kunden.
- Protokollieren Sie den Verkauf in einer Datenbank.
- Starten Sie einen Versand-Workflow.
Überwachen Sie diese Ereignisse, anstatt darauf zu warten, dass Ihre Kundinnen/Kunden auf Ihre Website zurückgeleitet werden. Es ist unzuverlässig, die Ausführung nur über die Landingpage Ihrer Zahlungsseite auszulösen. 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.
Weitere Informationen finden Sie in unserem [Fulfillment-Leitfaden für Checkout](https://docs.stripe.com/checkout/fulfillment.md).
Verarbeiten Sie die folgenden Ereignisse, wenn Sie Zahlungen mit Checkout einziehen:
| Ereignis | Beschreibung | Aktion |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Wird gesendet, wenn ein Kunde/eine Kundin eine Checkout-Sitzung erfolgreich abschließt. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, erfolgreich ausgeführt wird. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, fehlschlägt. | Benachrichtigen Sie die Kundin/den Kunden über den Fehler und bitten Sie ihn/sie, für einen erneuten Zahlungsversuch zur Sitzung zurückzukehren. |
# Vollständig eingebettete Seite
Eine Bezahlvorgang ermöglicht es Käuferinnen und Käufern, ihre Zahlungen einzugeben. Wenn der/die Käufer/in ein/e bestehende/r Kunde/Kundin ist, können Sie den Bezahlvorgang so konfigurieren, dass die Angaben mit einer der [gespeicherten Karten](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=embedded-page) des Kunden/der Kundin vorausgefüllt werden. Bei der Bezahlvorgangs-Sitzung werden bis zu 50 gespeicherte Karten angezeigt, mit denen der Kunde zahlen kann.

## Checkout-Sitzung erstellen [Serverseitig]
Checkout unterstützt die Wiederverwendung bestehender kundenkonfigurierter `Account`-Objekte mit dem Parameter [customer_account](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_account) oder von `Customer`-Objekten mit dem Parameter [customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer). Bei der Wiederverwendung bestehender Kundinnen und Kunden werden alle durch Checkout erstellten Objekte, wie z. B. `PaymentIntents` und `Subscriptions`, dem Objekt zugeordnet, das diese Kundin oder diesen Kunden darstellt.
> #### Verwenden Sie die Accounts v2 API zum Darstellen von Kundinnen und Kunden
>
> Die Accounts v2 API ist allgemein für Connect-Nutzer/innen verfügbar und für andere Stripe-Nutzer/innen in der öffentlichen Vorschau. Wenn an der Accounts v2 Vorschau teilnehmen, müssen Sie eine [Vorschauversion](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) in Ihrem Code angeben.
>
> Um Zugriff auf die Accounts v2 Vorschau anzufordern, {% collect-email modal=true modal_link_text=“sign up.” list=“payin-payout-reuse-waitlist@stripe.com” send_direct_email=true intro_text=“Sind Sie am frühzeitigen Zugang zur Vorschau der Accounts v2 API interessiert?" body_text=“Wir sind gerade dabei, die Vorschau von Accounts v2 bereitzustellen. Um Zugang zu beantragen, geben Sie unten Ihre E-Mail-Adresse ein.” form_cta_text=“Registrieren” success_text=“Danke! Wir melden uns bald.” show_email_confirmation=wahr /%}
>
> Für die meisten Anwendungsfälle empfehlen wir, [Ihre Kundinnen und Kunden als vom Kunden bzw. von der Kundin konfigurierte Account-Objekte abzubilden](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), anstatt [Customer](https://docs.stripe.com/api/customers.md)-Objekte zu verwenden.
Erstellen Sie von Ihrem Server aus eine *Checkout-Sitzung* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription).
und setzen Sie [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) auf `embedded_page` fest.
Um Kundinnen/Kunden zu einer nutzerdefinierten Seite zurückzuleiten, die Sie auf Ihrer Website hosten, geben Sie die URL dieser Seite im Parameter [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) an. Fügen Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` in die URL ein, um den Status der Sitzung auf der Rückgabeseite abzurufen. Checkout ersetzt die Variable vor der Weiterleitung automatisch durch die Checkout-Sitzungs-ID.
Erfahren Sie mehr über die [Konfiguration der Rückgabeseite](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=embedded-page#return-page) und andere Optionen zum [Anpassen des Weiterleitungsverhaltens](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-page).
Nachdem Sie die Checkout-Sitzung erstellt haben, verwenden Sie das `client_secret`, das in der Antwort auf [Checkout verbinden](https://docs.stripe.com/payments/existing-customers.md#mount-checkout) zurückgegeben wurde.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
-d ui_mode=embedded_page \
--data-urlencode "return_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
-d ui_mode=embedded_page \
--data-urlencode "return_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
```
## Optional: Weitere gespeicherte Zahlungsmethoden anzeigen [Serverseitig]
> #### Compliance
>
> Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Wenn Sie einem Kunden/einer Kundin zuvor genutzte Zahlungsmethoden für zukünftige Einkäufe anzeigen, stellen Sie sicher, dass Sie die Zustimmung eingeholt haben, um die Details der Zahlungsmethode für diese spezifische zukünftige Verwendung zu speichern.
Standardmäßig werden nur Zahlungsmethoden angezeigt, die auf [Erneute Anzeige immer zulassen](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) eingestellt sind.
Apple Pay und Google Pay können während einer Checkout-Sitzung nicht wiederverwendet werden, daher erscheinen diese Zahlungsmethoden nicht in der Liste der gespeicherten Optionen. Sie müssen die Nutzeroberfläche von Google Pay und Apple Pay sowie die Nutzeroberfläche der Zahlungsanforderung jedes Mal anzeigen, wenn die Checkout-Sitzung aktiv ist.
Sie können andere zuvor gespeicherte Zahlungsmethoden anzeigen, indem Sie weitere Werte für die erneute Anzeige in die Checkout-Sitzung aufnehmen oder die Einstellung `allow_redisplay` einer Zahlungsmethode auf `always` setzen.
- Verwenden Sie den `allow_redisplay_filters`[Parameter](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-allow_redisplay_filters), um anzugeben, welche gespeicherten Zahlungsmethoden in Checkout angezeigt werden sollen. Sie können jeden der gültigen Werte festlegen: `limited`, `unspecified` und `always`.
Wenn Sie in Ihrer Checkout-Sitzung die Filterung für die erneute Anzeige angeben, wird das Standardverhalten außer Kraft gesetzt. Sie müssen daher den Wert `always` angeben, um die gespeicherten Zahlungsmethoden anzuzeigen.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=embedded_page \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=embedded_page \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
- [Aktualisieren Sie die Zahlungsmethode](https://docs.stripe.com/api/payment_methods/update.md), um den Wert `allow_redisplay` für einzelne Zahlungsmethoden festzulegen.
```curl
curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}} \
-u "<>:" \
-d allow_redisplay=always
```
## 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.
Erstellen Sie eine asynchrone `fetchClientSecret`-Funktion, die eine Anfrage an Ihren Server stellt, um eine Checkout-Sitzung zu erstellen und das Client-Geheimnis abzurufen. Übergeben Sie diese Funktion 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.createEmbeddedCheckoutPage({
fetchClientSecret,
});
// Mount Checkout
checkout.mount('#checkout');
}
```
#### React
Installieren Sie [react-stripe-js](https://docs.stripe.com/sdks/stripejs-react.md) und den Stripe.js-Loader von npm:
```bash
npm install --save @stripe/react-stripe-js @stripe/stripe-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.
Erstellen Sie eine asynchrone `fetchClientSecret`-Funktion, die eine Anfrage an Ihren Server stellt, um eine Checkout-Sitzung zu erstellen und das Client-Geheimnis abzurufen. Übergeben Sie diese Funktion an die vom Anbieter akzeptierte Eigenschaft `options`.
```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('pk_test_123');
const App = () => {
const fetchClientSecret = React.useCallback(() => {
// Create a Checkout Session
return fetch("/create-checkout-session", {
method: "POST",
})
.then((res) => res.json())
.then((data) => data.clientSecret);
}, []);
const options = {fetchClientSecret};
return (
)
}
```
Checkout wird in einem iFrame gerendert, der Zahlungsdaten sicher über eine HTTPS-Verbindung an Stripe sendet.
> Vermeiden Sie es, Checkout in einem anderen iFrame zu platzieren, da bei einigen Zahlungsmethoden die Weiterleitung an eine andere Seite zur Zahlungsbestätigung erforderlich ist.
### Erscheinungsbild anpassen
Passen Sie Checkout an das Design Ihrer Website an, indem Sie Hintergrundfarbe, Schaltflächenfarbe, Rahmenradius und Schriftarten in den [Branding-Einstellungen](https://dashboard.stripe.com/settings/branding) Ihres Kontos festlegen.
Checkout wird standardmäßig ohne externes Padding oder Ränder gerendert. Um Ihren gewünschten Rand hinzuzufügen (z. B. 16px auf allen Seiten), empfehlen wir, ein Container-Element zu verwenden.
## Felder auf der Zahlungsseite vorab ausfüllen
Wenn alle folgenden Bedingungen zutreffen, füllt Checkout die Felder **E-Mail-Adresse**, **Name**, **Karte** und **Rechnungsadresse** auf der Zahlungsseite automatisch mit den Angaben von der gespeicherten Karte der Kundin/des Kunden aus:
- Checkout befindet sich im Modus `payment` oder `subscription`. Im Modus `setup` wird das Vorausfüllen von Feldern nicht unterstützt.
- Die Kundin/der Kunde verfügt über eine gespeicherte Karte. Checkout unterstützt nur das Vorabausfüllen von Kartenzahlungsmethoden.
- Bei der gespeicherten Karte ist `allow_redisplay` auf `always` festgelegt oder Sie haben die [Standardeinstellung für die Anzeige](https://docs.stripe.com/payments/existing-customers.md#display-additional-saved-payment-methods) angepasst.
- Die Zahlungsmethode beinhaltet [`billing_details`](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-billing_details), die vom Wert [`billing_address_collection`](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-billing_address_collection) der Checkout-Sitzung benötigt werden:
- `auto` erfordert Werte für `email`, `name` und `address[country]`. Für Rechnungsadressen in den USA, Kanada und Großbritannien ist auch `address[postal_code]` erforderlich.
- `required` erfordert Werte für `email`, `name` und alle `address`-Felder.
Wenn Ihre Kundin/Ihr Kunde mehrere Karten gespeichert hat, füllt Checkout die Kartendaten gemäß der folgenden Priorisierung aus:
- Im `payment`-Modus füllt Stripe die Felder mit der zuletzt gespeicherten Karte der Kundin/des Kunden vorab aus.
- Im Modus `Abonnement` füllt Stripe die Standard-Zahlungsmethode der Kundin/des Kunden im Voraus aus, wenn es sich um eine Karte handelt. Andernfalls pflegt Stripe die neueste gespeicherte Karte ein.
Wenn Checkout [eine Versandadresse erfasst](https://docs.stripe.com/payments/collect-addresses.md), werden die Felder für die Versandadresse vorausgefüllt, wenn sich die Versandadresse der Kundin/des Kunden in einem der von der Checkout-Session [unterstützten Länder](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-shipping_address_collection-allowed_countries) befindet.
Damit Ihre Kundschaft gespeicherte Karten während eines Bezahlvorgangs entfernen kann, setzen Sie [save_payment_method_options[payment_method_remove]](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_remove) auf `enabled`.
> #### Zeitüberschreitung beim vorab Ausfüllen
>
> Die vorausgefüllte Zahlungsmethode wird nach Erstellung der Checkout-Sitzung 30 Minuten lang angezeigt. Nach Ablauf wird die Zahlungsmethode aus Sicherheitsgründen nicht mehr vorab ausgefüllt, wenn dieselbe Checkout-Sitzung geladen wird.
## Ereignisse nach der Zahlung verarbeiten [Serverseitig]
Stripe sendet das Ereignis [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed), wenn ein Kunde/eine Kundin eine Zahlung in der Checkout-Sitzung abschließt. Verwenden Sie das [Webhook-Tool des Dashboards](https://dashboard.stripe.com/webhooks) oder befolgen Sie die [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und zu verarbeiten. Dies kann zu Folgendem führen:
- Senden Sie eine Bestellbestätigung per E-Mail an Ihre Kundinnen/Kunden.
- Protokollieren Sie den Verkauf in einer Datenbank.
- Starten Sie einen Versand-Workflow.
Überwachen Sie diese Ereignisse, anstatt darauf zu warten, dass Ihre Kundinnen/Kunden auf Ihre Website zurückgeleitet werden. Es ist unzuverlässig, die Ausführung nur über die Landingpage Ihrer Zahlungsseite auszulösen. 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.
Weitere Informationen finden Sie in unserem [Fulfillment-Leitfaden für Checkout](https://docs.stripe.com/checkout/fulfillment.md).
Verarbeiten Sie die folgenden Ereignisse, wenn Sie Zahlungen mit Checkout einziehen:
| Ereignis | Beschreibung | Aktion |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Wird gesendet, wenn ein Kunde/eine Kundin eine Checkout-Sitzung erfolgreich abschließt. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, erfolgreich ausgeführt wird. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, fehlschlägt. | Benachrichtigen Sie die Kundin/den Kunden über den Fehler und bitten Sie ihn/sie, für einen erneuten Zahlungsversuch zur Sitzung zurückzukehren. |
# Elements
Eine Bezahlvorgang ermöglicht es Käuferinnen und Käufern, ihre Zahlungen einzugeben. Wenn der/die Käufer/in ein/e bestehende/r Kunde/Kundin ist, können Sie den Bezahlvorgang so konfigurieren, dass die Angaben mit einer der [gespeicherten Karten](https://docs.stripe.com/payments/checkout/save-during-payment.md?payment-ui=embedded-components) des Kunden/der Kundin vorausgefüllt werden. Bei der Bezahlvorgangs-Sitzung werden bis zu 50 gespeicherte Karten angezeigt, mit denen der Kunde zahlen kann.

## Checkout-Sitzung erstellen [Clientseitig] [Serverseitig]
Checkout-Sessions unterstützt die Wiederverwendung bestehender kundenkonfigurierter `Account`-Objekte mit dem Parameter [customer_account](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer_account) oder von `Customer`-Objekten mit dem Parameter [customer](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer). Bei der Wiederverwendung bestehender Kundinnen/Kunden werden alle von Checkout erstellten Objekte, wie `PaymentIntents` und `Subscriptions`, dem Objekt zugeordnet, das diese Kundin oder diesen Kunden darstellt.
> #### Verwenden Sie die Accounts v2 API zum Darstellen von Kundinnen und Kunden
>
> Die Accounts v2 API ist allgemein für Connect-Nutzer/innen verfügbar und für andere Stripe-Nutzer/innen in der öffentlichen Vorschau. Wenn an der Accounts v2 Vorschau teilnehmen, müssen Sie eine [Vorschauversion](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) in Ihrem Code angeben.
>
> Um Zugriff auf die Accounts v2 Vorschau anzufordern, {% collect-email modal=true modal_link_text=“sign up.” list=“payin-payout-reuse-waitlist@stripe.com” send_direct_email=true intro_text=“Sind Sie am frühzeitigen Zugang zur Vorschau der Accounts v2 API interessiert?" body_text=“Wir sind gerade dabei, die Vorschau von Accounts v2 bereitzustellen. Um Zugang zu beantragen, geben Sie unten Ihre E-Mail-Adresse ein.” form_cta_text=“Registrieren” success_text=“Danke! Wir melden uns bald.” show_email_confirmation=wahr /%}
>
> Für die meisten Anwendungsfälle empfehlen wir, [Ihre Kundinnen und Kunden als vom Kunden bzw. von der Kundin konfigurierte Account-Objekte abzubilden](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), anstatt [Customer](https://docs.stripe.com/api/customers.md)-Objekte zu verwenden.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=elements \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=elements \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}"
```
## Optional: Weitere gespeicherte Zahlungsmethoden anzeigen [Serverseitig]
> #### Compliance
>
> Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Wenn Sie einem Kunden/einer Kundin zuvor genutzte Zahlungsmethoden für zukünftige Einkäufe anzeigen, stellen Sie sicher, dass Sie die Zustimmung eingeholt haben, um die Details der Zahlungsmethode für diese spezifische zukünftige Verwendung zu speichern.
Standardmäßig werden nur Zahlungsmethoden angezeigt, die auf [Erneute Anzeige immer zulassen](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) eingestellt sind.
Apple Pay und Google Pay können während einer Checkout-Sitzung nicht wiederverwendet werden, daher erscheinen diese Zahlungsmethoden nicht in der Liste der gespeicherten Optionen. Sie müssen die Nutzeroberfläche von Google Pay und Apple Pay sowie die Nutzeroberfläche der Zahlungsanforderung jedes Mal anzeigen, wenn die Checkout-Sitzung aktiv ist.
Sie können andere zuvor gespeicherte Zahlungsmethoden anzeigen, indem Sie weitere Werte für die erneute Anzeige in die Checkout-Sitzung aufnehmen oder die Einstellung `allow_redisplay` einer Zahlungsmethode auf `always` setzen.
- Verwenden Sie den `allow_redisplay_filters`[Parameter](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-allow_redisplay_filters), um anzugeben, welche gespeicherten Zahlungsmethoden in Checkout angezeigt werden sollen. Sie können jeden der gültigen Werte festlegen: `limited`, `unspecified` und `always`.
Wenn Sie in Ihrer Checkout-Sitzung die Filterung für die erneute Anzeige angeben, wird das Standardverhalten außer Kraft gesetzt. Sie müssen daher den Wert `always` angeben, um die gespeicherten Zahlungsmethoden anzuzeigen.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=elements \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d mode=payment \
-d ui_mode=elements \
-d "line_items[0][price]={{PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "customer={{CUSTOMER_ID}}" \
--data-urlencode "return_url=https://example.com/return?session_id={CHECKOUT_SESSION_ID}" \
-d "saved_payment_method_options[allow_redisplay_filters][0]=always" \
-d "saved_payment_method_options[allow_redisplay_filters][1]=limited" \
-d "saved_payment_method_options[allow_redisplay_filters][2]=unspecified"
```
- [Aktualisieren Sie die Zahlungsmethode](https://docs.stripe.com/api/payment_methods/update.md), um den Wert `allow_redisplay` für einzelne Zahlungsmethoden festzulegen.
```curl
curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}} \
-u "<>:" \
-d allow_redisplay=always
```
## Das Payment Element anzeigen [Clientseitig]
#### HTML + JS
### Einrichten von Stripe.js
Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem sie es zum `head` Ihrer HTML-Datei hinzufügen. 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 es nicht selbst.
```html
Checkout
```
Erstellen Sie auf Ihrer Zahlungsseite 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 zu Ihrer Zahlungsseite 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
```
Rufen Sie die Checkout-Sitzung `client_secret` aus dem vorherigen Schritt ab, um das `Checkout`-Objekt zu initialisieren. Erstellen und mounten Sie dann das Payment Element.
```javascript
const promise = fetch("/create-checkout-session", {
method: "POST",
headers: { "Content-Type": "application/json" },
})
.then((r) => r.json())
.then((r) => r.clientSecret);
// Initialize Checkout
const checkout = stripe.initCheckoutElementsSdk({
clientSecret: promise,
});
// Create and mount the Payment Element
const paymentElement = checkout.createPaymentElement();
paymentElement.mount('#payment-element');
```
#### React
### Einrichten von Stripe.js
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
```
### Fügen Sie den CheckoutElementsProvider zu Ihrer Zahlungsseite hinzu und konfigurieren Sie ihn
Rufen Sie das `client_secret` der Checkout-Sitzung aus dem vorherigen Schritt ab, um den [CheckoutElementsProvider](https://docs.stripe.com/js/react_stripe_js/checkout/checkout_provider) zu initialisieren. Rendern Sie dann die Komponente `CheckoutForm`, die das Zahlungsformular enthält.
```jsx
import React, {useMemo} from 'react';
import ReactDOM from 'react-dom';
import {CheckoutElementsProvider} from '@stripe/react-stripe-js/checkout';
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 promise = useMemo(() => {
return fetch('/create-checkout-session', {
method: 'POST',
})
.then((res) => res.json())
.then((data) => data.clientSecret);
}, []);
return (
);
};
ReactDOM.render(, document.getElementById('root'));
```
### Payment Element hinzufügen
Verwenden Sie die Komponente `PaymentElement`, um das Zahlungsformular anzuzeigen.
```jsx
import React from 'react';
import {PaymentElement} from '@stripe/react-stripe-js/checkout';
const CheckoutForm = () => {
return (
);
};
export default CheckoutForm;
```
## Felder auf der Zahlungsseite vorab ausfüllen
Wenn alle folgenden Bedingungen zutreffen, enthält das [Sitzungsobjekt](https://docs.stripe.com/js/custom_checkout/session_object) die Angaben **E-Mail-Adresse**, **Name**, **Karte** und **Rechnungsadresse**, basierend auf den Daten der gespeicherten Karte der Kundin/des Kunden. Diese Informationen stehen Ihnen zur Anzeige auf Ihrer Zahlungsseite sowie dem Payment Element zur Verfügung, um die gespeicherte Karte darzustellen:
- Checkout befindet sich im Modus `payment` oder `subscription`. Im Modus `setup` wird das Vorausfüllen von Feldern nicht unterstützt.
- Die Kundin/der Kunde verfügt über eine gespeicherte Karte. Checkout unterstützt nur das Vorabausfüllen von Kartenzahlungsmethoden.
- Bei der gespeicherten Karte ist `allow_redisplay` auf `always` festgelegt oder Sie haben die [Standardeinstellung für die Anzeige](https://docs.stripe.com/payments/existing-customers.md#display-additional-saved-payment-methods) angepasst.
- Die Zahlungsmethode beinhaltet [`billing_details`](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-billing_details), die vom Wert [`billing_address_collection`](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-billing_address_collection) der Checkout-Sitzung benötigt werden:
- `auto` erfordert Werte für `email`, `name` und `address[country]`. Für Rechnungsadressen in den USA, Kanada und Großbritannien ist auch `address[postal_code]` erforderlich.
- `required` erfordert Werte für `email`, `name` und alle `address`-Felder.
Wenn Ihre Kundin/Ihr Kunde mehrere gespeicherte Karten hat, zeigt das Payment Element die gespeicherte Karte entsprechend der folgenden Priorisierung an:
- Im `payment`-Modus füllt Stripe die Felder mit der zuletzt gespeicherten Karte der Kundin/des Kunden vorab aus.
- Im Modus `Abonnement` füllt Stripe die Standard-Zahlungsmethode der Kundin/des Kunden im Voraus aus, wenn es sich um eine Karte handelt. Andernfalls pflegt Stripe die neueste gespeicherte Karte ein.
Beim [Erfassen einer Lieferadresse](https://docs.stripe.com/payments/collect-addresses.md) enthält das [Sitzungsobjekt](https://docs.stripe.com/js/custom_checkout/session_object) die Felder der Lieferadresse, sofern die [shipping.address](https://docs.stripe.com/api/customers/object.md#customer_object-shipping-address) der Kundin/des Kunden zu den [unterstützten Ländern](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-shipping_address_collection-allowed_countries) der Checkout-Session gehört.
Damit Ihre Kundschaft gespeicherte Karten während eines Bezahlvorgangs entfernen kann, setzen Sie [save_payment_method_options[payment_method_remove]](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-saved_payment_method_options-payment_method_remove) auf `enabled`.
> #### Zeitüberschreitung beim vorab Ausfüllen
>
> Die vorausgefüllte Zahlungsmethode wird nach Erstellung der Checkout-Sitzung 30 Minuten lang angezeigt. Nach Ablauf wird die Zahlungsmethode aus Sicherheitsgründen nicht mehr vorab ausgefüllt, wenn dieselbe Checkout-Sitzung geladen wird.
## Zahlung an Stripe senden [Clientseitig]
#### HTML + JS
Zeigen Sie eine Schaltfläche **Bezahlen** an, die [confirm](https://docs.stripe.com/js/custom_checkout/confirm) von der `Checkout`-Instanz aufruft, um die Zahlung zu übermitteln.
```html
```
```js
const checkout = stripe.initCheckoutElementsSdk({clientSecret});
checkout.on('change', (session) => {
document.getElementById('pay-button').disabled = !session.canConfirm;
});
const loadActionsResult = await checkout.loadActions();
if (loadActionsResult.type === 'success') {
const {actions} = loadActionsResult;
const button = document.getElementById('pay-button');
const errors = document.getElementById('confirm-errors');
button.addEventListener('click', () => {
// Clear any validation errors
errors.textContent = '';
actions.confirm().then((result) => {
if (result.type === 'error') {
errors.textContent = result.error.message;
}
});
});
}
```
#### React
Zeigen Sie eine Schaltfläche **Bezahlen** an, die zur [Bestätigung](https://docs.stripe.com/js/custom_checkout/confirm) von [useCheckoutElements](https://docs.stripe.com/js/react_stripe_js/checkout/use_checkout_elements) aufruft, um die Zahlung zu übermitteln.
```jsx
import React from 'react';
import {useCheckoutElements} from '@stripe/react-stripe-js/checkout';
const PayButton = () => {
const checkoutState = useCheckoutElements();
const [loading, setLoading] = React.useState(false);
const [error, setError] = React.useState(null);
if (checkoutState.type !== "success") {
return null;
}
const handleClick = () => {
setLoading(true);checkoutState.checkout.confirm().then((result) => {
if (result.type === 'error') {
setError(result.error)
}
setLoading(false);
})
};
return (
{error &&
{error.message}
}
)
};
export default PayButton;
```
## Ereignisse nach der Zahlung verarbeiten [Serverseitig]
Stripe sendet das Ereignis [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed), wenn ein Kunde/eine Kundin eine Zahlung in der Checkout-Sitzung abschließt. Verwenden Sie das [Webhook-Tool des Dashboards](https://dashboard.stripe.com/webhooks) oder befolgen Sie die [Webhook-Anleitung](https://docs.stripe.com/webhooks/quickstart.md), um diese Ereignisse zu empfangen und zu verarbeiten. Dies kann zu Folgendem führen:
- Senden Sie eine Bestellbestätigung per E-Mail an Ihre Kundinnen/Kunden.
- Protokollieren Sie den Verkauf in einer Datenbank.
- Starten Sie einen Versand-Workflow.
Überwachen Sie diese Ereignisse, anstatt darauf zu warten, dass Ihre Kundinnen/Kunden auf Ihre Website zurückgeleitet werden. Es ist unzuverlässig, die Ausführung nur über die Landingpage Ihrer Zahlungsseite auszulösen. 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.
Weitere Informationen finden Sie in unserem [Fulfillment-Leitfaden für Checkout](https://docs.stripe.com/checkout/fulfillment.md).
Verarbeiten Sie die folgenden Ereignisse, wenn Sie Zahlungen mit Checkout einziehen:
| Ereignis | Beschreibung | Aktion |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Wird gesendet, wenn ein Kunde/eine Kundin eine Checkout-Sitzung erfolgreich abschließt. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, erfolgreich ausgeführt wird. | Senden Sie den Kundinnen/Kunden 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. |
| [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Wird gesendet, wenn eine Zahlung mit einer Zahlungsmethode mit Verzögerung, wie z. B. ACH-Lastschriftverfahren, fehlschlägt. | Benachrichtigen Sie die Kundin/den Kunden über den Fehler und bitten Sie ihn/sie, für einen erneuten Zahlungsversuch zur Sitzung zurückzukehren. |
# Personalisierter Ablauf
Das Payment Element ermöglicht es Käuferinnen und Käufern, ihre Zahlungsdaten einzugeben. Wenn es sich bei der/dem Käufer/in um eine/n bestehende/n Kundin/Kunden bzw. ein bestehendes Konto handelt, können Sie eine Customer Session im Payment Element konfigurieren, um die [vorhandenen Zahlungsmethoden](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements) der Kundin/des Kunden oder des Kontos anzuzeigen.

Das Payment Element kann nur die folgenden gespeicherten Arten von Zahlungsmethoden anzeigen:
- `card`
- `link`
- `us_bank_account`
- `acss_debit`
- `sepa_debit`
- `bacs_debit`
- `au_becs_debit`
- `nz_bank_account`
- `ideal`
- `sofort`
- `bancontact`
## PaymentIntent und CustomerSession erstellen [Serverseitig]
Erstellen Sie einen [PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md) und eine [CustomerSession](https://docs.stripe.com/api/customer_sessions/create.md). Übergeben Sie unbedingt die/den bestehende/n `Customer` oder die bestehende `Account`-ID und aktivieren Sie die Funktion `payment_method_redisplay`.
> #### Verwenden Sie die Accounts v2 API zum Darstellen von Kundinnen und Kunden
>
> Die Accounts v2 API ist allgemein für Connect-Nutzer/innen verfügbar und für andere Stripe-Nutzer/innen in der öffentlichen Vorschau. Wenn an der Accounts v2 Vorschau teilnehmen, müssen Sie eine [Vorschauversion](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) in Ihrem Code angeben.
>
> Um Zugriff auf die Accounts v2 Vorschau anzufordern, {% collect-email modal=true modal_link_text=“sign up.” list=“payin-payout-reuse-waitlist@stripe.com” send_direct_email=true intro_text=“Sind Sie am frühzeitigen Zugang zur Vorschau der Accounts v2 API interessiert?" body_text=“Wir sind gerade dabei, die Vorschau von Accounts v2 bereitzustellen. Um Zugang zu beantragen, geben Sie unten Ihre E-Mail-Adresse ein.” form_cta_text=“Registrieren” success_text=“Danke! Wir melden uns bald.” show_email_confirmation=wahr /%}
>
> Für die meisten Anwendungsfälle empfehlen wir, [Ihre Kundinnen und Kunden als vom Kunden bzw. von der Kundin konfigurierte Account-Objekte abzubilden](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md), anstatt [Customer](https://docs.stripe.com/api/customers.md)-Objekte zu verwenden.
#### Accounts v2
#### Ruby
```ruby
# Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
# Find your keys at https://dashboard.stripe.com/apikeys.
client = Stripe::StripeClient.new('<>')
post '/create-intent-and-customer-session' do
intent = client.v1.payment_intents.create({
amount: 1099,
currency: 'usd',
automatic_payment_methods: {enabled: true},
customer_account: {{CUSTOMER_ACCOUNT_ID}},
})
customer_session = client.v1.customer_sessions.create({
customer_account: {{CUSTOMER_ACCOUNT_ID}},
components: {
payment_element: {
enabled: true,
features: {
payment_method_redisplay: 'enabled',
},
},
},
})
{
client_secret: intent.client_secret,
customer_session_client_secret: customer_session.client_secret
}.to_json
end
```
#### Customers v1
#### Ruby
```ruby
# Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
# Find your keys at https://dashboard.stripe.com/apikeys.
client = Stripe::StripeClient.new('<>')
post '/create-intent-and-customer-session' do
intent = client.v1.payment_intents.create({
amount: 1099,
currency: 'usd',
# In the latest version of the API, specifying the `automatic_payment_methods` parameter
# is optional because Stripe enables its functionality by default.
automatic_payment_methods: {enabled: true},
customer: {{CUSTOMER_ID}},
})
customer_session = client.v1.customer_sessions.create({
customer: {{CUSTOMER_ID}},
components: {
payment_element: {
enabled: true,
features: {
payment_method_redisplay: 'enabled',
},
},
},
})
{
client_secret: intent.client_secret,
customer_session_client_secret: customer_session.client_secret
}.to_json
end
```
## Optional: Weitere gespeicherte Zahlungsmethoden anzeigen [Serverseitig]
> #### Compliance
>
> Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Wenn Sie einem Kunden/einer Kundin zuvor genutzte Zahlungsmethoden für zukünftige Einkäufe anzeigen, stellen Sie sicher, dass Sie die Zustimmung eingeholt haben, um die Details der Zahlungsmethode für diese spezifische zukünftige Verwendung zu speichern.
Standardmäßig werden nur Zahlungsmethoden angezeigt, die auf [Erneute Anzeige immer zulassen](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) eingestellt sind.
Apple Pay und Google Pay können während einer Checkout-Sitzung nicht wiederverwendet werden, daher erscheinen diese Zahlungsmethoden nicht in der Liste der gespeicherten Optionen. Sie müssen die Nutzeroberfläche von Google Pay und Apple Pay sowie die Nutzeroberfläche der Zahlungsanforderung jedes Mal anzeigen, wenn die Checkout-Sitzung aktiv ist.
Sie können andere zuvor gespeicherte Zahlungsmethoden anzeigen, indem Sie weitere Werte für die erneute Anzeige in die Checkout-Sitzung aufnehmen oder die Einstellung `allow_redisplay` einer Zahlungsmethode auf `always` setzen.
- Verwenden Sie den [Parameter](https://docs.stripe.com/api/customer_sessions/create.md#create_customer_session-components-payment_element-features-payment_method_allow_redisplay_filters) `payment_method_allow_redisplay_filters`, um anzugeben, welche gespeicherten Zahlungsmethoden im Payment Element angezeigt werden sollen. Sie können jeden der gültigen Werte festlegen: `limited`, `unspecified` und `always`.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/customer_sessions \
-u "<>:" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
-d "components[payment_element][enabled]=true" \
-d "components[payment_element][features][payment_method_redisplay]=enabled" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=always" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=limited" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=unspecified"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/customer_sessions \
-u "<>:" \
-d "customer={{CUSTOMER_ID}}" \
-d "components[payment_element][enabled]=true" \
-d "components[payment_element][features][payment_method_redisplay]=enabled" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=always" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=limited" \
-d "components[payment_element][features][payment_method_allow_redisplay_filters][]=unspecified"
```
- [Aktualisieren Sie die Zahlungsmethode](https://docs.stripe.com/api/payment_methods/update.md), um den Wert `allow_redisplay` für einzelne Zahlungsmethoden festzulegen.
```curl
curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}} \
-u "<>:" \
-d allow_redisplay=always
```
## Das Payment Element anzeigen [Clientseitig]
#### HTML + JS
### Einrichten von Stripe.js
Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem sie es zum `head` Ihrer HTML-Datei hinzufügen. 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 es nicht selbst.
```html
Checkout
```
Erstellen Sie auf Ihrer Zahlungsseite 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 zu Ihrer Zahlungsseite 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
```
Rufen Sie die beiden `clients_secret` aus dem vorherigen Schritt ab, um das Element zu initialisieren. Erstellen und verbinden Sie dann das Payment Element.
```javascript
// Fetch the two `client_secret`
const response = await fetch('/create-intent-and-customer-session', { method: "POST" });
const { client_secret, customer_session_client_secret } = await response.json();
// Initialize Elements
const elements = stripe.elements({
clientSecret: client_secret,
customerSessionClientSecret: customer_session_client_secret,
});
// Create and mount the Payment Element
const paymentElementOptions = { layout: 'accordion'};
const paymentElement = elements.create('payment', paymentElementOptions);
paymentElement.mount('#payment-element');
```
#### React
### Einrichten von Stripe.js
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
```
### Elements-Anbieter zu Ihrer Zahlungsseite hinzufügen und konfigurieren
Rufen Sie die beiden `clients_secret` aus dem vorherigen Schritt ab, um den [Elements-Anbieter](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Rendern Sie dann die CheckoutForm-Komponente, die das Zahlungsformular enthält.
```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 [clientSecret, setClientSecret] = useState("");
const [customerSessionClientSecret, setCustomerSessionClientSecret] = useState("");
// Fetch the two `client_secret`
useEffect(() => {
fetch("/create-intent-and-customer-session", { method: "POST" })
.then((res) => res.json())
.then((data) => {
setClientSecret(data.client_secret);
setCustomerSessionClientSecret(data.customer_session_client_secret);
});
}, []);
// Initialize the Element provider once we we received the two `client_secret`
// And render the CheckoutForm
return (
);
};
ReactDOM.render(, document.getElementById('root'));
```
### Payment Element hinzufügen
Verwenden Sie die Komponente `PaymentElement`, um das Zahlungsformular anzuzeigen.
```jsx
import React from 'react';
import {PaymentElement} from '@stripe/react-stripe-js';
const CheckoutForm = () => {
return (
);
};
export default CheckoutForm;
```
## 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 (
);
};
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 der 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. |
# Direct API
Verwenden Sie die Direct API-Implementierung, um die Anzeige vorhandener Zahlungsmethoden vollständig zu steuern.
## Zahlungsmethoden anzeigen [Clientseitig] [Serverseitig]
Rufen Sie den Endpoint [Zahlungsmethode auflisten](https://docs.stripe.com/api/payment_methods/customer_list.md)) mit dem Parameter `allow_redisplay` auf, um die wiederverwendbaren Zahlungsmethoden eines Kunden/einer Kundin abzurufen.
#### Accounts v2
```curl
curl -G https://api.stripe.com/v1/payment_methods \
-u "<>:" \
-d customer_account={{CUSTOMER_ACCOUNT_ID}} \
-d allow_redisplay=always
```
#### Customers v1
```curl
curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \
-u "<>:" \
-d allow_redisplay=always
```
Verwenden Sie die API-Antwortdaten, um die Zahlungsmethoden in Ihrer eigenen Nutzeroberfläche anzuzeigen, und lassen Sie den Kunden/die Kundin eine auswählen.
## Optional: Weitere gespeicherte Zahlungsmethoden anzeigen [Serverseitig]
> #### Compliance
>
> Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Wenn Sie einem Kunden/einer Kundin zuvor genutzte Zahlungsmethoden für zukünftige Einkäufe anzeigen, stellen Sie sicher, dass Sie die Zustimmung eingeholt haben, um die Details der Zahlungsmethode für diese spezifische zukünftige Verwendung zu speichern.
Standardmäßig werden nur Zahlungsmethoden angezeigt, die auf [Erneute Anzeige immer zulassen](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) eingestellt sind.
Apple Pay und Google Pay können während einer Checkout-Sitzung nicht wiederverwendet werden, daher erscheinen diese Zahlungsmethoden nicht in der Liste der gespeicherten Optionen. Sie müssen die Nutzeroberfläche von Google Pay und Apple Pay sowie die Nutzeroberfläche der Zahlungsanforderung jedes Mal anzeigen, wenn die Checkout-Sitzung aktiv ist.
Sie können andere zuvor gespeicherte Zahlungsmethoden anzeigen, indem Sie weitere Werte für die erneute Anzeige in die Checkout-Sitzung aufnehmen oder die Einstellung `allow_redisplay` einer Zahlungsmethode auf `always` setzen.
- Verwenden Sie den [Parameter](https://docs.stripe.com/api/payment_methods/customer_list.md#list_customer_payment_methods-allow_redisplay) `allow_redisplay`, um anzugeben, welche gespeicherten Zahlungsmethoden dem Kunden/der Kundin angezeigt werden sollen. Sie können jeden der gültigen Werte festlegen: `limited`, `unspecified` und `always`.
#### Accounts v2
```curl
curl -G https://api.stripe.com/v1/payment_methods \
-u "<>:" \
-d "customer_account={{CUSTOMERACCOUNT_ID}}" \
-d allow_redisplay=unspecified
```
#### Customers v1
```curl
curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \
-u "<>:" \
-d allow_redisplay=unspecified
```
- [Aktualisieren Sie die Zahlungsmethode](https://docs.stripe.com/api/payment_methods/update.md), um den Wert `allow_redisplay` für einzelne Zahlungsmethoden festzulegen.
```curl
curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}} \
-u "<>:" \
-d allow_redisplay=always
```
## PaymentIntent erstellen [Serverseitig]
Erstellen Sie ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md), um zu versuchen, den Kunden/die Kundin mit der von ihm/ihr ausgewählten Zahlungsmethode zu belasten.
#### Accounts v2
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=1099 \
-d currency=usd \
-d customer_account={{CUSTOMER_ACCOUNT_ID}} \
-d payment_method={{PAYMENT_METHOD_ID}} \
-d confirm=true \
--data-urlencode "return_url=https://example.com/order/123/complete"
```
#### Customers v1
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=1099 \
-d currency=usd \
-d customer={{CUSTOMER_ID}} \
-d payment_method={{PAYMENT_METHOD_ID}} \
-d confirm=true \
--data-urlencode "return_url=https://example.com/order/123/complete"
```
Wenn der API-Aufruf mit einer 402-Antwort fehlschlägt, bedeutet dies, dass die Zahlung abgelehnt wurde. Bitten Sie den Kunden/die Kundin, es erneut zu versuchen oder eine andere Zahlungsmethode zu verwenden.
## PaymentIntent-Status prüfen [Clientseitig] [Serverseitig]
Unter der Annahme, dass der PaymentIntent erfolgreich erstellt wurde, überprüfen Sie seinen `status`:
- `succeeded` bedeutet, dass der Kunde/die Kundin wie erwartet belastet wurde. Zeigen Sie Ihrem Kunden/Ihrer Kundin eine Erfolgsmeldung.
- `requires_action` gibt an, dass Sie zusätzliche Maßnahmen ergreifen müssen, wie zum Beispiel die Authentifizierung mit 3D Secure. Rufen Sie [`handleNextAction`](https://docs.stripe.com/js/payment_intents/handle_next_action) im Frontend auf, um die Aktion auszulösen, die der Kunde/die Kundin ausführen muss.
```javascript
const { error, paymentIntent } = await stripe.handleNextAction({
clientSecret: "{{CLIENT_SECRET}}"
});
if (error) {
// Show error from Stripe.js
} else {
// Actions handled, show success message
}
```
## Ereignisse nach der 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. |