# Eine Karte ohne Bankauthentifizierung speichern Erfassen Sie Kartendaten in Ihrer mobilen App und belasten Sie Ihren Kunden/Ihre Kundin zu einem späteren Zeitpunkt. # iOS > This is a iOS for when platform is ios. View the full page at https://docs.stripe.com/payments/mobile/save-card-without-authentication?platform=ios. Mit Stripe haben Sie die Möglichkeit, Kartendaten Ihrer Kund/innen vorab zu erfassen und die Belastung zu einem späteren Zeitpunkt durchzuführen. In einigen Regionen erfordern Banken eine zweite Authentifizierungsmethode, z. B. die Eingabe eines Codes über ein Mobilgerät. Der zusätzliche Schritt wirkt sich negativ auf die Konversionsrate auf, wenn Kund/innen Ihre Website oder Anwendung nicht aktiv nutzen und den Kauf nicht direkt authentifizieren können. Wenn Sie überwiegend in den USA und Kanada tätig sind, erfordern die Banken keine Authentifizierung und Sie können diese einfachere Integration verwenden. Diese Integration ist in Ländern, die eine Authentifizierung für das Speichern von Karten erfordern (z. B. Indien), nicht konform und hat zur Folge, dass für eine Expansion in andere Länder oder für zusätzliche Zahlungsmethoden grundlegende Änderungen an der Integration notwendig sind. Hier erfahren Sie, wie Sie [Karten speichern, die eine Authentifizierung erfordern](https://docs.stripe.com/payments/save-and-reuse.md). > #### Konformität > > Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Zum Beispiel für den Fall, dass Sie seine/ihre Zahlungsmethode für die zukünftige Nutzung speichern möchten, wenn er/sie Ihre Website oder App nicht aktiv nutzt. Fügen Sie Ihrer Website oder App Bedingungen hinzu, die angeben, wie Sie die Details zur Zahlungsmethode speichern und Kund/innen die Möglichkeit geben, sich anzumelden. Wenn Sie Zahlungen offline vornehmen möchten, stellen Sie sicher, dass Ihre Bedingungen Folgendes enthalten: > > - Die kundenseitige Zustimmung, eine Zahlung oder mehrere Zahlungen für bestimmte Transaktionen in deren Namen einzuleiten. - Der erwartete Zeitpunkt und die voraussichtliche Häufigkeit von Zahlungen (z. B. Zahlungen für geplante Raten- oder Abonnementzahlungen oder für außerplanmäßige Aufstockungen). - Wie Sie den Zahlbetrag ermitteln. - Ihre Stornorichtlinie, wenn die Zahlungsmethode für einen Abonnementdienst ist. > > Dokumentieren Sie unbedingt die schriftliche Zustimmung Ihrer Kundinnen und Kunden zu diesen Bedingungen. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Jetzt regristrieren](https://dashboard.stripe.com/register). Richten Sie das iOS- und das Server-Stripe-SDK ein, bevor Sie mit der Integration beginnen. ### Serverseitig Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [Stripe iOS SDK](https://github.com/stripe/stripe-ios) ist Open Source, [vollständig dokumentiert](https://stripe.dev/stripe-ios/index.html) und kompatibel mit Apps, die iOS 13 oder höher unterstützen. #### Swift Package Manager Führen Sie zur Installation des SDK die folgenden Schritte aus: 1. Wählen Sie in Xcode **Datei** > **Add Package Dependencies** (Paketabhängigkeiten hinzufügen) aus und geben Sie als Repository-URL `https://github.com/stripe/stripe-ios-spm` ein. 1. Wählen auf unserer [Veröffentlichungsseite](https://github.com/stripe/stripe-ios/releases) die neueste Version aus. 1. Fügen Sie das Produkt **StripePaymentsUI** zum [Ziel Ihrer App](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app) hinzu. #### CocoaPods 1. Falls noch nicht geschehen, installieren Sie bitte die aktuellste Version von [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Wenn Sie keine bestehende [Podfile](https://guides.cocoapods.org/syntax/podfile.html) haben, führen Sie folgenden Befehl aus, um eine zu erstellen: ```bash pod init ``` 1. Fügen Sie folgende Zeile in Ihre `Podfile` ein: ```podfile pod 'StripePaymentsUI' ``` 1. Führen Sie folgenden Befehl aus: ```bash pod install ``` 1. Vergessen Sie nicht, ab jetzt in Zukunft anstelle der Datei `.xcodeproj` die Datei `.xcworkspace` zum Öffnen Ihres Projekts in Xcode zu verwenden. 1. Führen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK Folgendes aus: ```bash pod update StripePaymentsUI ``` #### Carthage 1. Falls noch nicht geschehen, installieren Sie bitte die aktuelle Version von [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Fügen Sie folgende Zeile in Ihre `Cartfile` ein: ```cartfile github "stripe/stripe-ios" ``` 1. Befolgen Sie die [Carthage-Installationsanweisungen](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Vergewissern Sie sich, dass Sie alle [hier](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking) aufgeführten erforderlichen Frameworks einbetten. 1. Führen Sie für zukünftige Updates auf die aktuelle Version unseres SDK einfach folgenden Befehl aus: ```bash carthage update stripe-ios --platform ios ``` #### Manuelles Framework 1. Gehen Sie auf unsere [GitHub-Release-Seite](https://github.com/stripe/stripe-ios/releases/latest), laden Sie **Stripe.xcframework.zip** herunter und entpacken Sie die Datei. 1. Ziehen Sie **StripePaymentsUI.xcframework** in den Abschnitt **Embedded Binaries** (Eingebettete Binärdateien) der Einstellungen unter **General** (Allgemeines) Ihres Xcode-Projekts. Aktivieren Sie dabei die Option **Copy items if needed** (Elemente kopieren, falls nötig). 1. Wiederholen Sie Schritt 2 für alle [hier](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking) aufgeführten erforderlichen Frameworks. 1. Wiederholen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK die Schritte 1–3. > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-ios/releases) auf GitHub. Um bei Veröffentlichung einer neuen Version eine Benachrichtigung zu erhalten, [achten Sie auf die Releases zum jeweiligen Repository](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/test/apikeys) von Stripe, um es beim Start der App auszuführen. Dadurch kann Ihre App Anfragen an die Stripe-API senden. #### Swift ```swift import UIKitimportStripePaymentsUI @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > Verwenden Sie Ihre [Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App. ## Kartendaten erfassen [Clientseitig] Zeigen Sie Ihren Kundinnen und Kunden zunächst ein Zahlungsformular an. Erfassen Sie ihre Kartendaten mit [STPPaymentCardTextField](https://stripe.dev/stripe-ios/stripe-payments-ui/Classes/STPPaymentCardTextField.html), einer Drop-In-Komponente der Nutzeroberfläche aus dem SDK, die die Kartennummer, das Ablaufdatum, die Prüfziffer (CVC) und die Postleitzahl erfasst. ![](https://d37ugbyn3rpeym.cloudfront.net/docs/mobile/ios/card-field.mp4) Übergeben Sie die Kartendaten an [createPaymentMethod(https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc(cs)STPAPIClient(im)createPaymentMethodWithPayment:completion:), um eine *PaymentMethod]* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu erstellen. #### Swift ```swift class CheckoutViewController: UIViewController { lazy var cardTextField: STPPaymentCardTextField = { let cardTextField = STPPaymentCardTextField() return cardTextField }() @objc func pay() { // Collect card details on the client STPAPIClient.shared.createPaymentMethod(with: cardTextField.paymentMethodParams) { [weak self] paymentMethod, error in guard let paymentMethod = paymentMethod else { // Display the error to the user return } let paymentMethodId = paymentMethod.stripeId // Send paymentMethodId to your server for the next steps } } } ``` Schicken Sie die daraus resultierende PaymentMethod-ID an Ihren Server und befolgen Sie die restlichen Schritte, um die Karte bei einem Kunden zu speichern und künftig diese Karte zu belasten. ## Karte speichern [Serverseitig] Speichern Sie die Karte, indem Sie die PaymentMethod *einem Kunden/einer Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen. Sie können das Customer-Objekt verwenden, um weitere Informationen über Ihre Kundinnen/Kunden zu speichern, z. B. Versanddaten und E-Mail-Adresse. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Wenn bereits ein Kunde besteht, können Sie die PaymentMethod stattdessen an dieses Objekt anhängen. ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/attach \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" ``` Verknüpfen Sie anschließend die ID des Customer-Objekts und die ID der PaymentMethod mit Ihrer eigenen Kundenrepräsentation, falls vorhanden. ## Die gespeicherte Karte belasten [Serverseitig] Wenn Sie eine Kundenzahlung einziehen möchten, suchen Sie nach der PaymentMethod-ID, die Sie belasten möchten. Dies können Sie entweder durch Speichern der IDs beider Objekte in Ihrer Datenbank tun oder indem Sie anhand der Kunden-ID nach allen für die Kundin oder den Kunden verfügbaren PaymentMethods suchen. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d type=card ``` Verwenden Sie die PaymentMethod-ID und die Kunden-ID, um einen neuen PaymentIntent zu erstellen. Legen Sie den Wert [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) auf „true“ fest, um Zahlungen abzulehnen, die weitere Aktionen von Ihren Kundinnen/Kunden erfordern, wie z. B. die Zwei-Faktor-Authentifizierung. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true ``` Schlägt ein Zahlungsversuch fehl, schlägt auch die Anfrage mit einem HTTP-Statuscode 402 fehl und Stripe gibt eine Fehlermeldung aus. Sie müssen Ihre Kundinnen/Kunden auffordern, zu Ihrer Anwendung zurückzukehren (z. B. indem Sie eine In-App-Benachrichtigung senden), um die Zahlung abzuschließen. Überprüfen Sie den Code des von der Stripe API Library ausgelösten [Fehlers](https://docs.stripe.com/api/errors/handling.md) oder überprüfen Sie den [last_payment_error.decline_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) auf dem PaymentIntent, um zu erfahren, warum der Kartenaussteller die Zahlung abgelehnt hat. ## Umgang mit Kartenfehlern Informieren Sie Ihre Kundinnen und Kunden darüber, dass die Zahlung fehlgeschlagen ist und leiten Sie sie zu dem in Schritt 1 erstellten Zahlungsformular weiter, wo sie neue Kartendaten eingeben können. Senden Sie die neue Zahlungsmethode-ID an Ihren Server, um sie dem Kundenobjekt [hinzuzufügen](https://docs.stripe.com/api/payment_methods/attach.md) und führen Sie die Zahlung erneut durch. Alternativ können Sie einen PaymentIntent erstellen und eine Karte in einem API-Aufruf speichern, wenn Sie bereits eine Kundin bzw. einen Kunden angelegt haben. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true \ -d setup_future_usage=on_session ``` Wenn Sie [setup_future_usage ](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `on_session` setzen, weist Stripe darauf hin, dass Sie die Karte für später speichern möchten, ohne eine unnötige Authentifizierung auszulösen. ## Integration testen Stripe stellt [Testkarten](https://docs.stripe.com/testing.md) bereit, die Sie im Sandbox-Modus verwenden können, um verschiedene Kartenverhaltensweisen zu simulieren. Verwenden Sie diese Karten mit beliebigen Prüfziffern, Postleitzahlen und Ablaufdaten in der Zukunft. | Nummer | Beschreibung | | ---------------- | ------------------------------------------------------------------------------------------------------------------ | | 4242424242424242 | Bei Erfolg sofortige Verarbeitung der Zahlung. | | 4000000000009995 | Schlägt stets mit dem Ablehnungscode `insufficient_funds` fehl. | | 4000002500003155 | Erfordert eine Authentifizierung, die in dieser Integration mit dem Code `authentication_required` abgelehnt wird. | ## Optional: CVC erneut erfassen Wenn Sie für gespeicherte Karten künftige Zahlungen erstellen, sollten Sie als zusätzliche Betrugspräventionsmaßnahme erneut die Prüfziffer (CVC) der Karte erfassen, um den/die Nutzer/in zu verifizieren. Beginnen Sie, indem Sie einen PaymentIntent von Ihrem Server aus mit dem Betrag und der Währung der Zahlung erstellen und legen Sie [customer](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) auf die ID Ihres Kunden/Ihrer Kundin fest. [Listen](https://docs.stripe.com/api/payment_methods/list.md) Sie dann die mit Ihren Kundinnen/Kunden verknüpften PaymentMethods auf, um festzulegen, welche PaymentMethods Ihren Nutzern/Nutzerinnen zur erneuten Erfassung der CVC angezeigt werden sollen. Nachdem Sie die CVC-Informationen des Kunden/der Kundin erneut erfasst haben, erstellen Sie eine [STPConfirmCardOptions](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPConfirmCardOptions.html)-Instanz mit der CVC des Kunden/der Kundin. Verwenden Sie die `STPConfirmCardOptions`-Instanz, um die `cardOptions`-Eigenschaft für eine Instanz von [STPConfirmPaymentMethodOptions](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPConfirmPaymentMethodOptions.html) zu konfigurieren. Abschließend bestätigen Sie den PaymentIntent, indem Sie eine [STPPaymentIntentParams](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentIntentParams.html)-Instanz mit der [STPConfirmPaymentMethodOptions](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPConfirmPaymentMethodOptions.html)-Instanz erstellen und an [STPPaymentHandler confirmPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentHandler.html#/c:@M@StripePayments@objc(cs)STPPaymentHandler(im)confirmPayment:withAuthenticationContext:completion: übergeben. #### Swift ```swift import UIKit import StripePaymentsUI class CheckoutViewController: UIViewController { // ... @objc func pay() { guard let paymentIntentClientSecret = paymentIntentClientSecret, let cvc = cvc else { return } let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret) let cardOptions = STPConfirmCardOptions() cardOptions.cvc = cvc; let paymentMethodOptions = STPConfirmPaymentMethodOptions() paymentMethodOptions.cardOptions = cardOptions paymentIntentParams.paymentMethodOptions = paymentMethodOptions STPPaymentHandler.shared().confirmPayment(paymentIntentParams, with: self) { (handlerStatus, paymentIntent, error) in switch handlerStatus { case .succeeded: // Payment succeeded // ... case .canceled: // Payment canceled // ... case .failed: // Payment failed // ... @unknown default: fatalError() } } } } extension CheckoutViewController: STPAuthenticationContext { func authenticationPresentingViewController() -> UIViewController { return self } } ``` Eine Zahlung kann auch dann erfolgreich sein, wenn die CVC-Prüfung fehlschlägt. Um dies zu verhindern, konfigurieren Sie Ihre [Radar-Regeln](https://docs.stripe.com/radar/rules.md#traditional-bank-checks) so, dass die Zahlung bei einem Fehlschlagen der CVC-Verifizierung gesperrt wird. ## Upgrade Ihrer Integration zur Authentifizierung von Karten Diese Integration **lehnt Karten ab, die während der Zahlung eine Authentifizierung erfordern**. Wenn viele Zahlungen im Dashboard als `Failed` angezeigt werden, ist es an der Zeit, Ihre [Integration zu aktualisieren](https://docs.stripe.com/payments/payment-intents/upgrade-to-handle-actions.md). Die globale Integration von Stripe verarbeitet diese Zahlungen, statt sie automatisch abzulehnen. # Android > This is a Android for when platform is android. View the full page at https://docs.stripe.com/payments/mobile/save-card-without-authentication?platform=android. Mit Stripe haben Sie die Möglichkeit, Kartendaten Ihrer Kund/innen vorab zu erfassen und die Belastung zu einem späteren Zeitpunkt durchzuführen. In einigen Regionen erfordern Banken eine zweite Authentifizierungsmethode, z. B. die Eingabe eines Codes über ein Mobilgerät. Der zusätzliche Schritt wirkt sich negativ auf die Konversionsrate auf, wenn Kund/innen Ihre Website oder Anwendung nicht aktiv nutzen und den Kauf nicht direkt authentifizieren können. Wenn Sie überwiegend in den USA und Kanada tätig sind, erfordern die Banken keine Authentifizierung und Sie können diese einfachere Integration verwenden. Diese Integration ist in Ländern, die eine Authentifizierung für das Speichern von Karten erfordern (z. B. Indien), nicht konform und hat zur Folge, dass für eine Expansion in andere Länder oder für zusätzliche Zahlungsmethoden grundlegende Änderungen an der Integration notwendig sind. Hier erfahren Sie, wie Sie [Karten speichern, die eine Authentifizierung erfordern](https://docs.stripe.com/payments/save-and-reuse.md). > #### Konformität > > Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Zum Beispiel für den Fall, dass Sie seine/ihre Zahlungsmethode für die zukünftige Nutzung speichern möchten, wenn er/sie Ihre Website oder App nicht aktiv nutzt. Fügen Sie Ihrer Website oder App Bedingungen hinzu, die angeben, wie Sie die Details zur Zahlungsmethode speichern und Kund/innen die Möglichkeit geben, sich anzumelden. Wenn Sie Zahlungen offline vornehmen möchten, stellen Sie sicher, dass Ihre Bedingungen Folgendes enthalten: > > - Die kundenseitige Zustimmung, eine Zahlung oder mehrere Zahlungen für bestimmte Transaktionen in deren Namen einzuleiten. - Der erwartete Zeitpunkt und die voraussichtliche Häufigkeit von Zahlungen (z. B. Zahlungen für geplante Raten- oder Abonnementzahlungen oder für außerplanmäßige Aufstockungen). - Wie Sie den Zahlbetrag ermitteln. - Ihre Stornorichtlinie, wenn die Zahlungsmethode für einen Abonnementdienst ist. > > Dokumentieren Sie unbedingt die schriftliche Zustimmung Ihrer Kundinnen und Kunden zu diesen Bedingungen. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Jetzt regristrieren](https://dashboard.stripe.com/register). Richten Sie Android- und Server-Stripe-SDKs ein, bevor Sie mit der Integration beginnen. ### Serverseitig Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe API von Ihrem Server aus: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [Stripe Android SDK](https://github.com/stripe/stripe-android) ist Open Source und [vollständig dokumentiert](https://stripe.dev/stripe-android/). Um das SDK zu installieren, fügen Sie `stripe-android` in den Block `dependencies` Ihrer [app/build.gradle](https://developer.android.com/studio/build/dependencies)-Datei ein: #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.0.2") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.0.2") } ``` > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-android/releases) auf GitHub. Um bei Veröffentlichung eines neuen Release eine Benachrichtigung zu erhalten, [beobachten Sie Veröffentlichungen für das jeweilige Repository](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) von Stripe so, dass dieser Anfragen an die API stellen kann, wie beispielsweise in Ihrer Unterklasse `Application`: #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Verwenden Sie Ihre [Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App. ## Kartendaten erfassen [Clientseitig] Wenn der Kunde/die Kundin das Zahlungsformular absendet, erfassen Sie seine/ihre Kartendaten mit [CardInputWidget](https://stripe.dev/stripe-android/payments-core/com.stripe.android.view/-card-input-widget/index.html), einer Drop-In-Komponente der Nutzeroberfläche aus dem SDK, die die Kartennummer, das Ablaufdatum, die Prüfziffer (CVC) und die Postleitzahl erfasst. ![](https://d37ugbyn3rpeym.cloudfront.net/docs/mobile/android/android-card-input-widget-with-postal.mp4) Übergeben Sie die Kartendaten an [createPaymentMethod](https://stripe.dev/stripe-android/payments-core/com.stripe.android/-stripe/create-payment-method.html), um eine *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu erstellen. #### Kotlin ```kotlin class CheckoutActivity : AppCompatActivity() { private lateinit var stripe: Stripe private fun pay() { val weakActivity = WeakReference(this) // Collect card details on the client val cardInputWidget = findViewById(R.id.cardInputWidget) val params = cardInputWidget.paymentMethodCreateParams if (params == null) { return } // Configure the SDK with your Stripe publishable key so that it can make requests to the Stripe API stripe = Stripe(applicationContext, PaymentConfiguration.getInstance(applicationContext).publishableKey) lifecycleScope.launch { runCatching { stripe.createPaymentMethod(params).id }.fold( onSuccess = { paymentMethodId -> // Send paymentMethodId to your server for the next steps }, onFailure = { // Create PaymentMethod failed, display the error to the user } ) } } private fun pay(paymentMethod: String?, paymentIntent: String?) { // ... } } ``` Schicken Sie die daraus resultierende PaymentMethod-ID an Ihren Server und befolgen Sie die restlichen Schritte, um die Karte bei einem Kunden zu speichern und künftig diese Karte zu belasten. ## Karte speichern [Serverseitig] Speichern Sie die Karte, indem Sie die PaymentMethod *einem Kunden/einer Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen. Sie können das Customer-Objekt verwenden, um weitere Informationen über Ihre Kundinnen/Kunden zu speichern, z. B. Versanddaten und E-Mail-Adresse. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Wenn bereits ein Kunde besteht, können Sie die PaymentMethod stattdessen an dieses Objekt anhängen. ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/attach \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" ``` Verknüpfen Sie anschließend die ID des Customer-Objekts und die ID der PaymentMethod mit Ihrer eigenen Kundenrepräsentation, falls vorhanden. ## Die gespeicherte Karte belasten [Serverseitig] Wenn Sie eine Kundenzahlung einziehen möchten, suchen Sie nach der PaymentMethod-ID, die Sie belasten möchten. Dies können Sie entweder durch Speichern der IDs beider Objekte in Ihrer Datenbank tun oder indem Sie anhand der Kunden-ID nach allen für die Kundin oder den Kunden verfügbaren PaymentMethods suchen. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d type=card ``` Verwenden Sie die PaymentMethod-ID und die Kunden-ID, um einen neuen PaymentIntent zu erstellen. Legen Sie den Wert [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) auf „true“ fest, um Zahlungen abzulehnen, die weitere Aktionen von Ihren Kundinnen/Kunden erfordern, wie z. B. die Zwei-Faktor-Authentifizierung. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true ``` Schlägt ein Zahlungsversuch fehl, schlägt auch die Anfrage mit einem HTTP-Statuscode 402 fehl und Stripe gibt eine Fehlermeldung aus. Sie müssen Ihre Kundinnen/Kunden auffordern, zu Ihrer Anwendung zurückzukehren (z. B. indem Sie eine In-App-Benachrichtigung senden), um die Zahlung abzuschließen. Überprüfen Sie den Code des von der Stripe API Library ausgelösten [Fehlers](https://docs.stripe.com/api/errors/handling.md) oder überprüfen Sie den [last_payment_error.decline_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) auf dem PaymentIntent, um zu erfahren, warum der Kartenaussteller die Zahlung abgelehnt hat. ## Umgang mit Kartenfehlern Informieren Sie Ihre Kundinnen und Kunden darüber, dass die Zahlung fehlgeschlagen ist und leiten Sie sie zu dem in Schritt 1 erstellten Zahlungsformular weiter, wo sie neue Kartendaten eingeben können. Senden Sie die neue Zahlungsmethode-ID an Ihren Server, um sie dem Kundenobjekt [hinzuzufügen](https://docs.stripe.com/api/payment_methods/attach.md) und führen Sie die Zahlung erneut durch. Alternativ können Sie einen PaymentIntent erstellen und eine Karte in einem API-Aufruf speichern, wenn Sie bereits eine Kundin bzw. einen Kunden angelegt haben. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true \ -d setup_future_usage=on_session ``` Wenn Sie [setup_future_usage ](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `on_session` setzen, weist Stripe darauf hin, dass Sie die Karte für später speichern möchten, ohne eine unnötige Authentifizierung auszulösen. ## Integration testen Stripe stellt [Testkarten](https://docs.stripe.com/testing.md) bereit, die Sie im Sandbox-Modus verwenden können, um verschiedene Kartenverhaltensweisen zu simulieren. Verwenden Sie diese Karten mit beliebigen Prüfziffern, Postleitzahlen und Ablaufdaten in der Zukunft. | Nummer | Beschreibung | | ---------------- | ------------------------------------------------------------------------------------------------------------------ | | 4242424242424242 | Bei Erfolg sofortige Verarbeitung der Zahlung. | | 4000000000009995 | Schlägt stets mit dem Ablehnungscode `insufficient_funds` fehl. | | 4000002500003155 | Erfordert eine Authentifizierung, die in dieser Integration mit dem Code `authentication_required` abgelehnt wird. | ## Optional: CVC erneut erfassen Wenn Sie für gespeicherte Karten künftige Zahlungen erstellen, sollten Sie als zusätzliche Betrugspräventionsmaßnahme erneut die Prüfziffer (CVC) der Karte erfassen, um den/die Nutzer/in zu verifizieren. Beginnen Sie, indem Sie einen PaymentIntent von Ihrem Server aus mit dem Betrag und der Währung der Zahlung erstellen und legen Sie [customer](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) auf die ID Ihres Kunden/Ihrer Kundin fest. [Listen](https://docs.stripe.com/api/payment_methods/list.md) Sie dann die mit Ihren Kundinnen/Kunden verknüpften PaymentMethods auf, um festzulegen, welche PaymentMethods Ihren Nutzern/Nutzerinnen zur erneuten Erfassung der CVC angezeigt werden sollen. Nach der erneuten Erfassung der CVC-Daten des Kunden/der Kundin erstellen Sie eine [PaymentMethodOptionsParams.Card](https://stripe.dev/stripe-android/payments-core/com.stripe.android.model/-payment-method-options-params/-card/index.html)-Instanz mit der Prüfziffer des Kunden/der Kundin. Bestätigen Sie den PaymentIntent, indem Sie eine [ConfirmPaymentIntentParams](https://stripe.dev/stripe-android/payments-core/com.stripe.android.model/-confirm-payment-intent-params/index.html)-Instanz mit der [PaymentMethodOptionsParams.Card](https://stripe.dev/stripe-android/payments-core/com.stripe.android.model/-payment-method-options-params/-card/index.html)-Instanz erstellen und an [Stripe#confirmPayment()](https://stripe.dev/stripe-android/payments-core/com.stripe.android/-stripe/confirm-payment.html) übergeben. #### Kotlin ```kotlin class CheckoutActivity : AppCompatActivity() { private val stripe: Stripe by lazy { Stripe(this, "<>") } private fun confirmPaymentIntent(clientSecret: String, cvc: String) { val params = ConfirmPaymentIntentParams.createWithPaymentMethodId( paymentMethodId = '{{PAYMENT_METHOD_ID}}', paymentMethodOptions = PaymentMethodOptionsParams.Card( cvc = cvc ), clientSecret = clientSecret ) stripe.confirmPayment(this, params) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) stripe.onPaymentResult( requestCode, data, object : ApiResultCallback { override fun onSuccess(result: PaymentIntentResult) { } override fun onError(e: Exception) { } } ) } } ``` Eine Zahlung kann auch dann erfolgreich sein, wenn die CVC-Prüfung fehlschlägt. Um dies zu verhindern, konfigurieren Sie Ihre [Radar-Regeln](https://docs.stripe.com/radar/rules.md#traditional-bank-checks) so, dass die Zahlung bei einem Fehlschlagen der CVC-Verifizierung gesperrt wird. ## Upgrade Ihrer Integration zur Authentifizierung von Karten Diese Integration **lehnt Karten ab, die während der Zahlung eine Authentifizierung erfordern**. Wenn viele Zahlungen im Dashboard als `Failed` angezeigt werden, ist es an der Zeit, Ihre [Integration zu aktualisieren](https://docs.stripe.com/payments/payment-intents/upgrade-to-handle-actions.md). Die globale Integration von Stripe verarbeitet diese Zahlungen, statt sie automatisch abzulehnen. # React Native > This is a React Native for when platform is react-native. View the full page at https://docs.stripe.com/payments/mobile/save-card-without-authentication?platform=react-native. Mit Stripe haben Sie die Möglichkeit, Kartendaten Ihrer Kund/innen vorab zu erfassen und die Belastung zu einem späteren Zeitpunkt durchzuführen. In einigen Regionen erfordern Banken eine zweite Authentifizierungsmethode, z. B. die Eingabe eines Codes über ein Mobilgerät. Der zusätzliche Schritt wirkt sich negativ auf die Konversionsrate auf, wenn Kund/innen Ihre Website oder Anwendung nicht aktiv nutzen und den Kauf nicht direkt authentifizieren können. Wenn Sie überwiegend in den USA und Kanada tätig sind, erfordern die Banken keine Authentifizierung und Sie können diese einfachere Integration verwenden. Diese Integration ist in Ländern, die eine Authentifizierung für das Speichern von Karten erfordern (z. B. Indien), nicht konform und hat zur Folge, dass für eine Expansion in andere Länder oder für zusätzliche Zahlungsmethoden grundlegende Änderungen an der Integration notwendig sind. Hier erfahren Sie, wie Sie [Karten speichern, die eine Authentifizierung erfordern](https://docs.stripe.com/payments/save-and-reuse.md). > #### Konformität > > Sie sind für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich, wenn Sie die Zahlungsdaten eines Kunden/einer Kundin speichern. Zum Beispiel für den Fall, dass Sie seine/ihre Zahlungsmethode für die zukünftige Nutzung speichern möchten, wenn er/sie Ihre Website oder App nicht aktiv nutzt. Fügen Sie Ihrer Website oder App Bedingungen hinzu, die angeben, wie Sie die Details zur Zahlungsmethode speichern und Kund/innen die Möglichkeit geben, sich anzumelden. Wenn Sie Zahlungen offline vornehmen möchten, stellen Sie sicher, dass Ihre Bedingungen Folgendes enthalten: > > - Die kundenseitige Zustimmung, eine Zahlung oder mehrere Zahlungen für bestimmte Transaktionen in deren Namen einzuleiten. - Der erwartete Zeitpunkt und die voraussichtliche Häufigkeit von Zahlungen (z. B. Zahlungen für geplante Raten- oder Abonnementzahlungen oder für außerplanmäßige Aufstockungen). - Wie Sie den Zahlbetrag ermitteln. - Ihre Stornorichtlinie, wenn die Zahlungsmethode für einen Abonnementdienst ist. > > Dokumentieren Sie unbedingt die schriftliche Zustimmung Ihrer Kundinnen und Kunden zu diesen Bedingungen. ## Stripe einrichten [Serverseitig] [Clientseitig] ### Serverseitig Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe-API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Clientseitig Das [React Native SDK](https://github.com/stripe/stripe-react-native) ist Open Source und vollständig dokumentiert. Intern werden [native iOS](https://github.com/stripe/stripe-ios) und [Android](https://github.com/stripe/stripe-android) SDKs verwendet. Um das React Native SDK von Stripe zu installieren, führen Sie einen der folgenden Befehle im Verzeichnis Ihres Projekts aus (je nachdem, welchen Paket-Manager Sie verwenden): #### yarn ```bash yarn add @stripe/stripe-react-native ``` #### npm ```bash npm install @stripe/stripe-react-native ``` Installieren Sie als Nächstes einige weitere erforderliche Abhängigkeiten: - Für iOS wechseln Sie in das Verzeichnis **ios** und führen Sie `pod install` aus, um sicherzustellen, dass Sie auch die erforderlichen nativen Dependencies installiert haben. - Für Android müssen keine Abhängigkeiten mehr installiert werden. > Wir empfehlen Ihnen, die [offizielle Anleitung zu TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) zu befolgen, um TypeScript zu unterstützen. ### Stripe Initialisierung Um Stripe in Ihrer React Native-App zu initialisieren, umschließen Sie entweder Ihren Zahlungsbildschirm mit der Komponente `StripeProvider` oder verwenden Sie die Initialisierungsmethode `initStripe`. Nur der [veröffentlichbare API-Schlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) in `publishableKey` ist erforderlich. Das folgende Beispiel zeigt, wie Stripe mithilfe der Komponente `StripeProvider` initialisiert wird. ```jsx import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( {/* Your app code here */} ); } ``` > Verwenden Sie Ihre API-[Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App. ## Kartendaten erfassen [Clientseitig] Erfassen Sie Kartendaten mit `CardField`, einer vom SDK bereitgestellten Nutzeroberflächenkomponente, die Kartennummer, Ablaufdatum, Prüfziffer und Postleitzahl erfasst, sicher auf dem Client. ![](https://d37ugbyn3rpeym.cloudfront.net/docs/mobile/ios/card-field.mp4) Fügen Sie Ihrem Zahlungsbildschirm die Komponente `CardField` hinzu, um die Kartendaten Ihrer Kund/innen sicher zu erfassen. Verwenden Sie den Rückruf `onCardChange`, um nicht vertrauliche Informationen, wie die Marke der Karte und die Vollständigkeit der Angaben, zu prüfen. ```javascript import { CardField, useStripe } from '@stripe/stripe-react-native'; function PaymentScreen() { // ... return ( { console.log('cardDetails', cardDetails); }} onFocus={(focusedField) => { console.log('focusField', focusedField); }} /> ); } ``` Führen Sie Ihre App aus und stellen Sie sicher, dass die `CardField`-Komponente auf der Bezahlseite angezeigt wird. Wenn der Kunde/die Kundin auf **Bezahlen** tippt, verwenden Sie `createPaymentMethod`, um die Kartenangaben zu erfassen und eine *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu erstellen. Übermitteln Sie die ID der PaymentMethod an Ihren Server. ```javascript const pay = () => { const { paymentMethod, error } = await createPaymentMethod({ paymentMethodType: 'Card', paymentMethodData: { billingDetails: { name: 'Jenny Rosen', } }, }); if (error) { // Handle error } else if (paymentMethod) { const paymentMethodId = paymentMethod.id; // Send the ID of the PaymentMethod to your server for the next step // ... } }; ``` ## Karte speichern [Serverseitig] Speichern Sie die Karte, indem Sie die PaymentMethod *einem Kunden/einer Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen. Sie können das Customer-Objekt verwenden, um weitere Informationen über Ihre Kundinnen/Kunden zu speichern, z. B. Versanddaten und E-Mail-Adresse. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Wenn bereits ein Kunde besteht, können Sie die PaymentMethod stattdessen an dieses Objekt anhängen. ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/attach \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" ``` Verknüpfen Sie anschließend die ID des Customer-Objekts und die ID der PaymentMethod mit Ihrer eigenen Kundenrepräsentation, falls vorhanden. ## Die gespeicherte Karte belasten [Serverseitig] Wenn Sie eine Kundenzahlung einziehen möchten, suchen Sie nach der PaymentMethod-ID, die Sie belasten möchten. Dies können Sie entweder durch Speichern der IDs beider Objekte in Ihrer Datenbank tun oder indem Sie anhand der Kunden-ID nach allen für die Kundin oder den Kunden verfügbaren PaymentMethods suchen. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d type=card ``` Verwenden Sie die PaymentMethod-ID und die Kunden-ID, um einen neuen PaymentIntent zu erstellen. Legen Sie den Wert [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) auf „true“ fest, um Zahlungen abzulehnen, die weitere Aktionen von Ihren Kundinnen/Kunden erfordern, wie z. B. die Zwei-Faktor-Authentifizierung. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true ``` Schlägt ein Zahlungsversuch fehl, schlägt auch die Anfrage mit einem HTTP-Statuscode 402 fehl und Stripe gibt eine Fehlermeldung aus. Sie müssen Ihre Kundinnen/Kunden auffordern, zu Ihrer Anwendung zurückzukehren (z. B. indem Sie eine In-App-Benachrichtigung senden), um die Zahlung abzuschließen. Überprüfen Sie den Code des von der Stripe API Library ausgelösten [Fehlers](https://docs.stripe.com/api/errors/handling.md) oder überprüfen Sie den [last_payment_error.decline_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) auf dem PaymentIntent, um zu erfahren, warum der Kartenaussteller die Zahlung abgelehnt hat. ## Umgang mit Kartenfehlern Informieren Sie Ihre Kundinnen und Kunden darüber, dass die Zahlung fehlgeschlagen ist und leiten Sie sie zu dem in Schritt 1 erstellten Zahlungsformular weiter, wo sie neue Kartendaten eingeben können. Senden Sie die neue Zahlungsmethode-ID an Ihren Server, um sie dem Kundenobjekt [hinzuzufügen](https://docs.stripe.com/api/payment_methods/attach.md) und führen Sie die Zahlung erneut durch. Alternativ können Sie einen PaymentIntent erstellen und eine Karte in einem API-Aufruf speichern, wenn Sie bereits eine Kundin bzw. einen Kunden angelegt haben. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d error_on_requires_action=true \ -d confirm=true \ -d setup_future_usage=on_session ``` Wenn Sie [setup_future_usage ](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `on_session` setzen, weist Stripe darauf hin, dass Sie die Karte für später speichern möchten, ohne eine unnötige Authentifizierung auszulösen. ## Integration testen Stripe stellt [Testkarten](https://docs.stripe.com/testing.md) bereit, die Sie im Sandbox-Modus verwenden können, um verschiedene Kartenverhaltensweisen zu simulieren. Verwenden Sie diese Karten mit beliebigen Prüfziffern, Postleitzahlen und Ablaufdaten in der Zukunft. | Nummer | Beschreibung | | ---------------- | ------------------------------------------------------------------------------------------------------------------ | | 4242424242424242 | Bei Erfolg sofortige Verarbeitung der Zahlung. | | 4000000000009995 | Schlägt stets mit dem Ablehnungscode `insufficient_funds` fehl. | | 4000002500003155 | Erfordert eine Authentifizierung, die in dieser Integration mit dem Code `authentication_required` abgelehnt wird. | ## Optional: CVC erneut erfassen Wenn Sie für gespeicherte Karten künftige Zahlungen erstellen, sollten Sie als zusätzliche Betrugspräventionsmaßnahme erneut die Prüfziffer (CVC) der Karte erfassen, um den/die Nutzer/in zu verifizieren. Beginnen Sie, indem Sie eine PaymentIntent auf Ihrem Server mit dem Betrag, der Währung und Ihrer [Kunden](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer)-ID erstellen. Erstellen Sie eine [Liste](https://docs.stripe.com/api/payment_methods/list.md) der mit Ihrem/Ihrer *Kunden/Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) verknüpften *PaymentMethods* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs), um zu bestimmen, welche zur erneuten Erfassung der CVC angezeigt werden sollen. Rufen Sie nach der erneuten Erfassung der CVC-Daten der Kundin/des Kunden die Methode `confirmPayment` mit der `CVC` and `paymentMethodId` der Kundin/des Kunden auf. ```javascript const pay = async (cvc: string) => { const { clientSecret, paymentMethodId, } = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'Card', paymentMethodData: { cvc, paymentMethodId, }, }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent.status === PaymentIntent.Status.Succeeded) { Alert.alert('Success', 'The payment was confirmed successfully!'); } else { // Handle other statuses accordingly } }; ``` Eine Zahlung kann auch dann erfolgreich sein, wenn die CVC-Prüfung fehlschlägt. Um dies zu verhindern, konfigurieren Sie Ihre [Radar-Regeln](https://docs.stripe.com/radar/rules.md#traditional-bank-checks) so, dass die Zahlung bei einem Fehlschlagen der CVC-Verifizierung gesperrt wird. ## Upgrade Ihrer Integration zur Authentifizierung von Karten Diese Integration **lehnt Karten ab, die während der Zahlung eine Authentifizierung erfordern**. Wenn viele Zahlungen im Dashboard als `Failed` angezeigt werden, ist es an der Zeit, Ihre [Integration zu aktualisieren](https://docs.stripe.com/payments/payment-intents/upgrade-to-handle-actions.md). Die globale Integration von Stripe verarbeitet diese Zahlungen, statt sie automatisch abzulehnen.