# Transaktionen zurückerstatten Stripe Terminal-Zahlungen stornieren oder rückerstatten Stripe Terminal unterstützt sowohl die *automatische* (Automatically capture funds when a charge is authorized) als auch die *manuelle* (Manually capture funds separately from an authorization) Erfassung. Wenn das SDK einen bestätigten PaymentIntent an Ihre App zurückgibt, ist die Zahlung autorisiert, aber nicht [erfasst](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Sie können Zahlungen, die autorisiert und noch nicht erfasst wurden, [stornieren](https://docs.stripe.com/terminal/features/refunds.md#canceling-payments). Wenn der PaymentIntent bereits erfasst wurde, müssen Sie die durch den PaymentIntent erstellte zugrundeliegende Zahlung mit der [Refunds API](https://docs.stripe.com/api.md#create_refund) oder über das [Dashboard](https://docs.stripe.com/refunds.md?dashboard-or-api=dashboard) [zurückerstatten](https://docs.stripe.com/terminal/features/refunds.md#refunds). Nach einem Tag mit Aktivitäten in Ihrem Backend empfehlen wir, [Zahlungen abzugleichen](https://docs.stripe.com/terminal/payments/collect-card-payment.md#reconciling), um unbeabsichtigte Autorisierungen und nicht eingezogene Gelder zu verhindern. ## Verfügbarkeit **Zahlungen stornieren** ist für Visa, Mastercard, American Express, Discover und girocard verfügbar. Bei Einzelnachrichten-Zahlungsmethoden wie [Interac](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#interac-payments) und [eftpos](https://docs.stripe.com/terminal/payments/regional.md?integration-country=AU#eftpos-payments) werden PaymentIntents automatisch erfasst. Anstelle der Stornierung der PaymentIntents sollte Ihre Anwendung die Möglichkeit bieten, am Ende des Bezahlvorgangs eine Erstattung zu veranlassen. **Online-Rückerstattungen** sind für alle Kartennetzwerke außer Interac verfügbar. [Persönliche Rückerstattungen](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#refund-an-interac-payment) sind nur auf Interac verfügbar. ## Zahlungen stornieren (Clientseitig)(Serverseitig) - [cancelPaymentIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)cancelPaymentIntent:completion:) - [cancelPaymentIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/cancel-payment-intent.html) - [cancelPaymentIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelPaymentIntent) - [cancelPaymentIntent (Java)](https://stripe.dev/stripe-terminal-java/core/com.stripe.stripeterminal/-terminal/cancel-payment-intent.html) Sie können eine `card_present`-PaymentIntent jederzeit [stornieren](https://docs.stripe.com/api.md#cancel_payment_intent), bevor sie erfasst wurde. Durch Stornieren einer PaymentIntent werden alle nicht erfassten Gelder freigegeben, und eine stornierte PaymentIntent kann nicht mehr zur Durchführung von Zahlungen verwendet werden. Verwenden Sie dies, wenn Ihre Kundin/Ihr Kunde beispielsweise nach der Verarbeitung der Zahlung beschließt, eine andere Zahlungsmethode zu verwenden oder bar bezahlen möchte. Auf der Nutzeroberfläche Ihrer Anwendung sollten Sie Nutzerinnen und Nutzern die Möglichkeit geben, die Zahlung nach dem [Bestätigen](https://docs.stripe.com/terminal/payments/collect-card-payment.md#confirm-payment) zu stornieren, bevor die Zahlung abgeschlossen und Ihr Backend benachrichtigt wird. Anschließend wird die Zahlung [erfasst](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). #### Clientseitig Stornieren Sie einen `PaymentIntent` auf Ihrem Client mit dem iOS SDK, Android SDK oder React Native SDK: # Servergestützt > This is a Servergestützt for when terminal-sdk-platform is server-driven. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=server-driven. > Die clientseitige Stornierung des `PaymentIntent` ist mit dem iOS SDK, Android SDK und React Native SDK möglich. Wenn Sie die servergestützte Integration verwenden, stornieren Sie den `PaymentIntent` serverseitig. # JavaScript > This is a JavaScript for when terminal-sdk-platform is js. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=js. > Der Abbruch eines `PaymentIntent` auf dem Client ist mit den anderen Client-SDKs möglich. Wenn Sie das JavaScript SDK für Stripe Terminal verwenden, stornieren Sie einen `PaymentIntent` auf dem Server. # iOS > This is a iOS for when terminal-sdk-platform is ios. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=ios. #### Swift ```swift // Action for a "Cancel" button func cancelAction() { if let paymentIntent = self.paymentIntent { Terminal.shared.cancelPaymentIntent(paymentIntent) { cancelResult, cancelError in if let error = cancelError { print("cancelPaymentIntent failed: \(error)") } else { print("cancelPaymentIntent succeeded") } } } } ``` # Android > This is a Android for when terminal-sdk-platform is android. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=android. #### Kotlin ```kotlin Terminal.getInstance().cancelPaymentIntent(paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` # React Native > This is a React Native for when terminal-sdk-platform is react-native. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=react-native. ```js const { cancelPaymentIntent } = useStripeTerminal(); const { paymentIntent, error } = await cancelPaymentIntent(paymentIntent); if (error) { // Placeholder for handling exception return; } // Placeholder for handling successful operation ``` #### Serverseitig - [PaymentIntent stornieren](https://docs.stripe.com/api/payment_intents/cancel.md) Für das JavaScript SDK und die serverseitige Integration müssen Sie den `PaymentIntent` auf Ihrem Server stornieren. Bei den anderen SDKs können Sie den `PaymentIntent` auf Ihrem Server stornieren, wenn die zum Starten einer Zahlung erforderlichen Informationen in Ihrer App nicht ohne Weiteres verfügbar sind. ```curl curl -X POST https://api.stripe.com/v1/payment_intents/pi_ANipwO3zNfjeWODtRPIg/cancel \ -u "<>:" ``` ## Rückerstattungen durchführen (Server-side) Wenn Sie eine PaymentIntent verwenden, um eine Zahlung von einer Kundin/einem Kunden einzuziehen, erstellt Stripe im Hintergrund eine [Abbuchung](https://docs.stripe.com/api/charges/object.md). Um die Zahlung der Kundin/des Kunden zu erstatten, nachdem die PaymentIntent erfolgreich war, [erstellen Sie eine Rückerstattung](https://docs.stripe.com/api.md#create_refund), indem Sie die PaymentIntent-ID oder die Zahlungs-ID übergeben. Sie können auch optional nur einen Teil der Zahlung rückerstatten, indem Sie einen Betrag angeben. Rückerstattungen können [über die API](https://docs.stripe.com/refunds.md?dashboard-or-api=api) oder [über das Dashboard](https://docs.stripe.com/refunds.md?dashboard-or-api=dashboard) vorgenommen werden. Für Interac-Transaktionen in Kanada können Sie [Vor-Ort-Rückerstattungen](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#refund-an-interac-payment) über BBPOS WisePad 3, BBPOS WisePOS E, Stripe Reader S700/S710, Tap to Pay auf dem iPhone oder Tap to Pay auf Android vornehmen. Bei Online-Rückerstattungen muss der/die Karteninhaber/in seine/ihre Karte am Point of Sale nicht erneut vorlegen. Das folgende Beispiel zeigt, wie eine vollständige Rückerstattung durch Übergabe der PaymentIntent-ID erstellt wird. ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo ``` Um einen Teil eines PaymentIntent zu erstatten, geben Sie einen `amount`-Parameter als Ganzzahl in Cent (oder in der kleinsten Währungseinheit der Abbuchungswährung) an: ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo \ -d amount=1000 ``` ## See also - [Anzeige des Warenkorbs](https://docs.stripe.com/terminal/features/display.md) - [Belege](https://docs.stripe.com/terminal/features/receipts.md)