Weiter zum Inhalt
Konto erstellen
oder
anmelden
Das Logo der Stripe-Dokumentation
/
KI fragen
Konto erstellen
Anmelden
Jetzt starten
Zahlungen
Umsatz
Plattformen und Marktplätze
Geldmanagement
Entwickler-Tools
Übersicht
Informationen zu Stripe Payments
Aktualisieren Sie Ihre Integration
Zahlungsanalysefunktionen
Online-Zahlungen
ÜbersichtIhren Use case findenZahlungen verwalten
Payment Links verwenden
Bezahlseite erstellen
Erweiterte Integration erstellen
In-App-Integration erstellen
Zahlungsmethoden
Zahlungsmethoden hinzufügen
Zahlungsmethoden verwalten
Schnellerer Bezahlvorgang mit Link
Zahlungsschnittstellen
Payment Links
Checkout
Web Elements
    Übersicht
    Payment Element
      Best Practices für das Payment Element
      Card Element-Vergleich
      Auf das Payment Element mit Payment Intents umstellen
      Auf das Payment Element mit Checkout Sessions umstellen
      Zu Confirmation Token migrieren
    Express Checkout Element
    Address Element
    Currency Selector Element
    Link Authentication Element
    Payment Method Messaging Element
In-App-Elements
Zahlungsszenarien
Nutzerdefinierte Zahlungsabläufe
Flexibles Acquiring
Orchestrierung
Präsenzzahlungen
Terminal
Andere Stripe-Produkte
Financial Connections
Krypto
Climate
StartseiteZahlungenWeb ElementsPayment Element

Mit der Checkout Sessions API zum Payment Element migrieren

Akzeptieren Sie zahlreiche Zahlungsmethoden mit einem einzigen Element und verwalten Sie gleichzeitig Steuern, Versand, Rabatte, Währungsumrechnung und vieles mehr.

Seite kopieren

Bisher erforderte jede Zahlungsmethode (Karten, iDEAL etc.) ein separates Element. Durch die Migration zu Payment Element können Sie viele Zahlungsmethoden mit einem einzigen Element akzeptieren. Sie können zusätzliche Funktionen nutzen, indem Sie von Payment Intents zu Checkout-Sitzungen migrieren. Dadurch können Sie mit Ihrer Integration Abonnements, Rabatte, Versand und Währungsumrechnung verwalten.

Wenn Sie das Card Element mit PaymentIntents oder SetupIntents verwenden und nur zum Payment Element migrieren möchten, informieren Sie sich stattdessen unter Umstieg auf das Payment Element. Sie können auch andere Zahlungsintegrationen vergleichen, wenn keine von beiden zu Ihrem Anwendungsszenario passt.

PaymentIntents und SetupIntents haben jeweils eigene Migrationsleitfäden. Siehe den entsprechenden Leitfaden für Ihren Integrationspfad, einschließlich Beispielcode.

Wenn Ihre bestehende Integration die API Payment Intents zur Erstellung und Nachverfolgung von Zahlungen oder zum Speichern von Kartendaten bei der Zahlung verwendet, führen Sie die folgenden Schritte zur Verwendung von Payment Element aus.

Zahlungsmethoden aktivieren

Vorsicht

Dieser Integrationspfad unterstützt weder BLIK noch vorab autorisierte Lastschriften, die das Automated Clearing Settlement System (ACSS) verwenden.

Zeigen Sie Ihre Einstellungen für Zahlungsmethoden an und aktivieren Sie die Zahlungsmethoden, die Sie unterstützen möchten. Sie müssen mindestens eine Zahlungsmethode aktiviert haben, um eine Checkout-Sitzung zu erstellen.

Standardmäßig aktiviert Stripe Karten und andere gängige Zahlungsmethoden, mit denen Sie mehr Kundinnen/Kunden erreichen können. Wir empfehlen jedoch, zusätzliche Zahlungsmethoden zu aktivieren, die für Ihr Unternehmen und Ihre Kundinnen/Kunden relevant sind. Weitere Informationen zur Unterstützung von Produkten und Zahlungsmethoden finden Sie auf der Seite Unterstützte Zahlungsmethoden und der Preisseite für Gebühren.

Migrieren Sie Ihren Erstellungsaufruf für PaymentIntents
Serverseitig

Legen Sie im SDK fest, dass mindestens die API-Version 2025-03-31.basil verwendet wird.

TypeScript
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys import Stripe from 'stripe'; const stripe = new Stripe(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
, { apiVersion: '2025-03-31.basil;' as any, });

