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
Ü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
In-App-Elements
Zahlungsszenarien
Umgang mit mehreren Währungen
Nutzerdefinierte Zahlungsabläufe
Flexibles Acquiring
Orchestrierung
Präsenzzahlungen
Terminal
    Übersicht
    Persönliche Zahlungen akzeptieren
    Integrationsdesign
    Wählen Sie Ihr Lesegerät aus
    Konzipieren einer Integration
    Quickstart
    Beispielanwendungen
    Tests
    Terminal einrichten
    Integration einrichten
    Mit einem Lesegerät verbinden
    Zahlung annehmen
    Kartenzahlungen einziehen
    Weitere Zahlungsmethoden
    Offline-Zahlungen annehmen
      Kartenzahlungen einziehen
    Versand-/Telefonbezahlung
    Regionale Aspekte
    Während des Bezahlvorgangs
    Trinkgelder einziehen
    Zahlungsdetails erfassen und für die zukünftige Verwendung speichern
    Flexible Autorisierungen
    Nach dem Bezahlen
    Transaktionen zurückerstatten
    Belege zur Verfügung stellen
    Checkout anpassen
    Anzeige des Warenkorbs
    Eingaben auf dem Bildschirm erfassen
    Ausgelesene Daten erfassen
    Erfassen von Daten durch Tippen für NFC-Geräte
    Apps auf Geräten
    Lesegeräte verwalten
    Lesegeräte anfordern, zurückgeben, ersetzen
    Lesegerät registrieren
    Standorte und Zonen verwalten
    Lesegeräte konfigurieren
    Lesegeräte überwachen
    Verschlüsselung
    Quellen
    API-Referenzen
    Mobile Lesegeräte
    Intelligente Lesegeräte
    SDK-Migrationsleitfaden
    Bereitstellungscheckliste
    Produktdatenblätter für Lesegeräte von Stripe Terminal
Mehr als Zahlungen
Unternehmensgründung
Krypto
Financial Connections
Climate
Betrug verstehen
Betrugsprävention von Radar
Zahlungsanfechtungen verwalten
Identitäten verifizieren
StartseiteZahlungenTerminalAccept offline payments

Kartenzahlungen offline einziehen

Ziehen Sie Kartenzahlungen ein, wenn Sie Probleme mit der Internetverbindung haben.

Mit dem Terminal SDK kann Ihre Anwendung weiterhin Zahlungen über ein mobiles Lesegerät ohne Netzwerkverbindung einziehen.

Häufiger Fehler

Beim Offline-Betrieb werden die Zahlungsinformationen zum Zeitpunkt des Verkaufs erfasst, und erst nachdem die Verbindung wiederhergestellt und die Zahlung weitergeleitet wurde, wird versucht, die Autorisierung durchzuführen. Als Nutzer/in übernehmen Sie alle mit einer Offline-Transaktion verbundenen Ablehnungs- und Manipulationsrisiken. Wenn Ihr manipuliertes Lesegerät keine Zahlungen an Stripe weiterleiten kann oder der Kartenaussteller die Transaktion ablehnt, gibt es keine Möglichkeit, die Gelder zurückzuerhalten. Und Sie erhalten möglicherweise keine Zahlung von den Kundinnen und Kunden für bereits bereitgestellte Waren oder Dienstleistungen.

Um die Wahrscheinlichkeit zu verringern, dass Zahlungen von Ausstellern abgelehnt werden, sollten Sie:

  • Stellen Sie die Internetverbindung so schnell wie möglich wieder her, um die Zahlungen an Stripe zu erfassen.
  • Beschränken Sie Transaktionen, wenn sie einen bestimmten Betrag überschreiten.
  • Lassen Sie alle Offline-Zahlungen fehlschlagen, wenn das SDK eine Reihe von Transaktionen gespeichert hat, deren Summe einen bestimmten Betrag übersteigt.

Zahlungen offline einziehen

Offline-Zahlungen umfassen dieselben Schritte wie Online-Zahlungen: Zahlung erstellen, einziehen, verarbeiten und erfassen. Ihr Gerät kann in jedem Schritt des Prozesses von online zu offline wechseln.

  1. Offline-Modus aktivieren
  2. Offline mit einem Lesegerät verbinden
  3. Offline-Events verarbeiten
  4. Payment Intent offline erstellen
  5. Zahlungsmethode erfassen
  6. Zahlung bestätigen
  7. Warten, bis Zahlungen weitergeleitet werden
  8. (Optional) Zahlung erfassen
  9. (Optional) Offline-Zahlungen prüfen

