# Apple Pay Ermöglichen Sie Kundinnen und Kunden die sichere Zahlungsabwicklung mit Apple Pay auf ihrem iPhone, iPad oder ihrer Apple Watch. Auf der Support-Website [Mit Apple Pay kompatible Geräte](https://support.apple.com/en-us/HT208531) erfahren Sie, welche Geräte Apple Pay unterstützen. Apple Pay ist mit den meisten Stripe-Produkten und -Funktionen kompatibel. Nutzerinnen und Nutzer von Stripe können [Apple Pay](https://stripe.com/apple-pay) in iOS-Anwendungen ab iOS 9 sowie im Web in Safari ab iOS 10 oder macOS Sierra akzeptieren. Es fallen keine zusätzlichen Gebühren für die Verarbeitung von Apple Pay-Zahlungen an und die [Preisgestaltung](https://stripe.com/pricing/local-payment-methods#apple-pay) ist genau wie bei anderen Kartentransaktionen. Apple Pay ist für Karteninhaber/innen bei teilnehmenden Banken in unterstützten Ländern verfügbar. Weitere Informationen finden Sie in der Dokumentation zu [teilnehmenden Banken](https://support.apple.com/en-us/ht204916) von Apple. #### Eigenschaften der Zahlungsmethode - **Kundenstandorte** Weltweit, außer Indien - **Transaktionswährung** Siehe [unterstützte Transaktionsährungen](https://docs.stripe.com/currencies.md#presentment-currencies) - **Zahlungsbestätigung** Kundenseitig initiiert - **Art der Zahlungsmethode** Wallet - **Wiederkehrende Zahlungen** [Ja](https://docs.stripe.com/apple-pay.md#recurring-payments) - **Auszahlungsintervall** Es gilt das Standard-Auszahlungsintervall - **Connect-Support** Ja - **Unterstützung bei angefochtenen Zahlungen** [Ja](https://docs.stripe.com/apple-pay/disputes-refunds.md#disputed-payments) - **Unterstützung für manuelle Erfassung** Ja - **Komplette/anteilige Rückerstattungen** [Ja/Ja](https://docs.stripe.com/apple-pay/disputes-refunds.md#refunds) #### Geschäftsstandorte Bei Stripe-Konten weltweit (mit Ausnahme von Indien) sind Apple Pay-Zahlungen mit Abrechnung in lokaler Währung möglich. #### Produktsupport - Connect - Checkout1 - Payment Links - Elements - Subscriptions - Invoicing 1When Checkout’s [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) is `embedded_page`, it only supports version 17 or later of Safari and iOS. ## Zahlungsablauf Unten finden Sie eine Demonstration des Apple Pay-Zahlungsablaufs auf Ihrer Bezahlseite: ![Apple Pay-Zahlungsablaufanimation mit der Stripe-Zahlungsseite, der Apple Pay-Schaltfläche und dem Bestätigungsdialogfeld während des Testens.](https://b.stripecdn.com/docs-statics-srv/assets/apple-pay.3447ce2deeaab40d6d231eed4dc34644.gif) ## In-App-Kaufberechtigung für Apple Pay In diesem Leitfaden wird erläutert, wie Sie Ihre App so konfigurieren, dass Apple Pay direkt für physische Waren, Dienstleistungen und andere berechtigte Artikel akzeptiert wird. Stripe verarbeitet diese Zahlungen und Sie zahlen lediglich die [Bearbeitungsgebühren](https://stripe.com/pricing) von Stripe. Für digitale Produkte, Inhalte und Abos, die in den Vereinigten Staaten oder im Europäischen Wirtschaftsraum (EWR) verkauft werden, kann Ihre App Apple Pay akzeptieren, indem sie zu einer externen Zahlung weiterleitet. Sie können dabei die folgenden Zahlungs-Nutzeroberflächen verwenden: - [Stripe Checkout](https://docs.stripe.com/mobile/digital-goods/checkout.md) - [Web Elements](https://docs.stripe.com/mobile/digital-goods/custom-checkout.md) - [Payment Links](https://docs.stripe.com/mobile/digital-goods/payment-links.md) (am besten geeignet für eine begrenzte Anzahl von Produkten und Preisen) In anderen Regionen kann Ihre App Apple Pay für digitale Produkte, Inhalte oder Abos nicht akzeptieren. ## Apple Pay akzeptieren Stripe bietet Ihnen mehrere Möglichkeiten, Apply Pay als Zahlungsmethode hinzuzufügen. Weitere Informationen zur Integration finden Sie unter der jeweiligen Methode: # Native iOS > This is a Native iOS for when platform is ios. View the full page at https://docs.stripe.com/apple-pay?platform=ios. > Wenn Sie die [vorgefertigte Nutzeroberfläche](https://docs.stripe.com/payments/mobile.md) von Stripe verwenden, befolgen Sie stattdessen die Schritte in [diesem Leitfaden](https://docs.stripe.com/payments/mobile/accept-payment.md?platform=ios&type=payment#apple-pay). Mit dem [Stripe iOS SDK](https://github.com/stripe/stripe-ios) können Sie sowohl Zahlungen per Apple Pay als auch herkömmliche Kreditkartenzahlungen annehmen. Bevor Sie beginnen, müssen Sie beim [Apple Developer Program](https://developer.apple.com/programs/) angemeldet sein. Befolgen Sie als Nächstes diese Schritte: 1. [Stripe einrichten](https://docs.stripe.com/apple-pay.md#setup) 1. [Eine Apple-Händler-ID registrieren](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Neues Apple Pay-Zertifikat erstellen](https://docs.stripe.com/apple-pay.md#csr) 1. [Mit Xcode integrieren](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Prüfen, ob Apple Pay unterstützt wird](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Zahlungsanfrage erstellen](https://docs.stripe.com/apple-pay.md#create-payment-request) 1. [Zahlungsformular anzeigen](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Zahlung an Stripe senden](https://docs.stripe.com/apple-pay.md#handle-payment) ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe-API kommunizieren können. Nutzen Sie diese 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' ``` ### Client-seitig 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 **StripeApplePay** 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 'StripeApplePay' ``` 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 StripeApplePay ``` #### 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/StripeApplePay/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 **StripeApplePay.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/StripeApplePay/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 UIKitimportStripeApplePay @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. ## Eine Apple-Händler-ID registrieren Beantragen Sie eine Apple-Händler-ID, indem Sie sich auf der Apple Developer-Website [für eine neue Kennung registrieren](https://developer.apple.com/account/resources/identifiers/add/merchant). Tragen Sie eine Beschreibung und eine Kennung in das Formular ein. Die Beschreibung ist nur für Ihre internen Zwecke bestimmt und kann später geändert werden. Stripe empfiehlt, dass Sie den Namen Ihrer App als Kennung verwenden, zum Beispiel `merchant.com.{{YOUR_APP_NAME}}`. ## Neues Apple Pay-Zertifikat erstellen Erstellen Sie ein Zertifikat für Ihre App, um Zahlungsdaten zu verschlüsseln. Gehen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard, klicken Sie auf **Neue Anwendung hinzufügen** und befolgen Sie die Anleitung. Laden Sie eine Certificate Signing Request (CSR)-Datei herunter, um ein sicheres Zertifikat von Apple zu erhalten, mit dem Sie Apple Pay verwenden können. Eine CSR-Datei muss verwendet werden, um genau ein Zertifikat auszustellen. Wenn Sie Ihre Apple-Händler-ID wechseln, müssen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard gehen, um eine neue CSR und ein Zertifikat zu erhalten. ## Mit Xcode integrieren Fügen Sie Ihrer App die **Apple Pay**-Funktion hinzu. Öffnen Sie in Xcode Ihre Projekteinstellungen, klicken Sie auf die Registerkarte **Signing & Capabilities** (Anmeldung und Funktionen) und fügen Sie die **Apple Pay**-Funktion hinzu. Möglicherweise werden Sie an dieser Stelle aufgefordert, sich bei Ihrem Entwicklerkonto anzumelden. Wählen Sie die zuvor erstellte Händler-ID aus. Ihre App sollte nun Apple Pay unterstützen. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Apple Pay-Funktion in Xcode aktivieren ## Prüfen, ob Apple Pay unterstützt wird Bevor Sie Apple Pay als Zahlungsoption in Ihrer App anzeigen, sollten Sie prüfen, ob die Geräte der Nutzer/innen Apple Pay unterstützen und ob im Wallet eine Karte hinterlegt ist: #### Swift ```swift import StripeApplePay import PassKit class CheckoutViewController: UIViewController, ApplePayContextDelegate { let applePayButton: PKPaymentButton = PKPaymentButton(paymentButtonType: .plain, paymentButtonStyle: .black) override func viewDidLoad() { super.viewDidLoad() // Only offer Apple Pay if the customer can pay with it applePayButton.isHidden = !StripeAPI.deviceSupportsApplePay() applePayButton.addTarget(self, action: #selector(handleApplePayButtonTapped), for: .touchUpInside) } // ...continued in next step } ``` ## Zahlungsanfrage erstellen Wenn der/die Nutzer/in auf die Schaltfläche **Apple Pay** tippt, rufen Sie [StripeAPI paymentRequestWithMerchantIdentifier:country:currency:](https://stripe.dev/stripe-ios/stripe-payments/Classes/StripeAPI.html#/c:@M@StripeCore@objc\(cs\)StripeAPI\(cm\)paymentRequestWithMerchantIdentifier:country:currency:) auf, um eine [PKPaymentRequest](https://developer.apple.com/documentation/passkit/pkpaymentrequest) zu erstellen. Konfigurieren Sie dann `PKPaymentRequest`, sodass Ihr Firmenname und die Gesamtsumme angezeigt werden. Sie können auch Informationen wie Rechnungsdaten oder Versandinformationen erfassen. In der [Apple-Dokumentation](https://developer.apple.com/design/human-interface-guidelines/apple-pay/overview/checkout-and-payment/#customize-the-payment-sheet) finden Sie eine ausführliche Anleitung zum Anpassen der Zahlungsanfrage. #### Swift ```swift func handleApplePayButtonTapped() { let merchantIdentifier = "merchant.com.your_app_name" let paymentRequest = StripeAPI.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: "US", currency: "USD") // Configure the line items on the payment request paymentRequest.paymentSummaryItems = [ // The final line should represent your company; // it'll be prepended with the word "Pay" (that is, "Pay iHats, Inc $50") PKPaymentSummaryItem(label: "iHats, Inc", amount: 50.00), ] // ...continued in next step } ``` ## Zahlungsformular anzeigen Erstellen Sie eine [STPApplePayContext](https://stripe.dev/stripe-ios/stripe-applepay/Classes/STPApplePayContext.html)-Instanz mit der `PKPaymentRequest` und verwenden Sie diese, um das Apple Pay-Blatt vorzulegen: #### Swift ```swift func handleApplePayButtonTapped() { // ...continued from previous step // Initialize an STPApplePayContext instance if let applePayContext = STPApplePayContext(paymentRequest: paymentRequest, delegate: self) { // Present Apple Pay payment sheet applePayContext.presentApplePay(on: self) } else { // There is a problem with your Apple Pay configuration } } ``` Apple verlangt, dass Nutzergesten das Apple Pay-Modal auslösen (z. B. durch Klicken auf eine Schaltfläche oder Interagieren mit dem Formular). Stellen Sie sicher, dass Ihr Code Folgendes einhält: - Rufen Sie das Zahlungsformular direkt mit einem Nutzeraktivierungsereignis auf. - Fügen Sie den Code für das Zahlungsformular am oder nahe dem oberen Rand des Ereignis-Handlers für Nutzergesten hinzu, bevor asynchroner oder lang andauernder Code ausgeführt wird. - Legen Sie ein angemessenes Zeitlimit für den Aufruf `confirmPayment` nach der Nutzergeste fest. ## Zahlung an Stripe senden ### Serverseitig Erstellen Sie einen Endpoint, der einen PaymentIntent mit einem [Betrag](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) und einer [Währung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency) generiert. Legen Sie den zu bezahlenden Betrag immer serverseitig fest, also in einer vertrauenswürdigen Umgebung, und nicht clientseitig. So wird verhindert, dass böswillige Kund/innen ihre eigenen Preise festlegen können. #### Curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Clientseitig #### Payment Intents API Implementieren Sie `applePayContext(_:didCreatePaymentMethod:paymentInformation:)`, um das PaymentIntent-Client-Geheimnis vom oben genannten Endpunkt zurückzugeben oder geben Sie einen Fehler aus, wenn die Anfrage fehlschlägt. Nachdem Sie das Client-Geheimnis zurückgegeben haben, schließt `STPApplePayContext` die Zahlung ab, blendet das Apple-Pay-Fenster aus und ruft `applePayContext(_:didCompleteWithStatus:error:)` mit dem Zahlungsstatus auf. Implementieren Sie diese Methode, um Ihren Kundinnen und Kunden einen Zahlungsbeleg anzuzeigen. #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment) async throws -> String { let clientSecret = try await ... // Retrieve the PaymentIntent client secret from your backend (see Server-side step above) // Return the client secret or throw an error return clientSecret } func applePayContext(_ context: STPApplePayContext, didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { switch status { case .success: // Payment succeeded, show a receipt view break case .error: // Payment failed, show the error break case .userCancellation: // User canceled the payment break @unknown default: fatalError() } } } ``` [Verwalten Sie zum Schluss Ereignisse nach der Zahlung](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios#ios-post-payment), um beispielsweise eine Bestellbestätigungs-E-Mail an Ihre Kundin oder Ihren Kunden zu senden, den Verkauf in einer Datenbank zu verzeichnen oder einen Versandworkflow zu starten. #### Payment Intents API (serverseitige Bestätigung) Implementieren Sie `applePayContext(_:didCreatePaymentMethod:paymentInformation:)`, um `paymentMethod.id` an Ihren Server zu senden und den PaymentIntent zu erstellen und zu bestätigen. Geben Sie das vom Server zurückgegebene PaymentIntent-Client-Geheimnis zurück oder geben Sie einen Fehler aus, wenn die Anfrage fehlschlägt. Nachdem Sie das Client-Geheimnis zurückgegeben haben, schließt `STPApplePayContext` die Zahlung ab, blendet das Apple-Pay-Fenster aus und ruft `applePayContext(_:didCompleteWithStatus:error:)` mit dem Zahlungsstatus auf. Implementieren Sie diese Methode, um Ihren Kundinnen und Kunden einen Zahlungsbeleg anzuzeigen. #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment) async throws -> String { let clientSecret = try await ... // Call your backend to create and confirm a PaymentIntent and get its client secret // Return the client secret or throw an error return clientSecret } func applePayContext(_ context: STPApplePayContext, didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { switch status { case .success: // Payment succeeded, show a receipt view break case .error: // Payment failed, show the error break case .userCancellation: // User canceled the payment break @unknown default: fatalError() } } } ``` ### Fehlerbehebung Wenn bei der Tokenerstellung Fehler mit der Stripe-API auftreten, liegt höchstwahrscheinlich ein Problem mit Ihrem Apple Pay-Zertifikat vor. In diesem Fall müssen Sie ein neues Zertifikat generieren und bei Stripe hochladen, wie auf dieser Seite beschrieben. Stellen Sie dabei sicher, dass Sie einen CSR verwenden, den Sie vom Dashboard abgerufen und nicht selbst generiert haben. Xcode legt alte Zertifikate oft fälschlicherweise im Zwischenspeicher ab. Stripe empfiehlt daher, zusätzlich zur Erstellung eines neuen Zertifikats auch eine neue Apple-Händler-ID zu erstellen. Wenn Sie den Fehler erhalten, hat das folgenden Grund: > Sie haben Ihr Apple-Händler-Konto nicht bei Stripe hinterlegt. Wahrscheinlich sendet Ihre App Daten, die mit einem früheren (nicht von Stripe stammenden) CSR/Zertifikat verschlüsselt wurden. Stellen Sie sicher, dass alle Zertifikate widerrufen werden, die durch nicht von Stripe stammende CSRs generiert wurden und Ihre Apple-Händler-ID aufweisen. Wenn dadurch das Problem nicht behoben wird, löschen Sie die Händler-ID in Ihrem Apple-Konto und legen Sie eine neue an. Erstellen Sie dann ein neues Zertifikat basierend auf dem zuvor verwendeten (von Stripe bereitgestellten) CSR. Sie müssen dieses neue Zertifikat nicht bei Stripe hochladen. Aktivieren und deaktivieren Sie die Apple Pay-Anmeldedaten in Ihrer App, um sicherzustellen, dass sie korrekt aktualisiert werden. ## App-Clips Das `StripeApplePay`-Modul ist ein benutzerfreundliches Stripe-SDK, das für die Verwendung in einem [App Clip](https://developer.apple.com/app-clips/) optimiert ist. Folgen Sie [der Anleitung oben](https://docs.stripe.com/apple-pay.md?platform=ios#accept), um das `StripeApplePay`-Modul zum Ziel Ihres App-Clips hinzuzufügen. > Das `StripeApplePay`-Modul wird nur in Swift unterstützt. Objective-C-Nutzer/innen müssen `STPApplePayContext` aus dem `Stripe`-Modul importieren. ### Umstellung von STPApplePayContext Wenn Sie `STPApplePayContext` bereits nutzen und zum benutzerfreundlichen Apple Pay SDK wechseln möchten, gehen Sie folgendermaßen vor: 1. Ersetzen Sie in den Abhängigkeiten im Ziel Ihres App Clips das `Stripe`-Modul durch das `StripeApplePay`-Modul. 1. Ersetzen Sie in Ihrem Code `import Stripe` durch `import StripeApplePay`. 1. Ersetzen Sie Ihre Verwendung von `STPApplePayContextDelegate` durch das neue `ApplePayContextDelegate`-Protokoll. 1. Ändern Sie Ihre Implementierung von `applePayContext(_:didCreatePaymentMethod:completion:)`, um eine `StripeAPI.PaymentMethod` zu akzeptieren. 1. Ändern Sie Ihre Implementierung von `applePayContext(_:didCompleteWith:error:)`, um einen `STPApplePayContext.PaymentStatus` zu akzeptieren. ### Before ```swift func applePayContext(_ context: STPApplePayContext, paymentInformation: PKPayment, // ... } func applePayContext(_ context: STPApplePayContext, error: Error?) { // ... } } ``` ### After ```swift import StripeApplePay class CheckoutViewController: UIViewController, ApplePayContextDelegate { func applePayContext(_ context: STPApplePayContext,didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment // ...} async throws -> String { func applePayContext(_ context: STPApplePayContext,didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { // ... } } ``` ## Wiederkehrende Zahlungen In iOS 16 oder höher können Sie [Händer-Token](https://developer.apple.com/apple-pay/merchant-tokens/) annehmen, indem Sie die Eigenschaft `recurringPaymentRequest` oder `automaticReloadPaymentRequest` auf `PKPaymentRequest` festlegen. Wiederkehrende Zahlungen können gespeicherte Zahlungsmethoden nur für [Off-Session-Transaktionen](https://docs.stripe.com/apple-pay/apple-pay-recurring.md#set-up-off-session-payments) verwenden. #### Swift ```swift extension CheckoutViewController { func handleApplePayButtonTapped() { let request = StripeAPI.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: "US", currency: "USD") let billing = PKRecurringPaymentSummaryItem(label: "My Subscription", amount: NSDecimalNumber(string: "59.99")) billing.startDate = Date() billing.endDate = Date().addingTimeInterval(60 * 60 * 24 * 365) billing.intervalUnit = .month request.recurringPaymentRequest = PKRecurringPaymentRequest(paymentDescription: "Recurring", regularBilling: billing, managementURL: URL(string: "https://my-backend.example.com/customer-portal")!) request.recurringPaymentRequest?.billingAgreement = "You'll be billed $59.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'" request.paymentSummaryItems = [billing] } } ``` Weitere Informationen zur Verwendung wiederkehrender Zahlungen mit Apple Pay finden Sie in der [PassKit-Dokumentation von Apple](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Sendungsverfolgung Um die [Bestellungsnachverfolgung](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) in iOS 16 oder höher anzuwenden, implementieren Sie die Funktion [applePayContext(context:willCompleteWithResult:handler:)](https://github.com/stripe/stripe-ios/blob/22.8.0/StripeApplePay/StripeApplePay/Source/ApplePayContext/STPApplePayContext.swift#L38) in Ihrem `ApplePayContextDelegate`. Stripe ruft Ihre Implementierung auf, nachdem die Zahlung durchgeführt wurde, aber bevor iOS das Apple Pay-Formular schließt. Gehen Sie in Ihrer Implementierung wie folgt vor: 1. Rufen Sie die Bestelldetails für die abgeschlossene Bestellung von Ihrem Server ab. 1. Fügen Sie diese Details dem angegebenen [PKPaymentAuthorizationResult](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationresult) hinzu. 1. Rufen Sie den angegebenen Abschluss-Handler für die Hauptwarteschlange auf. Weitere Informationen zur Bestellungsnachverfolgung finden Sie in der [Dokumentation zu Wallet-Bestellungen von Apple](https://developer.apple.com/documentation/walletorders). #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, willCompleteWithResult authorizationResult: PKPaymentAuthorizationResult) async -> PKPaymentAuthorizationResult { // Fetch the order details from your service do { let myOrderDetails = try await MyAPIClient.shared.fetchOrderDetails(orderID: myOrderID) authorizationResult.orderDetails = PKPaymentOrderDetails( orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, // "com.myapp.order" orderIdentifier: myOrderDetails.orderIdentifier, // "ABC123-AAAA-1111" webServiceURL: myOrderDetails.webServiceURL, // "https://my-backend.example.com/apple-order-tracking-backend" authenticationToken: myOrderDetails.authenticationToken // "abc123" ) // Return your modified PKPaymentAuthorizationResult return authorizationResult } catch { return PKPaymentAuthorizationResult(status: .failure, errors: [error]) } } } ``` # React Native iOS > This is a React Native iOS for when platform is react-native. View the full page at https://docs.stripe.com/apple-pay?platform=react-native. Sie können mit dem [React Native SDK](https://github.com/stripe/stripe-react-native) von Stripe sowohl Zahlungen per Apple Pay als auch herkömmliche Kreditkartenzahlungen annehmen. Bevor Sie beginnen, müssen Sie im [Apple Developer Program](https://developer.apple.com/programs/) angemeldet sein und [Stripe auf Ihrem Server und in Ihrer App einrichten](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=react-native#react-native-setup). Führen Sie dann die folgenden Schritte aus: 1. [Eine Apple-Händler-ID registrieren](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Neues Apple Pay-Zertifikat erstellen](https://docs.stripe.com/apple-pay.md#csr) 1. [Mit Xcode integrieren](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Apple-Händler-ID in StripeProvider festlegen](https://docs.stripe.com/apple-pay.md#set-merchantid) 1. [Prüfen, ob Apple Pay unterstützt wird](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Zahlungsformular anzeigen](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Zahlung an Stripe senden](https://docs.stripe.com/apple-pay.md#handle-payment) > Wenn Sie React Native und Expo verwenden, wird Apple Pay von Expo Go nicht unterstützt. Um Apple Pay mit Expo zu verwenden, müssen Sie einen [Entwicklungs-Build](https://docs.expo.dev/get-started/set-up-your-environment/?mode=development-build&platform=ios) erstellen. Wenn Sie bereits ein Expo Go-Projekt haben, können Sie es [zu einem Entwicklungs-Build migrieren](https://docs.expo.dev/develop/development-builds/expo-go-to-dev-build/). ## Eine Apple-Händler-ID registrieren Beantragen Sie eine Apple-Händler-ID, indem Sie sich auf der Apple Developer-Website [für eine neue Kennung registrieren](https://developer.apple.com/account/resources/identifiers/add/merchant). Tragen Sie eine Beschreibung und eine Kennung in das Formular ein. Die Beschreibung ist nur für Ihre internen Zwecke bestimmt und kann später geändert werden. Stripe empfiehlt, dass Sie den Namen Ihrer App als Kennung verwenden, zum Beispiel `merchant.com.{{YOUR_APP_NAME}}`. ## Neues Apple Pay-Zertifikat erstellen Erstellen Sie ein Zertifikat für Ihre App, um Zahlungsdaten zu verschlüsseln. Gehen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard, klicken Sie auf **Neue Anwendung hinzufügen** und befolgen Sie die Anleitung. Laden Sie eine Certificate Signing Request (CSR)-Datei herunter, um ein sicheres Zertifikat von Apple zu erhalten, mit dem Sie Apple Pay verwenden können. Eine CSR-Datei muss verwendet werden, um genau ein Zertifikat auszustellen. Wenn Sie Ihre Apple-Händler-ID wechseln, müssen Sie zu den [iOS-Zertifikateinstellungen](https://dashboard.stripe.com/settings/ios_certificates) im Dashboard gehen, um eine neue CSR und ein Zertifikat zu erhalten. ## Mit Xcode integrieren Fügen Sie Ihrer App die **Apple Pay**-Funktion hinzu. Öffnen Sie in Xcode Ihre Projekteinstellungen, klicken Sie auf die Registerkarte **Signing & Capabilities** (Anmeldung und Funktionen) und fügen Sie die **Apple Pay**-Funktion hinzu. Möglicherweise werden Sie an dieser Stelle aufgefordert, sich bei Ihrem Entwicklerkonto anzumelden. Wählen Sie die zuvor erstellte Händler-ID aus. Ihre App sollte nun Apple Pay unterstützen. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Apple Pay-Funktion in Xcode aktivieren ## Apple-Händler-ID in StripeProvider festlegen Geben Sie in der Komponente `StripeProvider` die Apple-Händler-ID an, für die Sie sich erfolgreich registriert haben: ```jsx import { StripeProvider } from '@stripe/stripe-react-native'; function App() { return ( {/* Your app code here */} ); } ``` ## Prüfen, ob Apple Pay unterstützt wird Bevor Sie Apple Pay als Zahlungsoption in Ihrer App anzeigen, sollten Sie prüfen, ob die Geräte der Nutzer/innen Apple Pay unterstützen und ob im Wallet eine Karte hinterlegt ist: ```jsx import { PlatformPayButton, isPlatformPaySupported } from '@stripe/stripe-react-native'; function PaymentScreen() { const [isApplePaySupported, setIsApplePaySupported] = useState(false); useEffect(() => { (async function () { setIsApplePaySupported(await isPlatformPaySupported()); })(); }, [isPlatformPaySupported]); // ... const pay = async () => { // ... }; // ... return ( {isApplePaySupported && ( )} ); } ``` ## Payment Intent erstellen ### Serverseitig Erstellen Sie einen Endpoint, der einen PaymentIntent mit einem [Betrag](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) und einer [Währung](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency) generiert. Legen Sie den zu bezahlenden Betrag immer serverseitig fest, also in einer vertrauenswürdigen Umgebung, und nicht clientseitig. So wird verhindert, dass böswillige Kund/innen ihre eigenen Preise festlegen können. #### Curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Clientseitig Erstellen Sie eine Methode, die einen PaymentIntent von Ihrem Server anfordert: ```jsx function PaymentScreen() { // ... const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ some: 'value', }), }); const { clientSecret } = await response.json(); return clientSecret; }; // ... } ``` ### Fehlerbehebung Wenn bei der Tokenerstellung Fehler mit der Stripe-API auftreten, liegt höchstwahrscheinlich ein Problem mit Ihrem Apple Pay-Zertifikat vor. In diesem Fall müssen Sie ein neues Zertifikat generieren und bei Stripe hochladen, wie auf dieser Seite beschrieben. Stellen Sie dabei sicher, dass Sie einen CSR verwenden, den Sie vom Dashboard abgerufen und nicht selbst generiert haben. Xcode legt alte Zertifikate oft fälschlicherweise im Zwischenspeicher ab. Stripe empfiehlt daher, zusätzlich zur Erstellung eines neuen Zertifikats auch eine neue Apple-Händler-ID zu erstellen. Wenn Sie den Fehler erhalten, hat das folgenden Grund: > Sie haben Ihr Apple-Händler-Konto nicht bei Stripe hinterlegt. Wahrscheinlich sendet Ihre App Daten, die mit einem früheren (nicht von Stripe stammenden) CSR/Zertifikat verschlüsselt wurden. Stellen Sie sicher, dass alle Zertifikate widerrufen werden, die durch nicht von Stripe stammende CSRs generiert wurden und Ihre Apple-Händler-ID aufweisen. Wenn dadurch das Problem nicht behoben wird, löschen Sie die Händler-ID in Ihrem Apple-Konto und legen Sie eine neue an. Erstellen Sie dann ein neues Zertifikat basierend auf dem zuvor verwendeten (von Stripe bereitgestellten) CSR. Sie müssen dieses neue Zertifikat nicht bei Stripe hochladen. Aktivieren und deaktivieren Sie die Apple Pay-Anmeldedaten in Ihrer App, um sicherzustellen, dass sie korrekt aktualisiert werden. ## Zahlungsformular anzeigen Rufen Sie in der [Eigenschaft `onPress` Ihres `PlatformPayButton`s](https://stripe.dev/stripe-react-native/api-reference/index.html#PlatformPayButton) `confirmPlatformPayPayment` auf, um ein Apple Pay-Formular zu öffnen. Um die Posten des Warenkorbs der Kundin bzw. des Kunden auf dem Zahlungsformulars anzuzeigen, übergeben Sie die Posten als Argument. Der letzte Posten muss für Ihr Unternehmen und die Gesamtsumme stehen; er erscheint im Formular mit dem vorangestellten Wort „Pay“ (z. B. „Pay iHats, Inc. 50 USD“). > Fügen Sie in Ihren Code, der die Kundenaktion abwickelt, keine komplexen oder asynchronen Aktionen ein, bevor Sie das Zahlungsformular anzeigen. Wenn die Nutzeraktion das Zahlungsformular nicht direkt aufruft, gibt Apple Pay einen Fehler zurück. ```jsx import { confirmPlatformPayPayment } from '@stripe/stripe-react-native'; function PaymentScreen() { // ... see above const pay = async () => { const clientSecret = await fetchPaymentIntentClientSecret() const { error, paymentIntent } = await confirmPlatformPayPayment( clientSecret, { applePay: { cartItems: [ { label: 'Example item name', amount: '14.00', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'Tax', amount: '1.60', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'iHats, Inc.', amount: '15.60', paymentType: PlatformPay.PaymentType.Immediate, }, ], merchantCountryCode: 'US', currencyCode: 'USD', requiredShippingAddressFields: [ PlatformPay.ContactField.PostalAddress, ], requiredBillingContactFields: [PlatformPay.ContactField.PhoneNumber], }, } ); if (error) { // handle error } else { Alert.alert('Success', 'Check the logs for payment intent details.'); console.log(JSON.stringify(paymentIntent, null, 2)); } }; // ... see above } ``` ## Optional: Zahlungsmethode erstellen [Clientseitig] Wenn Sie Ihre Zahlung auf Ihrem Server bestätigen, können Sie Apple Pay verwenden, um nur eine `PaymentMethod` zu erfassen, anstatt eine Zahlung zu bestätigen. Rufen Sie dazu die Methode `createPlatformPayPaymentMethod` auf: ```javascript import {PlatformPayButton, isPlatformPaySupported, createPlatformPayPaymentMethod} from '@stripe/stripe-react-native'; function PaymentScreen() { const [isApplePaySupported, setIsApplePaySupported] = useState(false); useEffect(() => { (async function () { setIsApplePaySupported(await isPlatformPaySupported()); })(); }, [isPlatformPaySupported]); const createPaymentMethod = async () => { const { error, paymentMethod } = await createPlatformPayPaymentMethod({ applePay: { cartItems: [ { label: 'Example item name', amount: '14.00', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'Total', amount: '12.75', paymentType: PlatformPay.PaymentType.Immediate, }, ], merchantCountryCode: 'US', currencyCode: 'USD', }, }); if (error) { Alert.alert(error.code, error.message); return; } else if (paymentMethod) { Alert.alert( 'Success', `The payment method was created successfully. paymentMethodId: ${paymentMethod.id}` ); } }; return ( {isApplePaySupported && ( )} ); } ``` ## Optional: Wiederkehrende Zahlungen [Clientseitig] In iOS 16 oder höher können Sie [Händler-Token](https://developer.apple.com/apple-pay/merchant-tokens/) übernehmen, indem Sie das Feld `request` in den `applePay`-Parameter-Objekten von `confirmPlatformPayPayment()` und `confirmPlatformPaySetupIntent` festlegen. ```js await confirmPlatformPayPayment( clientSecret, { applePay: { // Make sure to include the rest of the necessary fields request: { type: PlatformPay.PaymentRequestType.Recurring, description: 'String describing my payment', managementUrl: 'www..com', billing: { paymentType: PlatformPay.PaymentType.Recurring, intervalUnit: PlatformPay.IntervalUnit.Month, intervalCount: 3, label: 'My label', amount: '39.00', }, }, }, } ); ``` Weitere Informationen zur Verwendung wiederkehrender Zahlungen mit Apple Pay finden Sie in der [PassKit-Dokumentation von Apple](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Optional: Sendungsverfolgung [Clientseitig] Um die [Bestellverfolgung](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) in iOS 16 oder höher einzuführen, verwenden Sie den Rückruf `setOrderTracking` für die `PlatformPayButton`-Komponente. Gehen Sie in Ihrer Implementierung wie folgt vor: 1. Rufen Sie die Bestelldetails für die abgeschlossene Bestellung von Ihrem Server ab. 1. Rufen Sie den angegebenen Abschluss-Handler in `setOrderTracking` mit den Ergebnissen von Ihrem Server auf. ```jsx { const { orderIdentifier, orderType, authToken, webServiceUrl } = fetchOrderDetailsFromMyBackend(); completion(orderIdentifier, orderType, authToken, webServiceUrl); }} /> ``` Weitere Informationen zur Bestellungsnachverfolgung finden Sie in der [Dokumentation zu Wallet-Bestellungen von Apple](https://developer.apple.com/documentation/walletorders). # Web > This is a Web for when platform is web. View the full page at https://docs.stripe.com/apple-pay?platform=web. Zahlungen per Apple Pay können Sie im Web über [Checkout](https://docs.stripe.com/payments/checkout.md) oder [Elements](https://docs.stripe.com/payments/elements.md) akzeptieren. Es ist keine zusätzliche Konfiguration erforderlich, um Apple Pay in Checkout zu verwenden. Lesen Sie für Elements unsere Leitfäden zu den Themen [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) oder [Eine Zahlung akzeptieren](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=checkout), um zu erfahren, wie Sie Apple Pay auf Ihrer Website hinzufügen können. ### Überlegungen zur Webintegration - **Verwenden eines iFrames mit [Elementen](https://docs.stripe.com/payments/elements.md)**: Bei der Verwendung eines iFrames muss dessen Ursprungsadresse mit der obersten Ursprungsadresse übereinstimmen (mit Ausnahme von Safari 17+ bei der Angabe des Attributs `allow="payment"`). Zwei Seiten haben denselben Ursprungsort, wenn das Protokoll, der Host (in diesem Fall der vollständige Domain-Name) und der Port (falls angegeben) für beide Seiten identisch sind. - **Top-Level-Domain und iframe-Domain**: Wenn sich die Top-Level-Domain von der iframe-Domain unterscheidet, müssen die Top-Level-Domain und die Quell-Domain des iFrame eine [registrierte Zahlungsmethoden-Domain](https://docs.stripe.com/payments/payment-methods/pmd-registration.md) auf dem zugehörigen Konto sein. - **Bestehende Stripe.js v2-Integrationen**: Führen Sie so bald wie möglich ein Upgrade auf Checkout oder Elements durch. - **Using [Checkout](https://docs.stripe.com/payments/checkout.md) with [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) set to `embedded_page`**: Supports only Safari version 17 or later and iOS version 17 or later. Die Nutzung von Apple Pay on the Web unterliegt den [Allgemeinen Geschäftsbedingungen für Apple Pay on the Web](https://stripe.com/apple-pay/legal). ### Ihre Domain bei Apple Pay registrieren Um Apple Pay nutzen zu können, müssen Sie alle Ihre Web-Domains, die eine Apple Pay-Schaltfläche aufweisen, bei Apple registrieren. Dazu gehören Top-Level-Domains (zum Beispiel **stripe.com**) und Subdomains (zum Beispiel **shop.stripe.com**) im Produktions- und Testbetrieb. > #### Subdomains > > `www` ist eine Subdomain (zum Beispiel **www.stripe.com**), die Sie ebenfalls registrieren müssen. Stripe übernimmt die Apple-Händlervalidierung für Sie, einschließlich der Erstellung einer Apple-Händler-ID und eines CSR (Certificate Signing Request). Befolgen Sie nicht das Verfahren zur Händlervalidierung in der Apple Pay-Dokumentation. Führen Sie stattdessen diesen Schritt aus: 1. Bitten Sie Stripe, Ihre Domain bei Apple zu registrieren. Sie können dies auf der [Seite „Zahlungsmethoden-Domains“](https://dashboard.stripe.com/settings/payment_method_domains) im Dashboard *oder* mithilfe der API mit Ihrem Live-Geheimschlüssel, wie unten beschrieben, durchführen. Registrieren Sie Ihre Domain nicht mehr als einmal pro Konto. ```curl curl https://api.stripe.com/v1/payment_method_domains \ -u "<>:" \ -d "domain_name=example.com" ``` Wenn Sie [Direct Charges](https://docs.stripe.com/connect/direct-charges.md) mit *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) verwenden, müssen Sie die Domain für jedes verbundene Konto über die API konfigurieren. Diese Voraussetzung gilt nicht für verbundene Konten, die andere Gebührenarten verwenden. Nach der Registrierung Ihrer Domains können Sie mit Ihren Live-API-Schlüsseln Zahlungen auf Ihrer Website abwickeln. ## Wiederkehrende Zahlungen We recommend implementing Apple Pay merchant tokens to enable merchant-initiated transactions (MIT) such as recurring and deferred payments and automatic reloads. Merchant tokens (MPANs) connect your business with your customer’s Apple Wallet payment method, so they work across multiple devices and keep payment information active in a new device even when its removed from a lost or stolen device. See [ApplePay merchant tokens](https://docs.stripe.com/apple-pay/merchant-tokens.md?pay-element=ece) for integration details. ## Apple Pay testen Um Apple Pay zu testen, müssen Sie eine echte Kreditkartennummer und Ihre [API-Testschlüssel](https://docs.stripe.com/keys.md) verwenden. Stripe erkennt, dass Sie sich im Test-Modus befinden und gibt ein Testkarten-Token zurück, das Sie verwenden können, sodass Sie Testzahlungen mit einer Live-Karte durchführen können, ohne diese zu belasten. Sie können [Stripe Testkarten](https://docs.stripe.com/testing.md#use-test-cards) oder [Apple Pay-Testkarten](https://developer.apple.com/apple-pay/sandbox-testing/) nicht in Apple Pay Wallets speichern, um Apple Pay zu testen. # Web > This is a Web for when platform is web. View the full page at https://docs.stripe.com/apple-pay?platform=web. Wenn Sie die Geräte- und Integrationsanforderungen nicht erfüllen, zeigt Stripe Apple Pay nicht als Zahlungsoption an. Nutzen Sie unsere [Testseite](https://docs.stripe.com/testing/wallets.md), um Ihnen bei der Fehlerbehebung zu helfen. ## See also - [iOS-Integration](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [Apple Pay on the Web](https://docs.stripe.com/elements/express-checkout-element.md) - [Best Practices für Apple Pay](https://docs.stripe.com/apple-pay/best-practices.md)