Kartenzahlungen einziehen
Bereiten Sie Ihre Anwendung und Ihr Backend auf das Einziehen von Kartenzahlungen mit Stripe Terminal vor.
Zum Einziehen von Zahlungen mit Stripe Terminal müssen Sie einen Zahlungsablauf in Ihrer Anwendung programmieren. Verwenden Sie das Stripe Terminal SDK, um einen PaymentIntent zu erstellen und zu aktualisieren. Bei einem PaymentIntent handelt es sich um ein Objekt, das eine einzelne Zahlungssitzung darstellt.
Die fehlerresistente Terminal-Integration teilt den Zahlungsvorgang in mehrere Schritte auf, von denen jeder sicher erneut versucht werden kann:
- PaymentIntent erstellen.
- Zahlungsmethode erfassen. Sie können definieren, ob Ihre Zahlungen automatisch oder manuell erfasst werden sollen.
- Zahlung bestätigen. Die Autorisierung für die Karte der Kundin/des Kunden erfolgt, wenn das SDK die Zahlung bestätigt.
- (Optional) Zahlung erfassen
Erstellen Sie ein PaymentIntentClientseitigServerseitig
Der erste Schritt beim Einziehen von Zahlungen ist das Starten des Zahlungsablaufs. Wenn Kundinnen/Kunden den Bestellvorgang abschließen, muss Ihre Anwendung ein PaymentIntent-Objekt erstellen. Dies stellt eine neue Zahlungssitzung auf Stripe dar.
Einen PaymentIntent können Sie auf dem Client oder auf dem Server erstellen.
Verwenden Sie Test-Beträge, um verschiedene Ergebnisse zu erzielen. Ein Betrag, der auf 00 endet, führt zu einer bestätigten Zahlung.
Erstellen Sie PaymentIntents für abgelehnte Karten nicht erneut
Erstellen Sie einen PaymentIntent nicht neu, wenn eine Karte abgelehnt wird. Verwenden Sie stattdessen denselben PaymentIntent wieder, um doppelte Abbuchungen zu vermeiden.
Clientseitig
Erstellen Sie einen PaymentIntent auf Ihrem Client:
Warnung
Wenn Ihre App mit dem Lesegerät Verifone P400 verbunden ist, können Sie keinen PaymentIntent über das React Native SDK erstellen. Sie müssen stattdessen den PaymentIntent auf dem Server erstellen und den PaymentIntent in Ihrer App mithilfe der Methode retrievePaymentIntent im SDK abrufen.
const {error, paymentIntent} = await createPaymentIntent({ amount: 1000, currency: "usd", });
Serverseitig
Wenn die zum Starten einer Zahlung erforderlichen Informationen in Ihrer App nicht jederzeit verfügbar sind, können Sie den PaymentIntent auch auf Ihrem Server erstellen.
Das folgende Beispiel zeigt, wie Sie einen PaymentIntent auf Ihrem Server erstellen:
Für Terminal-Zahlungen muss der Parameter payment_ card_ enthalten.
Sie können den Zahlungsablauf wie folgt steuern:
- Um den Zahlungsablauf für
card_-Zahlungen vollständig zu steuern, setzen Siepresent capture_aufmethod manual. So können Sie vor der endgültigen Finalisierung der Zahlung einen Abgleichschritt hinzufügen. - Um Zahlungen in einem Schritt zu autorisieren und zu erfassen, setzen Sie
capture_aufmethod automatic.
Um in Australien Zahlungen zu akzeptieren, müssen Sie capture_ auf automatic oder manual_ setzen. Weitere Informationen finden Sie in unserer Dokumentation zu Australien. Um Interac-Zahlungen in Kanada zu akzeptieren, müssen Sie auch interac_ in payment_ aufnehmen. Weitere Informationen finden Sie in unserer Dokumentation zu Kanada.
Der PaymentIntent enthält ein Client-Geheimnis, einen Schlüssel, der für jeden PaymentIntent eindeutig ist. Um das Client-Geheimnis zu verwenden, müssen Sie es vom PaymentIntent auf Ihrem Server beziehen und an den Client übergeben.
Um einen PaymentIntent abzurufen, rufen Sie mithilfe des Client-Geheimnisses retrievePaymentIntent auf.
Nachdem Sie den PaymentIntent abgerufen haben, rufen Sie damit collectPaymentMethod auf.
const { paymentIntent, error } = await retrievePaymentIntent(clientSecret); if (error) { // Placeholder for handling exception return; } // Placeholder for collecting payment method
Zahlungsmethode erfassenClientseitig
Nachdem Sie einen PaymentIntent erstellt haben, erfassen Sie als Nächstes eine Zahlungsmethode mit dem SDK.
Das verbundene Lesegerät wartet auf die Vorlage einer Karte, nachdem Ihre App CollectPaymentMethodAsync aufgerufen hat.Um eine Zahlungsmethode zu erfassen, muss Ihre App mit einem Lesegerät verbunden sein. Das verbundene Lesegerät wartet auf die Vorlage einer Karte, nachdem Ihre App collectPaymentMethod aufgerufen hat.
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent
Diese Methode erfasst die verschlüsselten Daten einer Zahlungsmethode mithilfe des verbundenen Lesegeräts und ordnet die verschlüsselten Daten dem lokalen PaymentIntent zu.
Optionale Prüfung der Angaben zur Zahlungsmethode
Für erweiterte Use cases können Sie die Details der Zahlungsmethode der vorgelegten Karte prüfen und Ihre eigene Geschäftslogik vor der Autorisierung ausführen.
Verwenden Sie den Parameter updatePaymentIntent, um eine PaymentMethod an den serverseitigen PaymentIntent anzufügen. Dieser Daten werden in der collectPaymentMethod-Antwort zurückgegeben.
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent, updatePaymentIntent: true, }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent
Diese Methode fügt die erfassten verschlüsselten Zahlungsmethodendaten mit einer Aktualisierung zum PaymentIntent-Objekt hinzu. Eine Autorisierung ist erst erforderlich, wenn Sie die Zahlung bestätigen. Dieser erweiterte Anwendungsfall wird auf dem Verifone P400 nicht unterstützt.
Nach Erfassung der Zahlungsmethode müssen Sie die Zahlung autorisieren oder den Einzug innerhalb von 30 Sekunden abbrechen.
Wenn das SDK offline ist, ist das Feld paymentMethod im PaymentIntent-Objekt nicht vorhanden.
Sie können an dieser Stelle auf Attribute wie Kartenmarke, Finanzierung und andere nützliche Daten zugreifen.
Stripe versucht zu erkennen, ob eine mobile Wallet bei einer Transaktion verwendet wird, wie im Attribut wallet. gezeigt. Das Attribut wird jedoch nicht ausgefüllt, wenn die ausstellende Bank die lesegerätegestützte Identifizierung einer mobilen Wallet nicht unterstützt, sodass eine genaue Erkennung nicht garantiert werden kann. Nach der Autorisierung im Bestätigungsschritt erhält Stripe aktuelle Informationen von den Netzwerken und aktualisiert wallet. zuverlässig.
Erfassung abbrechen
Programmgesteuerte Stornierung
Sie können die Erfassung von Zahlungsmethoden abbrechen, indem Sie cancelCollectPaymentMethod im React Native SDK aufrufen.
Kundenseitig initiierte Stornierung
Wenn Sie enableCustomerCancellation für eine Transaktion auf „true“ gesetzt haben, wird Nutzerinnen und Nutzern von intelligenten Lesegeräten eine Schaltfläche zum Abbrechen angezeigt.
Durch Tippen auf die Schaltfläche „Abbrechen“ wird die aktive Transaktion abgebrochen.
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent, enableCustomerCancellation: true }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent
Ereignisse verarbeiten
Wenn Sie eine Zahlungsmethode mit einem Lesegerät wie dem Stripe M2 ohne integriertes Display erfassen, muss Ihre App in der Lage sein, den Nutzerinnen und Nutzern Ereignisse aus der Erfassung der Zahlungsmethode anzuzeigen. Diese Ereignisse helfen Nutzerinnen und Nutzern, Zahlungen erfolgreich einzuziehen (beispielsweise beim erneuten Versuch einer Karte, bei der Verwendung einer anderen Lesemethode).
Wenn eine Transaktion startet, übergibt das SDK einen ReaderInputOptions-Wert an den Bildschirm-Handler des Lesegeräts Ihrer App, wobei die akzeptierten Eingabetypen (beispielsweise Swipe, Insert, oder Tap) angezeigt werden. Fordern Sie die Nutzerinnen und Nutzer über die Nutzeroberfläche des Bezahlvorgangs Ihrer App auf, die Karte unter Verwendung einer dieser Optionen vorzulegen.
Während der Transaktion kann das SDK unter Umständen Ihre App auffordern, Ihren Nutzerinnen und Nutzern zusätzliche Anweisungen anzuzeigen (beispielsweise Retry Card). Dazu wird ein Wert ReaderDisplayMessage an den Handler der Anzeige Ihres Lesegeräts übergeben. Stellen Sie sicher, dass die Nutzeroberfläche Ihres Bezahlvorgangs Ihren Nutzerinnen und Nutzern diese Meldungen anzeigt.
useStripeTerminal({ onDidRequestReaderInput: (options) => { // Placeholder for updating your app's checkout UI Alert.alert(options.join('/')); }, onDidRequestReaderDisplayMessage: (message) => { Alert.alert(message); }, });
Zahlung bestätigenClientseitig
Nachdem eine Zahlungsmethode erfolgreich von der Kundin/dem Kunden erfasst wurde, besteht der nächste Schritt darin, die Zahlung mit dem SDK zu bestätigen. Wenn Sie bereit sind, mit der Zahlung fortzufahren, rufen Sie confirmPaymentIntent mit dem aktualisierten PaymentIntent aus Schritt 2 auf.
- Bei einer manuellen Erfassung von Zahlungen führt ein erfolgreicher Aufruf von
confirmPaymentIntentzu einemPaymentIntentmit dem Statusrequires_.capture - Bei einer automatischen Erfassung von Zahlungen wechselt der
PaymentIntentzum Statussucceeded.
Bestätigen Sie PaymentIntents immer mithilfe des Terminal SDK auf der Client-Seite. Bei der serverseitigen Bestätigung werden wichtige Interaktionen, wie z. B. PIN-Abfragen, umgangen, was zu fehlgeschlagenen Transaktionen führen kann.
const { paymentIntent, error } = await confirmPaymentIntent({ paymentIntent: paymentIntent }); if (error) { // Placeholder for handling exception return; } // Placeholder for notifying your backend to capture paymentIntent.id
Sie müssen einen PaymentIntent innerhalb von 2 Tagen manuell erfassen. Andernfalls läuft die Autorisierung ab und die Gelder werden für den Kunden/die Kundin freigegeben.
Umgang mit Fehlern
Wenn eine Zahlung fehlschlägt, gibt das SDK einen Fehler zurück, der den aktualisierten PaymentIntent enthält. Ihre Anwendung muss den PaymentIntent überprüfen, um zu entscheiden, wie mit dem Fehler umgegangen wird.
| PaymentIntent-Status | Bedeutung | Lösung |
|---|---|---|
requires_ | Zahlungsmethode abgelehnt | Versuchen Sie, eine andere Zahlungsmethode zu erfassen, indem Sie collectPaymentMethod mit demselben PaymentIntent erneut aufrufen. |
requires_ | Vorübergehendes Verbindungsproblem | Rufen Sie confirmPaymentIntent mit demselben PaymentIntent erneut auf, um die Anfrage zu wiederholen. |
PaymentIntent ist nil | Anfrage an Stripe ist abgelaufen, unbekannter Status des PaymentIntent | Versuchen Sie erneut, den ursprünglichen PaymentIntent zu bestätigen. Erstellen Sie keinen neuen PaymentIntent, da dies zu mehreren Autorisierungen für den/die Karteninhaber/in führen könnte. |
Wenn Anfragen mehrmals hintereinander ablaufen, liegt möglicherweise ein Verbindungsproblem vor. Stellen Sie sicher, dass Ihre App mit dem Internet verbunden ist.
Doppelte Abbuchungen vermeiden
Das PaymentIntent-Objekt ermöglicht Geldbewegungen bei Stripe – verwenden Sie einen einzigen PaymentIntent, um eine Transaktion darzustellen.
Verwenden Sie denselben PaymentIntent, nachdem eine Karte abgelehnt wurde (z. B. wenn sie nicht ausreichend gedeckt ist), damit Ihre Kundin/Ihr Kunde es mit einer anderen Karte erneut versuchen kann.
Wenn Sie den PaymentIntent bearbeiten, müssen Sie CollectPaymentMethodAsync aufrufen, um die Zahlungsinformationen auf dem Lesegerät zu aktualisieren.Wenn Sie den PaymentIntent bearbeiten, müssen Sie collectPaymentMethod aufrufen, um die Zahlungsinformationen auf dem Lesegerät zu aktualisieren.
Ein PaymentIntent muss sich im Status requires_ befinden, bevor Stripe ihn bestätigen kann. Ein autorisierter, erfasster oder stornierter PaymentIntent kann nicht von einem Lesegerät bestätigt werden.
Zahlung erfassenServerseitig
Wenn Sie bei der Erstellung des PaymentIntent in Schritt 1 capture_ als manual definiert haben, gibt das SDK einen autorisierten, aber nicht erfassten PaymentIntent an Ihre Anwendung zurück. Erfahren Sie mehr über den Unterschied zwischen Autorisierung und Erfassung.
Wenn Ihre App einen bestätigten PaymentIntent von Ihrem SDK empfängt, stellen Sie sicher, dass Ihr Backend angewiesen wird, die Zahlung zu erfassen. Erstellen Sie einen Endpoint in Ihrem Backend, der eine PaymentIntent-ID akzeptiert und eine Anfrage zum Erfassen des PaymentIntent an die Stripe-API übermittelt:
Eine erfolgreiche capture führt zu einem PaymentIntent mit dem Status succeeded.
Um sicherzustellen, dass die erfasste Plattformgebühr für verbundene Konten korrekt ist, überprüfen Sie jeden PaymentIntent und ändern Sie die Plattformgebühr bei Bedarf, bevor Sie die Zahlung manuell erfassen.
Zahlungen abgleichen
Um die Zahlungsaktivität Ihres Unternehmens zu überwachen, können Sie am Tagesende PaymentIntents mit Ihrem internen Bestellsystem auf Ihrem Server abgleichen.
Ein PaymentIntent, der den Status requires_ beibehält, kann eines der folgenden zwei Szenarien darstellen:
Überflüssige Autorisierung auf der Kartenabrechnung Ihrer Kundin/Ihres Kunden
- Ursache: Der/die Nutzer/in hat den Bezahlvorgang Ihrer App während einer Transaktion verlassen.
- Lösung: Wenn der nicht erfasste
PaymentIntentkeiner abgeschlossenen Bestellung auf Ihrem Server zugeordnet ist, können Sie ihn abbrechen. Sie können einen storniertenPaymentIntentnicht zur Durchführung von Zahlungen verwenden.
Unvollständiger Einzug von Geldern von einer Kundin/einem Kunden
- Ursache: Die Anfrage Ihrer App, die Ihr Backend zur Erfassung der Zahlung anweist, ist fehlgeschlagen.
- Lösung: Wenn der nicht erfasste
PaymentIntenteiner abgeschlossenen Bestellung auf Ihrem Server zugeordnet ist und keine andere Zahlung (zum Beispiel eine Barzahlung) für die Bestellung angenommen wurde, können Sie ihn erfassen.
Trinkgelder einziehen US only
In the US, eligible users can collect a tip on the receipt when capturing payments.