Offline-Modus aktivieren

Um den Offline-Modus zu verwenden, muss Ihre Anwendung Version 3.3.0 oder höher des Terminal iOS SDK nutzen.

Verwenden Sie ein Konfigurations-Objekt oder das Dashboard, um den Offline-Modus für die unterstützten Geräte an Ihrem Location zu aktivieren.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node
Go
.NET
No results
curl https://api.stripe.com/v1/terminal/configurations \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "offline[enabled]"=true

Nachdem Sie den Offline-Modus für ein Configuration-Objekt aktiviert haben, können Sie es einem Location zuweisen. Sie können den Offline-Modus auch standardmäßig für alle Locations aktivieren, indem Sie das standardmäßige Configuration-Objekt für Ihr Konto aktualisieren. Es kann mehrere Minuten dauern, bis Änderungen der Configuration API auf Ihr SDK und Lesegerät übertragen werden, und es kann erforderlich sein, dass Sie die Verbindung mit Ihrem Lesegerät trennen und wiederherstellen müssen, damit die Änderungen wirksam werden.

Offline mit einem Lesegerät verbinden

Das SDK speichert die erforderlichen Informationen zum Location nach der Online-Verbindung lokal. Bei nachfolgenden Offline-Verbindungen werden die gespeicherten Konfigurationsinformationen von diesem Location verwendet.

Um Zahlungen mit einem intelligenten Lesegerät einzuziehen, während Sie offline sind, müssen Sie zuvor innerhalb der letzten 30 Tage mit einem mobilen Lesegerät desselben Typs, am selben Location und die Software Ihres Lesegeräts innerhalb dieser Zeit aktualisiert haben.

Wenn Sie im Offline-Modus versuchen, eine Verbindung zu einem Lesegerät herzustellen, und diese Anforderungen nicht erfüllen, schlägt die Anfrage mit einem Fehler fehl.

FehlerAuflösung
Das SDK ist nicht mit dem Internet verbundenStellen Sie sicher, dass der von Ihnen verwendete Location für den Offline-Modus konfiguriert ist. Andernfalls stellen Sie eine Verbindung zu einem beliebigen Lesegerät her, während Sie online sind, und stellen Sie dann eine Verbindung zu einem Lesegerät desselben Typs her, während Sie offline sind.
Das ausgewählte Lesegerät benötigt ein Software-Update, bevor Offline-Zahlungen eingezogen werden können.Die Software des Lesegeräts wurde seit mindestens 30 Tagen nicht mehr aktualisiert. Stellen Sie eine Verbindung zum Lesegerät her, wenn Sie online sind, um es zu aktualisieren.
Das ausgewählte Lesegerät muss an diesem Standort erst online gekoppelt werden, bevor Offline-Zahlungen eingezogen werden können.Sie versuchen, eine Verbindung mit einem Lesegerätetyp herzustellen, mit dem Ihr POS zuvor noch nicht im Online-Modus verbunden wurde. Sie müssen sich zuerst mit diesem Lesegerät oder einem Lesegerät desselben Typs verbinden, während Sie online sind. Wenn Sie sich offline verbinden möchten, können Sie sich mit einem Lesegerätetyp verbinden, mit dem Ihr POS online zuvor bereits eine Verbindung aufgebaut hat.

Wenn Sie die Anwendung neu installieren oder einen Vorgang ausführen, der den Festplattenspeicher für das SDK löscht (z. B. das Löschen des Caches Ihrer POS-App in den Einstellungen des POS-Geräts), verlieren Sie alle Zahlungen, die im SDK gespeichert und noch nicht weitergeleitet wurden. Stellen Sie sicher, dass keine Zahlungen gespeichert sind, bevor Sie zerstörerische Aktionen durchführen.

Offline-Ereignisse verarbeiten
Client-seitig

SDK-Referenz

  • OfflineDelegate (iOS)
  • NetworkStatus (iOS)

Damit Ihre Anwendung Updates zum Netzwerkstatus des SDK und zum Status der weitergeleiteten Zahlungen erhalten kann, implementieren Sie das OfflineDelegate-Protokoll und übergeben Sie es an das Terminal SDK. Sie müssen OfflineDelegate festlegen, bevor Sie Zahlungen im Offline-Modus einziehen können.