Da Sie mit dem Payment Element mehrere Zahlungsmethoden akzeptieren können, empfehlen wir die Verwendung dynamischer Zahlungsmethoden, die automatisch aktiviert werden, wenn Sie payment_method_types nicht in der Checkout-Sitzung übergeben. Wenn diese Funktion aktiviert ist, wertet Stripe die Währung, Einschränkungen für Zahlungsmethoden und andere Parameter aus, um die Liste der für Ihre Kundinnen/Kunden verfügbaren Zahlungsmethoden zu ermitteln. Wir priorisieren Zahlungsmethoden, die die Konversionsrate erhöhen und für die Währung und den Standort der Kundinnen/Kunden am relevantesten sind.

Aktualisieren Sie Ihren Erstellungsaufruf für PaymentIntents, um stattdessen eine Checkout-Sitzung zu erstellen. In der Checkout Sessions-Instanz übergeben Sie:

  • line_items: Stellt den Inhalt der Bestellung dar
  • ui_mode: custom: Gibt an, dass Sie eingebettete Komponenten verwenden
  • mode: payment: Gibt an, dass Sie einmalige Zahlungen für die Checkout-Sitzung akzeptieren
  • return_url: Stellt die URL dar, an die Ihre Kundinnen/Kunden weitergeleitet werden, nachdem sie ihre Zahlung in der App oder auf der Website der Zahlungsmethode authentifiziert oder abgebrochen haben

Geben Sie außerdem die client_secret der Checkout-Sitzung für die spätere Verwendung an den Client zurück.

Jede Checkout-Sitzung generiert nach Bestätigung einen PaymentIntent. Wenn Sie zusätzliche Parameter aus Ihrer aktuellen Integration beim Erstellen eines PaymentIntent beibehalten möchten, sehen Sie sich die unter payment_intent_data verfügbaren Optionen an.

