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
Entwicklerressourcen

Kartenzahlungen ohne Webhooks akzeptieren

Erfahren Sie, wie Sie eine Kartenzahlung auf Ihrem Server bestätigen und Anfragen zur Kartenauthentifizierung abwickeln.

Vorsicht

Stripe empfiehlt anstelle des Card Element das neuere Payment Element zu verwenden. Wenn Sie nur das Payment Element verwenden, können Sie mehrere Zahlungsmethoden akzeptieren. Erfahren Sie mehr über das Card Element und das Payment Element.

Wenn Sie mehr Support und Zukunftssicherheit wünschen, nutzen Sie die Standard-Integration für asynchrone Zahlungen.

Mit dieser Integration können Sie auf die Antwort des Clients warten und eine Zahlung auf dem Server abschließen, ohne Webhooks verwenden oder Offline-Ereignisse verarbeiten zu müssen. Auch wenn es zunächst einfacher erscheint, lässt sich diese Integration nur schwer skalieren, wenn Ihr Unternehmen wächst. Es gelten mehrere Beschränkungen:

Sie möchten migrieren?

Wenn Sie eine bestehende Stripe-Integration von der Charges API migrieren möchten, befolgen Sie die Anweisungen im Migrationsleitfaden.

  • Unterstützt nur Karten – Sie müssen mehr programmieren, um ACH und andere beliebte regionale Zahlungsmethoden separat zu unterstützen.
  • Risiko der doppelten Abbuchung: Wenn bei jedem Zahlungsversuch Ihrer Kundinnen/Kunden gleichzeitig ein neuer PaymentIntent erstellt wird, laufen Sie Gefahr, das Kundenkonto aus Versehen doppelt zu belasten. Beachten Sie dazu die Best Practices.
  • Zusätzlicher Trip zum Client: Für Karten mit 3D Secure oder solche, die Vorschriften wie denen zur starken Kundenauthentifizierung (SCA) unterliegen, sind zusätzliche Schritte auf dem Client erforderlich.

Beachten Sie diese Beschränkungen, wenn Sie die Integration durchführen möchten. Verwenden Sie andernfalls die Standard-Integration.

Stripe einrichten

Zunächst benötigen Sie ein Stripe-Konto. Registrieren Sie sich jetzt.

Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung:

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Kartenangaben erfassen
Clientseitig

Erfassen Sie Kartendaten auf dem Client mit Stripe.js und Stripe Elements. Elements beinhaltet vorgefertigte Komponenten der Nutzeroberfläche zur Erfassung und Validierung von Kartennummern, Postleitzahlen und Ablaufdaten.

Ein Stripe Element enthält ein iframe, dass die Zahlungsdaten über eine HTTPS-Verbindung sicher an Stripe sendet. Die Adresse der Bezahlseite muss ebenfalls mit https:// beginnen, nicht mit http://, damit Ihre Integration funktioniert.

Sie können Ihre Integration ohne HTTPS testen. Dann müssen Sie das Protokoll aber aktivieren, bevor Sie Ihre ersten Live-Zahlungen empfangen.

Nehmen Sie zunächst das Stripe.js-Skript in den Header jeder Seite auf Ihrer Website auf. Elements ist automatisch als Funktion von Stripe.js verfügbar.

<script src="https://js.stripe.com/basil/stripe.js"></script>

Indem Sie das Skript auf jeder Seite Ihrer Website einbinden, profitieren Sie vom hochentwickeltem Betrugspräventionssystem von Stripe und der Möglichkeit, ungewöhnliches Browserverhalten zu erkennen.

Zahlungsformular erstellen

Um Kartendaten von Ihren Kundinnen/Kunden sicher zu erfassen, erstellt Elements auf Stripe gehostete UI-Komponenten für Sie. Diese erscheinen dann als iFrames in Ihrem Bezahlformular. Um festzulegen, an welcher Stelle im Formular diese Komponenten erscheinen sollen, erstellen Sie bitte leere DOM-Elemente (Container) mit eindeutigen IDs in Ihrem Bezahlformular.

index.html
HTML
<form id='payment-form'> <label> Card details <!-- placeholder for Elements --> <div id="card-element"></div> </label> <button type="submit">Submit Payment</button> </form>

Erstellen Sie als Nächstes eine Instanz des Stripe-Objekts und geben Sie dabei Ihren veröffentlichbaren API-Schlüssel als ersten Parameter an: Erstellen Sie dann eine Instanz des Elements-Objekts und verbinden sie damit ein Kartenelement am entsprechenden Platzhalter auf der Seite.

