Akzeptieren Sie Zahlungen für digitale Waren in iOS mit einer vorgefertigten Zahlungsseite
Öffnen Sie Stripe Checkout in einem Browser, um in der App digitale Waren oder Abonnements zu verkaufen.
Hinweis
Erfahren Sie, wie Sie eine ähnliche Integration erstellen können, die Managed Payments verwendet. Managed Payments ermöglicht es Stripe, als Ihr eingetragener Händler zu fungieren.
Bei iOS-Apps, die digitale Produkte, Inhalte und Abonnements in den USA verkaufen, können Sie Kundinnen und Kunden auf eine externe Zahlungsseite weiterleiten, um mit Stripe Checkout Zahlungen zu akzeptieren. In diesem Leitfaden wird beschrieben, wie Sie Zahlungen für den Kauf von Gutschriften in Ihrer iOS-App zu akzeptieren, indem Sie Kundinnen und Kunden auf eine von Stripe gehostete Zahlungsseite weiterleiten.
Android-Entwickler/innen in den USA können Zahlungen direkt in der App mit einem Drittpartei-Zahlungsabwickler verarbeiten. Informationen dazu, wie Sie Zahlungen direkt in der App mit Stripe akzeptieren, finden Sie unter In-App-Zahlungen.
In diesem Leitfaden wird nur der Prozess für iOS-Entwickler/innen beschrieben, die in der App digitale Waren verkaufen. Verwenden Sie den Leitfaden für native App-Zahlungen, wenn Sie Folgendes verkaufen:
- Physische Waren
- Waren und Dienste zum Verbrauch außerhalb Ihrer App
- Persönliche Dienstleistungen in Echtzeit zwischen zwei Individuen
Dieser Leitfaden bietet Informationen zu den folgenden Vorgehensweisen:
- Erfassen Sie Zahlungsinformationen mit Checkout.
- Erstellen Sie Ihre Guthabenpakete mit Produkten, Preisen und Kund/innen.
- Verwenden Sie Universelle Links, um von Checkout direkt an Ihre App weiterzuleiten.
- Überwachen Sie Webhooks, um das In-App-Guthaben Ihrer Kund/innen zu aktualisieren.

Link außerhalb der App für einmalige Zahlungen