Vorher
Nachher
Ruby
intent = Stripe::PaymentIntent.create({ amount: 1099, currency: 'usd', payment_method_types: ['card'], })
Ruby
session = Stripe::Checkout::Session.create({ line_items: [ { price_data: { currency: 'usd', product_data: {name: 'T-shirt'}, unit_amount: 1099, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'custom', return_url: '{{RETURN_URL}}', }) { clientSecret: session.client_secret, }.to_json

OptionalZusätzliche Optionen für die Checkout-Sitzung
Serverseitig

Ihre Elements-Instanz migrieren
Clientseitig

Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem Sie es zum head der HTML-Datei hinzufügen. Laden Sie Stripe.js immer direkt von js.stripe.com, um PCI-konform zu bleiben. Fügen Sie das Skript nicht in ein Paket ein und hosten Sie selbst keine Kopie davon.

Um Stripe.js von v3 auf basil zu aktualisieren, fügen Sie das folgende Skript-Tag ein: <script src="https://js.stripe.com/basil/stripe.js"></script>. Weitere Informationen zur Versionsverwaltung in Stripe.js finden Sie in der Richtlinie zu Versionsverwaltung und Support von Stripe.js.

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

Erstellen Sie eine fetchClientSecret-Funktion, die das Client-Geheimnis von Ihrem Server abruft und ein Promise zurückgibt, das mit dem Client-Geheimnis aufgelöst wird.

Ersetzen Sie Ihren stripe.elements()-Aufruf durch stripe.initCheckout und übergeben Sie fetchClientSecret. initCheckout gibt ein Promise zurück, das in eine Checkout-Instanz aufgelöst wird.

Das Checkout-Objekt fungiert als Grundlage Ihrer Bezahlseite, da es Daten aus der Checkout-Sitzung und Methoden zum Aktualisieren der Sitzung enthält.

Verwenden Sie das von checkout.session() zurückgegebene Objekt als Referenz für Ihre Preise. Wir empfehlen, die total und lineItems aus der Sitzung in Ihrer Nutzeroberfläche zu lesen und anzuzeigen.

Auf diese Weise können Sie neue Funktionen mit minimalen Codeänderungen aktivieren. Wenn Sie beispielsweise manuelle Währungspreise hinzufügen, sind keine Änderungen an der Nutzeroberfläche erforderlich, wenn Sie die total anzeigen.

Vorher
Nachher
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements();
checkout.js
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const fetchClientSecret = () => { return fetch('/create-checkout-session', {method: 'POST'}) .then((response) => response.json()) .then((json) => json.checkoutSessionClientSecret); }; stripe.initCheckout({fetchClientSecret}) .then((checkout) => { const checkoutContainer = document.getElementById('checkout-container'); checkoutContainer.append(JSON.stringify(checkout.lineItems, null, 2)); checkoutContainer.append(document.createElement('br')); checkoutContainer.append(`Total: ${checkout.session().total.total.amount}`); });
index.html
<div id="checkout-container"></div>

E-Mail-Adressen von Kundinnen/Kunden erfassen
Clientseitig

Die Umstellung auf eingebettete Komponenten erfordert einen zusätzlichen Schritt, in dem die E-Mail-Adresse Ihrer Kundinnen/Kunden erfasst wird.

Wenn Sie beim Erstellen der Checkout-Sitzung bereits eine bestehende customer_email oder eine/n bestehende/n Kundin/Kunden mit einer gültigen E-Mail-Adresse übergeben, können Sie diesen Schritt überspringen.

Wenn Sie Ihre eigene E-Mail-Validierung implementieren, können Sie die validierte E-Mail-Adresse bei checkout.confirm übergeben und diesen Schritt überspringen.

Erstellen Sie eine E-Mail-Eingabe, um die E-Mail-Adresse Ihrer Kundinnen und Kunden zu erfassen. Rufen Sie updateEmail auf, wenn Ihre Kundin/Ihre Kunde die Eingabe abgeschlossen hat, um die E-Mail-Adresse zu validieren und zu speichern.

Je nach Design Ihres Bezahlformulars können Sie updateEmail folgendermaßen aufrufen:

  • Direkt vor dem Senden der Zahlung. Sie können auch updateEmail aufrufen, um die Validierung zu einem früheren Zeitpunkt durchzuführen, z. B. bei Eingabeunschärfe.
  • Vor dem Übergang zum nächsten Schritt, z. B. dem Klicken auf die Schaltfläche Speichern, wenn Ihr Formular mehrere Schritte umfasst.
index.html
<input type="text" id="email" /> <div id="email-errors"></div>
checkout.js
stripe.initCheckout({fetchClientSecret}).then((checkout) => { const emailInput = document.getElementById('email'); const emailErrors = document.getElementById('email-errors'); emailInput.addEventListener('input', () => { // Clear any validation errors emailErrors.textContent = ''; }); emailInput.addEventListener('blur', () => { const newEmail = emailInput.value; checkout.updateEmail(newEmail).then((result) => { if (result.error) { emailErrors.textContent = result.error.message; } }); }); });

Payment Element hinzufügen
Clientseitig

Sie können jetzt das Card Element und die Elemente der einzelnen Zahlungsmethoden durch das Payment Element ersetzen. Das Payment Element passt basierend auf der Zahlungsmethode und dem Land die zu erfassenden Eingabefelder automatisch an (z. B. Erfassung der vollständigen Rechnungsadresse), sodass Sie keine nutzerdefinierten Eingabefelder pflegen müssen.

Im folgenden Beispiel wird CardElement durch PaymentElement ersetzt:

checkout.html
<form id="payment-form"> <div id="card-element"> </div> <div id="payment-element"> <!-- Mount the Payment Element here --> </div> <button id="submit">Submit</button> </form>
checkout.js
const cardElement = elements.create("card"); cardElement.mount("#card-element"); const paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");

Submit-Handler aktualisieren
Clientseitig

Statt einzelne Bestätigungsmethoden wie stripe.confirmCardPayment oder stripe.confirmP24Payment zu verwenden, nutzen Sie checkout.confirm, um Zahlungsinformationen zu erfassen und an Stripe zu übermitteln.

Um die Checkout-Sitzung zu bestätigen, aktualisieren Sie Ihren Submit-Handler, sodass er checkout.confirm anstelle einzelner Bestätigungsmethoden verwendet.

Beim Aufruf versucht checkout.confirm, alle erforderlichen Aktionen durchzuführen, wie z. B. das Anzeigen eines 3DS-Dialogfelds oder die Weiterleitung an eine Bankautorisierungsseite. Nach der Bestätigung werden die Kundinnen/Kunden an die von Ihnen konfigurierte return_url weitergeleitet. Dies entspricht in der Regel einer Seite auf Ihrer Website, die den Status der Zahlung angibt.

Wenn Sie den gleichen Bezahlvorgang für Kartenzahlungen beibehalten möchten und Weiterleitungen nur für Zahlungsmethoden mit Weiterleitung vornehmen möchten, können Sie die Weiterleitung auf if_required festlegen.

Im folgenden Codebeispiel wird stripe.confirmCardPayment durch checkout.confirm ersetzt:

Vorher
Nachher
// Create the PaymentIntent and obtain clientSecret const res = await fetch("/create-intent", { method: "POST", headers: {"Content-Type": "application/json"}, }); const {client_secret: clientSecret} = await res.json(); const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); const {error} = await stripe.confirmCardPayment(clientSecret, { payment_method: { card: elements.getElement(CardElement) } }); if (error) { handleError(error); } };
const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); const {error} = await checkout.confirm(); if (error) { handleError(error); } };

OptionalZahlungsdaten bei der Zahlung speichern

Ereignisse nach der Zahlung verarbeiten
Serverseitig

Stripe sendet das Ereignis checkout.session.completed, wenn die Zahlung abgeschlossen ist. Verwenden Sie das Webhook-Tool im Dashboard oder folgen Sie dem Leitfaden für Webhooks, um diese Ereignisse zu empfangen und Aktionen auszuführen. Dazu zählen beispielsweise der Versand von Bestellbestätigungen per E-Mail, das Protokollieren des Verkaufs in der Datenbank und die Einführung eines Versand-Workflows.

Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients die Antwort manipulieren könnten. Wenn Sie Ihre Integration so einrichten, dass sie asynchrone Ereignisse überwacht, können Sie verschiedene Arten von Zahlungsmethoden mit einer einzigen Integration akzeptieren.

Neben der Abwicklung des checkout.session.completed-Ereignisses empfehlen wir die Abwicklung von diesen weiteren Ereignissen, wenn Sie Zahlungen mit dem Payment Element erfassen:

EreignisBeschreibungAktion
checkout.session.completedWird gesendet, wenn Kundinnen und Kunden eine Zahlung erfolgreich abgeschlossen haben.Senden Sie den Kund/innen eine Auftragsbestätigung und wickeln Sie die Bestellung ab.
checkout_session.async_payment_succeededWird gesendet, wenn die Zahlung durch einen Kunden/eine Kundin mit einer verzögerten Zahlungsmethode schließlich erfolgreich ist.Senden Sie den Kund/innen eine Auftragsbestätigung und wickeln Sie die Bestellung ab.
checkout.session.async_payment_failedWird gesendet, wenn ein Kunde/eine Kundin einen Zahlungsversuch durchführt, die Zahlung jedoch fehlschlägt.Wenn eine Zahlung von async_payment_failed wechselt, bieten Sie den Kundinnen/Kunden einen weiteren Zahlungsversuch an.
checkout.session.expiredWird gesendet, wenn die Checkout-Sitzung eines Kunden/einer Kundin abgelaufen ist, also nach 24 Stunden.Wenn eine Zahlung von expired zu payment_failed übergeht, bieten Sie den Kundinnen/Kunden an, die Checkout-Seite neu zu laden und eine neue Checkout-Sitzung zu erstellen.

Integration testen

  1. Navigieren Sie zu Ihrer Bezahlseite.
  2. Geben Sie in den Zahlungsdetails eine Zahlungsmethode aus der folgenden Tabelle ein. Für Kartenzahlungen:
    • Geben Sie für die Karte ein beliebiges Ablaufdatum in der Zukunft ein.
    • Geben Sie als Prüfziffer/CVC eine 3-stellige Zahl ein.
    • Geben Sie eine beliebige Postleitzahl ein.
  3. Zahlung an Stripe senden.
  4. Gehen Sie zum Dashboard und suchen Sie auf der Seite Transaktionen nach der Zahlung. Wenn Ihre Zahlung erfolgreich war, wird sie in dieser Liste angezeigt.
  5. Klicken Sie auf Ihre Zahlung, um weitere Details wie Rechnungsinformationen und die Liste der gekauften Artikel anzuzeigen. Sie können diese Informationen verwenden, um die Bestellung abzuwickeln.
KartennummerSzenarioSo führen Sie den Test durch
Die Kartenzahlung ist erfolgreich und es ist keine Authentifizierung erforderlich.Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an.
Für die Kartenzahlung ist eine Authentifizierung erforderlich.Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an.
Die Karte wird mit einem Ablehnungscode wie insufficient_funds abgelehnt.Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an.
Die UnionPay-Karte hat eine variable Länge von 13 bis 19 Ziffern.Füllen Sie das Kreditkartenformular aus und geben Sie die Kreditkartennummer mit beliebiger Gültigkeitsdauer, CVC und Postleitzahl an.

Hier finden Sie weitere Informationen zum Testen Ihrer Integration.

Siehe auch

  • Rechnungs- und Versandadressen erfassen
  • Promo-Codes für Einmalzahlungen verwenden
  • Steuer automatisch einziehen
  • Anpassbare Postenmenge aktivieren
  • Automatische Währungsumrechnung
War diese Seite hilfreich?
JaNein
Benötigen Sie Hilfe? Kontaktieren Sie den Kundensupport.
Nehmen Sie an unserem Programm für frühzeitigen Zugriff teil.
Schauen Sie sich unser Änderungsprotokoll an.
Fragen? Sales-Team kontaktieren.
LLM? Lesen Sie llms.txt.
Unterstützt von Markdoc