CustomOfflineDelegate.swift
Swift
Objective-C
No results
import StripeTerminal class CustomOfflineDelegate: OfflineDelegate { func terminal(_ terminal: Terminal, didChangeOfflineStatus offlineStatus: OfflineStatus) { // Check the value of `offlineStatus` and update your UI accordingly. For instance, // you can check the SDK's network status at `offlineStatus.sdk.networkStatus`. // // You can also check the SDK's current offline status using // `Terminal.shared.offlineStatus.sdk.networkStatus`. } func terminal(_ terminal: Terminal, didForwardPaymentIntent intent: PaymentIntent, error: Error?) { // The PaymentIntent was successfully forwarded, or an error occurred. // Reconcile any local state using the backend-generated `PaymentIntent.stripeId` // and the metadata you supplied when creating the PaymentIntent. // // Note that the `PaymentIntent.stripeId` may still be nil if creating the // PaymentIntent in the backend failed. } func terminal(_ terminal: Terminal, didReportForwardingError error: Error) { // A non-specific error occurred while forwarding a PaymentIntent. // Check the error message and your integration implementation to // troubleshoot. } }
AppDelegate.swift
Swift
Objective-C
No results
import UIKit import StripeTerminal @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { Terminal.setTokenProvider(APIClient.shared) Terminal.shared.offlineDelegate = CustomOfflineDelegate() // ... return true } // ... }

PaymentIntent offline erstellen
Client-seitig

SDK-Referenz

  • createPaymentIntent (iOS)
  • CreateConfiguration (iOS)
  • OfflineDetails (iOS)

Um den Offline-Betrieb zu unterstützen, verwenden Sie den Parameter createPaymentIntent des SDK, um PaymentIntent-Objekte zu erstellen. So kann das SDK im Offline-Modus PaymentIntents erstellen und an Stripe weiterleiten, sobald die Verbindung wiederhergestellt ist.

Während des Offline-Betriebs haben PaymentIntent-Objekte die stripeId Null. Wir empfehlen, den Metadaten des PaymentIntent eine nutzerdefinierte Kennung hinzuzufügen, um PaymentIntent-Objekte abzugleichen, die offline in Ihrer Datenbank erstellt wurden.

Nachdem der PaymentIntent in Schritt 7 erfolgreich an Stripe weitergeleitet wurde, verwenden Sie Ihre individuelle Kennung, um sie im Aufruf OfflineDelegate.didForwardPaymentIntent abzugleichen.

PaymentViewController.swift
Swift
Objective-C
No results
import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Checkout" button func checkoutAction() throws { // Populate the correct transaction amount from your application. let amount = UInt(10_00) // Build up parameters for creating a `PaymentIntent` let params = try PaymentIntentParametersBuilder( amount: amount, currency: "usd" ) .setMetadata(["offlineId": UUID().uuidString]) .build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { // Handle errors in your application. print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") // If the `PaymentIntent` was created offline, its `stripeId` field will be nil. if let onlineCreatedId = paymentIntent.stripeId { print("created online"); } else { print("created offline") } } } } }

Der Parameter Terminal.createPaymentIntent akzeptiert den Parameter CreateConfiguration. Wenn Sie offline arbeiten, speichert das Terminal SDK standardmäßig alle Offline-Zahlungen und leitet sie dann an das Backend von Stripe weiter, sobald die Verbindung wiederhergestellt ist.

Um dieses Verhalten anzupassen, können Sie ein CreateConfiguration-Objekt übergeben, wobei das Attribut offlineBehavior als REQUIRE_ONLINE, PREFER_ONLINE oder FORCE_OFFLINE festgelegt ist.

Risikomanagement

Das Festlegen von offlineBehavior auf REQUIRE_ONLINE führt dazu, dass die aktuelle Transaktion fehlschlägt, wenn Sie offline arbeiten. Möglicherweise möchten Sie z. B. Transaktionen über einem bestimmten Betrag oder sämtliche Offline-Transaktionen untersagen, wenn das SDK eine Reihe von Transaktionen gespeichert hat, deren Summe einen bestimmten Betrag überschreitet.

Das SDK bietet zwei Eigenschaften, die Ihnen bei der Risikoverwaltung helfen:

  1. Terminal.offlineStatus.sdk.offlinePaymentsCount
  2. Terminal.offlineStatus.sdk.offlinePaymentAmountsByCurrency

Verwaltung der Latenz im Offline-Betrieb

Basierend auf Ihrer Netzwerkverbindung bestimmt das Terminal SDK automatisch, ob Zahlungen online oder offline eingezogen werden sollen. Es kann jedoch vorkommen, dass Sie trotz aktiver Netzwerkverbindung offline arbeiten möchten (z. B. wenn Sie Transaktionen schnell erfassen müssen und Ihre Netzwerkverbindung langsam ist). Sie können ein CreateConfiguration-Objekt übergeben, dessen offlineBehavior auf FORCE_OFFLINE gesetzt ist, um die Zahlung unabhängig von der Verbindung offline einzuziehen.

Zahlungen, die offline eingezogen werden, während das SDK von Terminal über eine aktive Netzwerkverbindung verfügt, werden im Hintergrund weitergeleitet.

PaymentViewController.swift
Swift
Objective-C
No results
import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Checkout" button func checkoutAction() throws { // ...build up parameters and callback for creating a `PaymentIntent` // Your app might want to prevent offline payments for too large an amount. // Here, we block the payment if the amount is over 1000 usd. // Otherwise, we allow collecting offline if the network connection is unavailable. let offlineBehavior: SCPOfflineBehavior = { if amount > UInt(1_000_00) { return .requireOnline } else { return .preferOnline } }() let createConfiguration = try CreateConfigurationBuilder().setOfflineBehavior(offlineBehavior).build() Terminal.shared.createPaymentIntent(params, createConfig: createConfiguration) { createResult, createError in // handle success or failure } } }

Zahlungsmethode erfassen
Client-seitig

SDK-Referenz

  • didRequestReaderInput (iOS)
  • CollectConfiguration (iOS)

Notiz

Die Zahlungspflicht liegt in Ihrer Verantwortung, wenn Sie Ihr Lesegerät offline betreiben. Da Magnetstreifendaten leicht zu fälschen sind, lässt Stripe diese Option im Offline-Betrieb nicht zu. Das Antippen von Karten wird auch nicht in Märkten unterstützt, in denen eine starke Kundenauthentifizierung erforderlich ist.

Der Einzug von Zahlungen im Offline-Modus ähnelt dem Einziehen von Zahlungen online. Verwenden Sie die Methode didRequestReaderInput, um Kundinnen/Kunden die gültigen Optionen zur Vorlage der Karte anzuzeigen.

Notiz

Die Überprüfung der Angaben zur Zahlungsmethode vor der Autorisierung wird im Offline-Modus nicht unterstützt. Sie können zwar weiterhin den Parameter initWithUpdatePaymentIntent in CollectConfiguration verwenden, das Feld paymentMethod für den PaymentIntent fehlt jedoch, wenn das SDK offline arbeitet.

PaymentViewController.swift
Swift
Objective-C
No results
import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Checkout" button func checkoutAction() { Terminal.shared.collectPaymentMethod(paymentIntent) { collectResult, collectError in if let error = collectError { print("collectPaymentMethod failed: \(error)") } else if let paymentIntent = collectResult { print("collectPaymentMethod succeeded") // ... Confirm the payment } } } }

Zahlung bestätigen
Client-seitig

Das Bestätigen von Zahlungen im Offline-Modus ähnelt dem Bestätigen von Zahlungen online. Der Hauptunterschied besteht darin, dass Ihre Integration offline-spezifische Fehlerfälle handhaben muss, z. B. wenn die Transaktion den von Stripe erzwungenen Offline-Höchstbetrag von 10.000 USD oder den Gegenwert in Ihrer Betriebswährung überschreitet.

In einigen Fällen erstellt das SDK möglicherweise online einen PaymentIntent, bestätigt diesen jedoch offline. Wenn dies geschieht, hat der PaymentIntent möglicherweise eine stripeId, die nicht Null ist. Wenn er offline bestätigt wurde, wird offlineDetails definiert und ausgefüllt.

PaymentViewController.swift
Swift
Objective-C
No results
import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Checkout" button func checkoutAction() { Terminal.shared.confirmPaymentIntent(paymentIntent) { confirmResult, confirmError in if let error = confirmError { // Handle offline-specific errors in your application (for example, // unsupported payment method). print("confirmPaymentIntent failed: \(error)") } else if let confirmedPaymentIntent= confirmResult { print("confirmPaymentIntent succeeded") if let offlineDetails = paymentIntent.offlineDetails { print("confirmed offline"); } else { print("confirmed online") } } } } }

Ausstellung von Belegen

Möglicherweise benötigen Sie Informationen über die Karte, mit der Sie eine Zahlung offline abschließen können. Beispielsweise müssen Sie möglicherweise einen Beleg für Kundinnen/Kunden erstellen, die diesen zum Zeitpunkt des Kaufs benötigen.

Wenn der PaymentIntent offline bestätigt wird, rufen Sie ihre OfflineCardPresentDetails from the paymentIntent.offlineDetails.offlineCardPresentDetails-Eigenschaft ab.

Dieser Hash enthält eine ReceiptDetails -Eigenschaft, die Sie zum Generieren eines Belegs verwenden können, sowie weitere Kartendaten wie die Name und Marke der Karteninhaberin/des Karteninhabers.

Die Belegfelder account_type und authorization_response_code sind bei offline verarbeiteten PaymentIntents nicht verfügbar. Vordefinierte E-Mail-Belege werden erst gesendet, nachdem die Verbindung wiederhergestellt und die Zahlung erfolgreich erfasst wurde.

Warten Sie, bis die Zahlungen weitergeleitet wurden
Client-seitig

Wenn die Internet access wiederhergestellt wird, beginnt das SDK automatisch mit der Weiterleitung der gespeicherten Offline-Zahlungen.

Das SDK versucht, Zahlungen weiterzuleiten, auch wenn sein Netzwerkstatus offline ist. Dies bedeutet, dass der Anbieter Ihres Verbindungs-Tokens möglicherweise eine Anfrage zur Bereitstellung eines Verbindungs-Tokens erhält, auch wenn das Gerät offline ist.

Wenn Sie Ihr POS-Gerät zu früh ausschalten, werden Ihre Zahlungen möglicherweise nicht weitergeleitet. Sie können Terminal.offlineStatus.sdk.networkStatus abfragen, um sicherzustellen, dass Ihr POS online ist und Zahlungen weiterleiten kann und Terminal.offlineStatus.sdk.offlinePaymentsCount , um zu überprüfen, wie viele Zahlungen an das Terminal-SDK weitergeleitet werden müssen.

Zahlung erfassen

Während Sie offline sind, können Sie PaymentIntents erstelle, deren captureMethod auf automatic gesetzt ist.

Nachdem Sie diese PaymentIntents bestätigt haben, haben sie den Status Succeeded anstelle von RequiresCapture. Stripe erfasst die Zahlungen automatisch, nachdem Sie sie weitergeleitet haben.

Wenn Sie sich für die manuelle Erfassung entscheiden, müssen Zahlungen, die erfolgreich weitergeleitet und autorisiert wurden, von Ihrem Backend oder Ihrer Anwendung erfasst werden.

  • Zum Erfassen von Zahlungen von Ihrem Backend verwenden Sie Webhooks, um PaymentIntents mit dem Status requires_capture zu erstellen.
  • Um Zahlungen aus Ihrer Anwendung zu erfassen, warten Sie darauf, dass Ihre Anwendung Aufrufe an OfflineDelegate.didForwardPayment für jeden PaymentIntent erhält, während das SDK diesen weiterleitet. Ein PaymentIntent ist bereit für die Erfassung, wenn sein Status RequiresCapture ist und offlineDetails null ist oder der Wert für requiresUpload gleich NO ist.
PaymentViewController.swift
Swift
Objective-C
No results
Terminal.shared.confirmPaymentIntent(paymentIntent) { confirmResult, confirmError in if let error = confirmError { // Handle offline-specific errors in your application (for example, // unsupported payment method). print("confirmPaymentIntent failed: \(error)") } else if let confirmedPaymentIntent = confirmResult { if intent.status == .requiresCapture { if let offlineDetails = confirmedPaymentIntent.offlineDetails(), offlineDetails.requiresUpload { // Offline payment, wait for `didForwardPaymentIntent` (see snippet below) } else { // Online payment, can be captured now } } // else, handle other intent.status results here } }

Erfassen Sie eine Offline-Zahlung, nachdem das SDK dieses im didForwardPaymentIntent Ihres OfflineDelegate weitergeleitet hat:

CustomOfflineDelegate.swift
Swift
Objective-C
No results
import StripeTerminal class CustomOfflineDelegate: OfflineDelegate { // ... func terminal(_ terminal: Terminal, didForwardPaymentIntent intent: PaymentIntent, error: Error?) { if let error = error { // Handle the error appropriate for your application return } if intent.status == .requiresCapture { // The intent is ready to be captured. } else { // Handle the intent.status as appropriate. } } // ... }

Offline eingezogene Zahlungen prüfen

Nach der Autorisierung können Sie die PaymentIntents API verwenden, um Details einer Zahlung offline zu untersuchen. Greifen Sie auf die Angaben zur Zahlungsmethode für das neueste Charge-Objekt für einen PaymentIntent zu, um zu ermitteln, ob die Zahlung offline eingezogen wurde.

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