Link außerhalb der App für wiederkehrende Zahlungen oder Abonnementzahlungen
Folgendes wird nicht abgedeckt
Dieser Leitfaden erläutert, wie Sie Stripe Checkout neben Ihrem bestehenden In-App-Kaufsystem einrichten. Nicht behandelt wird:
- Benutzerauthentifizierung. Falls Sie noch keinen Authentifizierungsanbieter haben, können Sie einen Drittanbieter wie Registrieren bei Apple oder Firebase-Authentifizierung verwenden.
- Native In-App-Käufe. Um In-App-Käufe mit StoreKit umzusetzen, besuchen Sie den Leitfaden zu In-App-Käufen von Apple.
Stripe einrichtenServerseitig
Registrieren Sie sich zunächst für ein Stripe-Konto.
Fügen Sie dann die Stripe API-Bibliothek Ihrem Backend hinzu:
Installieren Sie als Nächstes die Stripe-CLI. Mit der CLI können Sie die erforderlichen Webhook-Tests durchführen und Ihre Produkte und Preise erstellen.
Weitere Installationsoptionen finden Sie unter Mit der Stripe-CLI loslegen.
Produkte und Preise erstellen
Erstellen Sie Ihre Produkte und die zugehörigen Preise im Dashboard oder mit der Stripe-CLI. Sie können digitale Produkte mit einmaligen Preisen und Abonnements mit wiederkehrenden Preisen modellieren. Sie können Ihre Kundinnen und Kunden auch so viel bezahlen lassen, wie sie möchten (z. B. um zu entscheiden, wie viele Credits sie kaufen möchten), indem Sie Kundinnen/Kunden entscheiden, was sie bezahlen möchten auswählen.
In diesem Beispiel wird ein einzelnes Produkt und ein einzelner Preis verwendet, um ein Bundle mit 100 Münzen darzustellen.
Kund/innen erstellenServerseitig
Erstellen Sie jedes Mal, wenn Sie eine Checkout-Sitzung erstellen auch ein KundenObjekt für Ihre/n Nutzer/in, sofern noch keines besteht.
Warnung
Speichern Sie eine Zuweisung auf Ihrem Server zwischen dem Benutzerkonto und der Stripe-Kunden-ID. Ohne eine solche Verbindung zur Zuordnung einer/s Kund/in zu einem Kauf, können Ihre Kund/innen ihre Käufe nicht erhalten.
Besteht für Ihre App kein Authentifizierungsanbieter, können Sie Mit Apple registrieren verwenden.
Sie können Angaben zur Zahlungsmethode speichern, damit Checkout die Zahlungsmethode automatisch den Kundinnen/Kunden zur zukünftigen Verwendung zuordnet.
Universelle Links einrichtenClientseitigServerseitig
Universelle Links ermöglichen es Checkout, Deep Links zu Ihrer App zu erstellen. So konfigurieren Sie einen universellen Link:
- Fügen Sie Ihrer Domain eine
apple-app-site-association-Datei hinzu. - Fügen Sie Ihrer App eine Berechtigung für die zugewiesenen Domains (“Associated Domains”) hinzu.
- Fügen Sie eine Fallbackseite für Ihre Checkout-Umleitungs-URL hinzu.
Definieren Sie die zugewiesenen Domains
Fügen Sie Ihrer Domain eine Datei unter .well-known/apple-app-site-association hinzu, um die URLs zu definieren, die Ihre App verarbeitet. Stellen Sie Ihrer App-ID die Team-ID voran, die Sie auf der Mitgliedschafts-Seite des Apple Developer Portals finden.
{ "applinks": { "apps": [], "details": [ { "appIDs": [ "A28BC3DEF9.com.example.MyApp1", "A28BC3DEF9.com.example.MyApp1-Debug" ], "components": [ { "/": "/checkout_redirect*", "comment": "Matches any URL whose path starts with /checkout_redirect" } ] } ] } }
Sie müssen der Datei den MIME-Typ application/json hinzufügen. Mit curl -I bestätigen Sie den Inhaltstyp.
curl -I https://example.com/.well-known/apple-app-site-association
Auf der Seite Zugewiesene Domains unterstützen von Apple finden Sie weitere Einzelheiten hierzu.
Fügen Sie Ihrer App eine Berechtigung für die zugewiesenen Domains (“Associated Domains”) hinzu.
- Öffnen Sie den Bereich Signierung & Kapazitäten der Zielanwendung Ihrer App.
- Klicken Sie auf + Funktion und wählen Sie dann Zugewiesene Domains aus.
- Fügen Sie einen Eintrag für
applinks:example.zur Liste der Zugewiesenen Domains hinzu.com
Weitere Informationen zu universellen Links finden Sie auf der Seite Universelle Links für Entwickler von Apple.
Obgleich iOS Links an die in Ihrer apple-app-site-association-Datei definierten URLs abruft, kann es zu Situationen kommen, in denen die Umleitung Ihre App nicht öffnen kann.
Make sure to create a fallback page at your success_. For example, you can define a custom URL scheme for your app and use it to link back in case the universal link fails.
Erstellen Sie eine Checkout-SitzungServerseitig
Eine Checkout-Sitzung ist eine programmgesteuerte Darstellung dessen, was Ihren Kundinnen/Kunden bei der Weiterleitung zum Zahlungsformular angezeigt wird. Checkout-Sitzungen laufen 24 Stunden nach Erstellung ab. Konfigurieren Sie es mit:
- Die Kunden-ID
- Die Produkt-ID (entweder eine einmalige Zahlung oder ein Abonnement)
- Ein
origin_, der aufcontext mobile_festgelegt ist, um sich für eine Nutzeroberfläche zu entscheiden, die für App-to-Web-Käufe optimiert ist.app - Eine
success_, ein universeller Link, der Ihre Kund/innen an Ihre App weiterleitet, um die Zahlung abzuschließen.url
Häufiger Fehler
Create the Checkout Session with origin_ to opt in to a UI that is optimized for app-to-web purchases.
Geben Sie die URL aus der Antwort an Ihre App zurück, nachdem Sie eine Checkout-Sitzung erstellt haben.
Hinweis
Apple Pay ist standardmäßig aktiviert und wird automatisch in Checkout angezeigt, wenn ein Kunde/eine Kundin ein unterstütztes Gerät verwendet. Sie können zusätzliche Zahlungsmethoden akzeptieren, indem Sie dynamische Zahlungsmethoden verwenden.
Checkout in Safari öffnenClientseitig
Fügen Sie Ihrer App eine Checkout-Schaltfläche hinzu. Diese Schaltfläche:
- Ruft einen serverseitigen Endpoint auf, der die Checkout-Sitzung erstellt.
- Gibt die Checkout-Sitzung an den Client zurück.
- Öffnet die Sitzungs-URL in Safari.
import Foundation import SwiftUI import StoreKit struct BuyCoinsView: View { @EnvironmentObject var myBackend: MyServer @State var paymentComplete = false var body: some View { // Check if payments are blocked by Parental Controls on this device. if !SKPaymentQueue.canMakePayments() { Text("Payments are disabled on this device.") } else { if paymentComplete { Text("Payment complete!") } else { Button { myBackend.createCheckoutSession { url in UIApplication.shared.open(url, options: [:], completionHandler: nil) } } label: { Text("Buy 100 coins") }.onOpenURL { url in // Handle the universal link from Checkout. if url.absoluteString.contains("success") { // The payment was completed. Show a success // page and fetch the latest customer entitlements // from your server. paymentComplete = true } } } } } }
Die Checkout-URL auf dem Client abrufen
Verwenden Sie Ihren Server-Endpoint, um die Checkout-Sitzung aufzurufen.
class MyServer: ObservableObject { // The cached login token var token: String? func createCheckoutSession(completion: @escaping (URL) -> Void) { // Send the login token to the `/create_checkout_session` endpoint let request = URLRequest(url: URL(string: "https://example.com/create-checkout-session?token=\(self.token)")!) let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in guard let unwrappedData = data, let json = try? JSONSerialization.jsonObject(with: unwrappedData, options: []) as? [String : Any], let urlString = json["url"] as? String, let url = URL(string: urlString) else { // Handle error return } DispatchQueue.main.async { // Call the completion block with the Checkout session URL returned from the backend completion(url) } }) task.resume() } func login() { // Login using the server and set the login token. let request = URLRequest(url: URL(string: "https://example.com/login")!) let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in guard let unwrappedData = data, let json = try? JSONSerialization.jsonObject(with: unwrappedData, options: []) as? [String : Any], let token = json["token"] as? String else { // Handle error return } self.token = token }) task.resume() } }
Umgang mit BestellabwicklungServerseitig
Nach erfolgreicher Kaufabwicklung sendet Stripe Ihnen den Webhook checkout.. Wenn Sie das Ereignis empfangen, können Sie der Kundin/dem Kunden die Münzen auf Ihrem Server zuweisen.
Checkout leitet Ihre Kundinnen und Kunden an die success_ weiter, wenn Sie bestätigen, dass Sie das Ereignis erhalten haben. In Szenarien, in denen Ihr Endpoint nicht funktionsfähig ist oder das Ereignis nicht ordnungsgemäß bestätigt wurde, leitet Checkout den Kunden/die Kundin 10 Sekunden nach einer erfolgreichen Zahlung an die success_ weiter.
Zu Testzwecken können Sie Ereignisse im Dashboard überwachen oder die Stripe-CLI verwenden. Für die Produktion richten Sie einen Webhook-Endpoint ein und abonnieren Sie die entsprechenden Ereignistypen. Wenn Sie Ihren STRIPE_-Schlüssel nicht kennen, klicken Sie im Dashboard auf den Webhook, um ihn anzuzeigen.
Testen
Testen Sie Ihre Checkout-Schaltfläche, die Ihre Kundin/Ihren Kunden zu Stripe Checkout weiterleitet.
- Klicken Sie auf die Schaltfläche Bezahlvorgang, die Sie dann zum Checkout-Zahlungsformular von Stripe weiterleitet.
- Geben Sie die Testnummer , einen dreistelligen CVC, ein Ablaufdatum und eine gültige Postleitzahl.
- Tippen Sie auf Bezahlen.
- Der Webhook
checkout.wird ausgelöst und Stripe benachrichtigt Ihren Server über die Transaktion.session. completed - Sie werden zu Ihrer App zurückgeleitet.
Wenn Ihre Integration nicht funktioniert, lesen Sie bitte im Abschnitt Zusätzliche Testressourcen weiter unten nach.
OptionalZusätzliche Testressourcen
Sie können mehrere Testkarten verwenden, um sicherzustellen, dass Ihre Integration bereit für den Einsatz in einer Produktionsumgebung ist. Verwenden Sie sie mit einer beliebigen Prüfziffer (CVC), einer Postleitzahl und einem Ablaufdatum in der Zukunft.
| Nummer | Beschreibung |
|---|---|
| Zahlung ist erfolgreich und wird sofort verarbeitet. | |
| Für eine erfolgreiche Zahlung muss die 3D Secure 2-Authentifizierung durchgeführt werden. | |
Zahlung schlägt immer mit dem Ablehnungscode insufficient_ fehl. |
Eine vollständige Liste der Testkarten finden Sie im Leitfaden Testbetrieb.
Universelle Links testen
Wenn Ihr universeller Link nicht von Checkout auf Ihre App weiterleitet, prüfen Sie die SharedWebCredentials-Logs auf Fehler.
Fügen Sie der Zugewiesenen Domain einen Debugging-Parameter hinzu.
- Öffnen Sie den Bereich Signierung & Kapazitäten der Zielanwendung Ihrer App.
- Fügen Sie dem Eintrag für Ihre zugewiesene Domain die Kennzeichnung
?mode=developerhinzu. (Example:applinks:example.)com?mode=developer
Wechseln Sie in den Entwicklermodus.
- Führen Sie eine App aus Xcode auf Ihrem Gerät aus und aktivieren Sie das Entwicklermenü.
- Öffnen Sie auf Ihrem iPhone die Einstellungen, tippen Sie auf Entwickler und aktivieren Sie Entwicklung Zugewiesene Domains.
Löschen Sie Ihre App und installieren Sie sie neu. Dadurch wird iOS die Datei apple-app-site-association erneut herunterladen.
Schließen Sie den Bezahlvorgang in Ihrer App ab.
Checkout leitet Sie an Ihre App weiter. Falls nicht, führen Sie eine Systemdiagnose durch.
Drücken Sie gleichzeitig die Volumentasten (+ und -) und die Einschalttaste für 1 Sekunde, danach loslassen. Sie fühlen eine kurze Vibration, es wird aber kein visuelles Signal angezeigt.
Warten Sie 5 Minuten, gehen Sie dann auf Einstellungen > Datenschutz > Analyse und Verbesserungen > Analysedaten und scrollen Sie zur letzten Systemdiagnosedatei in der Liste.
Tippen Sie die Taste Teilen, um per AirDrop die Datei auf Ihrem Computer zu speichern.
Öffnen Sie das Systemdiagnosearchiv und dann
swcutil_.show. txt Durchsuchen Sie diese Datei nach der ID Ihrer App. Sie sehen einen Bereich mit Debugging-Informationen für Ihre App, einschließlich etwaiger Fehlermeldungen.
Service: applinks App ID: Y28TH9SHX7.com.stripe.FruitStore App Version: 1.0 App PI: <LSPersistentIdentifier 0x115e1a390> { v = 0, t = 0x8, u = 0xc98, db = E335D78F-D49E-4F19-A150-F657E50DEDAE, {length = 8, bytes = 0x980c000000000000} } Domain: example.com?mode=developer User Approval: unspecified Site/Fmwk Approval: unspecified Flags: developer Last Checked: 2021-09-23 18:16:58 +0000 Next Check: 2021-09-23 21:21:34 +0000 Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set. around line 1, column 0." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set. around line 1, column 0., NSJSONSerializationErrorIndex=0} Retries: 1
OptionalIn-App-Käufe mit Managed Payments
Akzeptieren Sie Zahlungen mit Managed Payments, die viele Unternehmensfunktionen (z. B. Mehrwertsteuer und angefochtene Zahlungen) in Ihrem Namen abwickeln können. Erfahren Sie mehr über die Verwendung von Managed Payments als eingetragenem Händler für In-App-Käufe.