script.js
Vollständiges Beispiel anzeigen
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements(); // Set up Stripe.js and Elements to use in checkout form const style = { base: { color: "#32325d", fontFamily: '"Helvetica Neue", Helvetica, sans-serif', fontSmoothing: "antialiased", fontSize: "16px", "::placeholder": { color: "#aab7c4" } }, invalid: { color: "#fa755a", iconColor: "#fa755a" }, }; const cardElement = elements.create('card', {style}); cardElement.mount('#card-element');

Das card-Element vereinfacht das Zahlungsformular und minimiert durch ein einziges, flexibles Eingabefeld, mit dem alle notwendigen Kartenangaben sicher erfasst werden können, die Anzahl der Pflichtfelder.

Alternativ können Sie die Elemente cardNumber, cardExpiry und cardCvc zu einem flexiblen Kartenformular mit Mehrfacheingabe kombinieren.

Notiz

Erfassen Sie immer eine Postleitzahl, um die Kartenakzeptanzquote zu steigern und Betrug vorzubeugen.

Das einzeilige Card Element erfasst und sendet die Postleitzahl der Kundin/des Kunden an Stripe. Wenn Sie Ihr Zahlungsformular mit geteilten Elements erstellen (Kartennummer, Ablaufdatum, Prüfziffer) fügen Sie ein separates Eingabefeld für die Postleitzahl der Kundin/des Kunden hinzu.

PaymentMethod erstellen

Verwenden Sie dann stripe.createPaymentMethod auf Ihrem Client, um die Kartenangaben zu erfassen und eine PaymentMethod zu erstellen, wenn der/die Nutzer/in auf die Schaltfläche „Absenden“ klickt.

