Accepter des paiements pour des biens numériques sur iOS
Ouvrez Stripe Checkout dans un navigateur pour vendre des biens et des services intégrés à l'application.
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.
Remarque
Contact our sales team if your business is new to Stripe, processes a high volume of payments, and has advanced integration needs.
Ce que vous allez créer
Remarque
Ce guide n’explique le processus que pour la vente de biens numériques intégrés à l’application. Si vous vendez :
- Produits physiques
- Biens et services destinés à la consommation en dehors de votre application
- Services en temps réel de personne à personne entre deux individus
Use the native iOS payment guide instead.
Ce guide explique comment :
- Collectez des informations de paiement avec Checkout.
- Modélisez vos forfaits de crédits avec des produits, des tarifs et des clients.
- Utilisez les liens universels pour rediriger directement vers votre application depuis Checkout.
- Surveillez des webhooks pour mettre à jour le solde de la devise du client dans l’application.
Ce qui n’est pas couvert
Ce guide vous explique comment ajouter Stripe Checkout à côté de votre système d’achat actuel dans l’application. Il ne couvre pas les points suivants :
- Authentification d’utilisateur. Si vous ne disposez pas encore d’un fournisseur d’authentification, vous pouvez faire appel à un tiers (par exemple, avec l’option Se connecter avec Apple ou Authentification Firebase).
- Achats dans l’application native. Pour implémenter des achats dans l’application avec StoreKit, consultez le guide d’Apple sur les achats intégrés à l’application.
Configurer StripeCôté serveur
Tout d’abord, inscrivez-vous pour créer un Compte Stripe.
Ajoutez ensuite la bibliothèque d’API Stripe à votre back-end :
Installez ensuite l’interface de ligne de commande Stripe. Cette dernière vous permet d’exécuter les tests webhook dont vous aurez besoin et vous pouvez l’utiliser pour créer vos produits et vos tarifs.
Pour davantage d’options d’installation, consultez la page consacrée à l’interface de ligne de commande Stripe.
Créer des produits et des tarifs
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.
Créer des clientsCôté serveur
Chaque fois que vous créez une session Checkout, créez un objet Customer pour votre utilisateur si celui-ci n’existe pas encore.
Avertissement
Veillez à conserver sur votre serveur l’association entre le compte d’utilisateur et l’ID de client Stripe. Sans cela, vous ne pourrez pas associer vos clients à des achats et vos clients ne pourront donc pas récupérer leurs achats.
If your app doesn’t have an existing authentication provider, you can use Sign in with Apple.
Utilisez l’argument customer pour transmettre leur ID client lorsqu’ils créent une session Checkout. Cela permet de vérifier que tous les objets créés pendant la session sont associés à l’objet Customer correspondant.
Remarque
Si le client change son adresse e-mail sur la page Checkout, l’objet Customer se met à jour avec la nouvelle adresse.
En mode payment
, nous nous référons au paiement par carte bancaire le plus récent du client pour renseigner automatiquement son adresse e-mail, son nom, ses informations de carte bancaire et son adresse de facturation sur la page Checkout. Une adresse de facturation valide est requise pour que Checkout puisse remplir automatiquement les informations de carte bancaire du client.
Vous pouvez enregistrer les informations du moyen de paiement pour que Checkout associe automatiquement ce moyen de paiement à l’objet Customer afin de pouvoir le réutiliser.
Configurer des liens universelsCôté clientCôté serveur
Universal links allow Checkout to deep link into your app. To configure a universal link:
- Ajoutez un fichier
apple-app-site-association
à votre domaine. - Ajoutez un droit de domaine associé à votre application.
- Ajoutez une page de renvoi pour vos URL de redirection Checkout.
Définissez les domaines associés
Ajoutez un fichier à votre domaine sur .
pour définir les URL que votre application peut gérer. Ajoutez l’ID d’application avec votre ID d’équipe que vous pourrez trouver sur la page d’abonnement du portail développeur d’Apple.
{ "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" } ] } ] } }
Avertissement
Vous devez traiter le fichier avec le type MIME application/json
. Utilisez curl -I
pour confirmer le type de contenu.
curl -I https://example.com/.well-known/apple-app-site-association
Pour en savoir plus, consultez la page d’Apple relative aux domaines associés pris en charge.
Ajouter un droit de domaine associé à votre application
- Ouvrez le volet Signatures et fonctionnalités de la cible de votre application.
- Click + Capability, then select Associated Domains.
- Ajoutez une saisie pour
applinks:yourdomain.
à la liste de domaines associés.com
Pour en savoir plus sur les liens universels, consultez la page d’Apple sur les liens universels pour les développeurs.
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.
Créer une session CheckoutCôté serveur
Une session Checkout est la représentation programmatique de ce que votre client voit lorsqu’il est redirigé vers le formulaire de paiement. Configurez-la avec :
- ID du client
- ID du produit
- Une URL
success_
, à savoir un lien universel vers lequel rediriger votre client après avoir finalisé le paiement.url - Une URL
cancel_
, à savoir un lien universel vers lequel rediriger votre client s’il clique sur votre logo dans Checkout.url
Remarque
Les sessions Checkout expirent 24 heures après leur création.
Après avoir créé une session Checkout, renvoyez l’URL contenue dans la réponse vers votre application.
Remarque
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.
Ouvrir Checkout dans SafariCôté client
Ajoutez un bouton de paiement à votre application. Ce bouton :
- Appelez un endpoint côté serveur pour créer une session Checkout.
- Renvoie la session Checkout au client.
- Ouvre l’URL de la session dans 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 } } } } } }
Récupérer l’URL Checkout côté client
Utilisez votre endpoint serveur pour récupérer la session de paiement.
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() } }
Gérer le traitement des commandesCôté serveur
Une fois l’achat terminé, Stripe vous envoie un webhook checkout.
. Lorsque vous l’avez reçu, vous pouvez ajouter les coins au client sur votre serveur.
Checkout redirige votre client vers l’URL success_
lorsque vous confirmez avoir reçu l’événement. Si votre endpoint est hors service ou si l’événement n’est pas confirmé correctement, Checkout redirige le client vers l’URL success_
10 secondes après la finalisation du paiement.
Pour les tests, vous pouvez surveiller les événements dans le Dashboard ou utiliser l’interface de ligne de commande Stripe. Pour le mode production, configurez un endpoint de webhook et abonnez-vous aux types d’événement appropriés. Si vous ne connaissez pas votre clé STRIPE_
, cliquez sur le webhook dans le Dashboard pour l’afficher.
Tests
Vous devriez maintenant disposer d’un bouton de règlement fonctionnel qui redirige votre client vers Stripe Checkout.
- Cliquez sur le bouton de paiement qui vous redirige vers le formulaire de paiement Stripe Checkout.
- Saisissez le numéro de carte de test , un code CVC à trois chiffres, une date d’expiration et un code postal valide.
- Tap Pay.
- Le webhook
checkout.
s’active et Stripe notifie votre serveur de la transaction.session. completed - Vous êtes redirigé vers votre application.
Si votre intégration ne fonctionne pas, consultez la section Ressources de test supplémentaires ci-dessous.