Zahlungen für digitale Waren in iOS akzeptieren
Öffnen Sie Stripe Checkout in einem Browser, um In-App-Waren und Dienste zu verkaufen.
In some countries, you can link to an external website to accept payments on iOS. As an example, this guide describes how to sell credits for consumption in your app. You use Stripe Checkout to redirect your customers to a Stripe-hosted payment page. If you have a limited number of products and prices, you can also use low-code Payment Links to accept payments for digital goods on iOS.
Notiz
Contact our sales team if your business is new to Stripe, processes a high volume of payments, and has advanced integration needs.
Was Sie entwickeln
Notiz
Dieser Leitfaden beschreibt nur das Verfahren für den Verkauf von digitalen Waren in der App. Wenn Sie Folgendes verkaufen:
- Physische Waren
- Waren und Dienste zum Verbrauch außerhalb Ihrer App
- Persönliche Dienstleistungen in Echtzeit zwischen zwei Individuen
Use the native iOS payment guide instead.
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.
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
Create your products and their prices in the Dashboard or with the Stripe CLI. You can model digital goods using one-off prices and subscriptions using recurring prices. You can also let your customer pay what they want (for example, to decide how many credits to buy), by selecting Customers choose what to pay.
This example uses a single product and price to represent a 100 coin bundle.
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.
Achtung
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.
If your app doesn’t have an existing authentication provider, you can use Sign in with Apple.
Verwenden Sie das Argument customer, um die Kunden-ID beim Erstellen einer Checkout-Sitzung zu übergeben. Dadurch wird sichergestellt, dass alle während der Sitzung erstellten Objekte dem richtigen Kundenobjekt zugeordnet werden.
Notiz
Ändert ein/e Kund/in seine/ihre E-Mail-Adresse auf der Checkout-Seite, aktualisiert sich das Kundenobjekt mit der neuen E-Mail-Adresse.
Im payment
-Modus verwenden wir die letzte Kartenzahlungsmethode der/s Kund/in, um die E-Mail-Adresse, den Namen, die Kartendetails und die Rechnungsadresse auf der Checkout-Seite vorab anzugeben. Checkout erfordert eine gültige Rechnungsadresse, um die Kartendaten der/s Kund/in vorauszufüllen.
Sie können Angaben zur Zahlungsmethode speichern, damit Checkout die Zahlungsmethode automatisch den Kundinnen/Kunden zur zukünftigen Verwendung zuordnet.
Universelle Links einrichtenClientseitigServerseitig
Universal links allow Checkout to deep link into your app. To configure a universal 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 .
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" } ] } ] } }
Achtung
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.
- Click + Capability, then select Associated Domains.
- Fügen Sie der Liste der Zugewiesenen Domains einen Eintrag für
applinks:yourdomain.
hinzu.com
Weitere Informationen zu universellen Links finden Sie auf der Seite Universelle Links für Entwickler von Apple.
Although iOS intercepts links to the URLs defined in your apple-app-site-association
file, you might encounter situations where the redirect fails to open your app.
Make sure to create a fallback page at your success
and cancel
URLs.
Erstellen Sie eine Checkout-SitzungServerseitig
Eine Checkout-Sitzung ist eine programmgesteuerte Darstellung dessen, was Ihren Kund/innen bei der Weiterleitung zum Zahlungsformular angezeigt wird. Es gibt folgende Konfigurationsoptionen:
- Die Kunden-ID
- Die Produkt-ID
- Eine
success_
, ein universeller Link, der Ihre Kund/innen an Ihre App weiterleitet, um die Zahlung abzuschließen.url - Eine
cancel_
, ein universeller Link, der Ihre Kund/innen zurück an Ihre App weiterleitet, wenn Sie in Checkout auf Ihr Logo klicken.url
Notiz
Checkout-Sitzungen laufen 24 Stunden nach Erstellung ab.
Geben Sie die URL aus der Antwort an Ihre App zurück, nachdem Sie eine Checkout-Sitzung erstellt haben.
Notiz
Apple Pay is enabled by default and automatically appears in Checkout when a customer uses a supported device and has saved at least one card in the Wallet app. You can accept additional payment methods by using dynamic payment methods.
Checkout in Safari öffnenClientseitig
Fügen Sie Ihrer App eine Checkout-Schaltfläche hinzu:
- 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 einen checkout.
Webhook. Wenn Sie das Ereignis empfangen, können Sie der/dem Kund/in 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
Sie sollten jetzt eine funktionierende Checkout-Schaltfläche haben, über die Ihre Kund/innen zu Stripe Checkout weitergeleitet werden.
- 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.
- Tap Pay.
- 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.