script.js
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); const result = await stripe.createPaymentMethod({ type: 'card', card: cardElement, billing_details: { // Include any additional collected billing details. name: 'Jenny Rosen', }, }) stripePaymentMethodHandler(result); });

PaymentMethod an Ihren Server übermitteln
Clientseitig

Wenn die PaymentMethod erfolgreich erstellt wurde, senden Sie ihre ID an den Server.

script.js
const stripePaymentMethodHandler = async (result) => { if (result.error) { // Show error in payment form } else { // Otherwise send paymentMethod.id to your server (see Step 4) const res = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_method_id: result.paymentMethod.id, }), }) const paymentResponse = await res.json(); // Handle server response (see Step 4) handleServerResponse(paymentResponse); } }

PaymentIntent erstellen
Serverseitig

Richten Sie auf Ihrem Server einen Endpoint für den Empfang der Anfrage ein. Dieser Endpoint wird auch später verwendet, um Karten zu verarbeiten, die einen zusätzlichen Authentifizierungsschritt erfordern.

Erstellen Sie einen neuen PaymentIntent mit der ID der auf Ihrem Client erstellten PaymentMethod. Sie können den PaymentIntent bestätigen, indem Sie die Eigenschaft Bestätigen auf „true“ festlegen, wenn der PaymentIntent erstellt wird oder indem Sie nach der Erstellung Bestätigen aufrufen. Die separate Autorisierung und Erfassung wird für Kartenzahlungen ebenfalls unterstützt.

Wenn für die Zahlung weitere Aktionen wie 3D Secure-Authentifizierung erforderlich sind, wird der Status des PaymentIntent auf requires_action gesetzt. Wenn die Zahlung fehlschlägt, wird der Status wieder auf requires_payment_method gesetzt und Sie sollten dem/der Nutzer/in eine Fehlermeldung anzeigen. Wenn für die Zahlung keine zusätzliche Authentifizierung erforderlich ist, wird eine Abbuchung erstellt und der Status des PaymentIntent wird auf succeeded gesetzt.

Notiz

In Versionen der API vor dem 11.02.2019 wird requires_payment_method als requires_source und requires_action als requires_source_action angezeigt.

Command Line
Curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "payment_method"="{{PAYMENT_METHOD_ID}}" \ -d "amount"=1099 \ -d "currency"="usd" \ -d "confirmation_method"="manual" \ -d "confirm"="true"

Wenn Sie die Karte für die spätere Wiederverwendung speichern möchten, erstellen Sie ein Customer-Objekt, um die PaymentMethod zu speichern, und übergeben Sie beim Erstellen der PaymentIntent die folgenden zusätzlichen Parameter:

  • customer. Legen Sie die Eigenschaft auf die ID des/der Kunden/Kundin fest.
  • setup_future_usage. Legen Sie die Eigenschaft auf off_session fest, damit Stripe darüber informiert wird, dass Sie diese PaymentMethod für Off-Session-Zahlungen wiederverwenden möchten, wenn die Kundin/der Kunde nicht anwesend ist. Wenn Sie diese Eigenschaft festlegen, wird die PaymentMethod nach der Bestätigung des PaymentIntent und nach Durchführung aller erforderlichen Aktionen der Nutzerin/des Nutzers für die Kundin/den Kunden gespeichert. Mehr dazu finden Sie im Code-Beispiel unter Karten nach einer Zahlung speichern.

Mögliche weitere Aktionen handhaben
Clientseitig

Schreiben Sie Code für Situationen, in denen Ihre Kundinnen/Kunden handeln müssen. In der Regel werden Zahlungen erfolgreich durchgeführt, nachdem Sie sie in Schritt 4 auf dem Server bestätigt haben. Wenn der PaymentIntent allerdings weitere Schritte von der Kundin/dem Kunden verlangt, wie etwa die Authentifizierung mit 3D Secure, kommt dieser Code zum Einsatz.

Verwenden Sie stripe.handleCardAction, um die Nutzeroberfläche für die Bearbeitung von Kundenaktionen und den Abschluss der Zahlung auszulösen. Bei erfolgreicher Authentifizierung erhält der PaymentIntent den Status requires_confirmation. Bestätigen Sie den PaymentIntent erneut auf Ihrem Server, um die Zahlung abzuschließen.

Verwenden Sie beim Testen eine Testkartennummer, die eine Authentifizierung erfordert (zum Beispiel ), um diesen Ablauf zu erzwingen. Wenn Sie eine Karte verwenden, die keine Authentifizierung erfordert (zum Beispiel ), wird dieser Teil des Ablaufs übersprungen und mit Schritt 4 abgeschlossen.

script.js
const handleServerResponse = async (response) => { if (response.error) { // Show error from server on payment form } else if (response.requires_action) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(response.payment_intent_client_secret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }

Notiz

Die Ausführung von stripe.handleCardAction kann einige Sekunden dauern. Während dieser Zeit sollten Sie Ihr Formular deaktivieren, damit keine erneute Absendung erfolgen kann. Lassen Sie stattdessen ein Wartesymbol einblenden, wie beispielsweise eine Sanduhr. Tritt ein Fehler auf, lassen Sie eine Fehlermeldung für die Kundin/den Kunden anzeigen, aktivieren Sie das Formular erneut und blenden Sie das Wartesymbol aus. Falls die Kundin/der Kunde weitere Schritte (z. B. eine Authentifizierung) für den Abschluss der Zahlung durchführen muss, führt Stripe.js durch diesen Prozess.

PaymentIntent erneut bestätigen
Serverseitig

Dieser Code wird nur ausgeführt, wenn für eine Zahlung – wie bei der Vorgehensweise im vorherigen Schritt – eine zusätzliche Authentifizierung erforderlich ist. Der Code selbst ist nicht optional, da jede Zahlung diesen zusätzlichen Schritt erfordern kann.

Bestätigen Sie den PaymentIntent erneut mit demselben Endpoint, den Sie zuvor eingerichtet haben, um die Zahlung abzuschließen und die Bestellung abzuwickeln. Stellen Sie sicher, dass diese Bestätigung innerhalb einer Stunde nach dem Zahlungsversuch erfolgt. Andernfalls schlägt die Zahlung fehl und der Status wird auf requires_payment_method zurückgesetzt.

Command Line
Curl
curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST"

Integration testen

​​Ihnen stehen mehrere Testkarten zur Verwendung in einer Sandbox zur Verfügung, um sicherzustellen, dass diese Integration bereit ist. Sie können sie mit einer beliebigen Prüfziffer/CVC und einem Ablaufdatum in der Zukunft verwenden.

NummerBeschreibung
Zahlung ist erfolgreich und wird sofort verarbeitet.
Erfordert Authentifizierung. Stripe veranlasst ein Modal, das den Kunden um Authentifizierung bittet.
Zahlung schlägt immer mit dem Ablehnungscode insufficient_funds fehl.

Eine vollständige Liste der Testkarten finden Sie in unserem Leitfaden zum Testbetrieb.

OptionalPrüfziffer (CVC) erneut erfassen

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