# Apple Pay Donnez à votre clientèle la possibilité de régler ses achats de manière sécurisée avec Apple Pay sur son iPhone, iPad ou Apple Watch. Reportez-vous à la [documentation sur la compatibilité](https://support.apple.com/en-us/HT208531) d’Apple pour savoir quels appareils prennent en charge Apple Pay. Apple Pay est compatible avec la plupart des produits et fonctionnalités Stripe. Les utilisateurs Stripe peuvent accepter [Apple Pay](https://stripe.com/apple-pay) dans les applications iOS à partir d’iOS 9 et sur le Web dans Safari à partir d’iOS 10 ou macOS Sierra. Le traitement des paiements Apple Pay ne facture aucuns frais supplémentaires et la [tarification](https://stripe.com/pricing/local-payment-methods#apple-pay) est la même que pour les autres transactions par carte. Apple Pay est disponible pour les titulaires de cartes émises par des banques participantes, dans les pays pris en charge. Pour en savoir plus, reportez-vous à la [liste des banques participantes](https://support.apple.com/en-us/ht204916) établie par Apple pour connaître les banques et pays pris en charge. #### Propriétés des moyens de paiement - **Localisation des clients** Dans le monde entier, sauf en Inde - **Devise de présentation** Voir [Devises de présentation prises en charge](https://docs.stripe.com/currencies.md#presentment-currencies) - **Confirmation du paiement** Initié par le client - **Catégorie de moyens de paiement** Portefeuille - **Paiements récurrents** [Oui](https://docs.stripe.com/apple-pay.md#recurring-payments) - **Délai de virement** Les délais de virement standard s’appliquent - **Prise en charge de Connect** Oui - **Prise en charge des litiges** [Oui](https://docs.stripe.com/apple-pay/disputes-refunds.md#disputed-payments) - **Prise en charge des captures manuelles** Oui - **Remboursements complets/partiels** [Oui/oui](https://docs.stripe.com/apple-pay/disputes-refunds.md#refunds) #### Pays de l'entreprise Les comptes Stripe du monde entier, à l’exception de l’Inde, peuvent accepter les paiements Apple Pay avec règlement dans la devise locale. #### Prise en charge des produits - 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. ## Tunnel de paiement La démonstration ci-dessous illustre le tunnel de paiement Apple Pay depuis votre page de paiement : ![Animation du tunnel de paiement Apple Pay montrant la page de paiement Stripe, le bouton Apple Pay et la boîte de dialogue de confirmation pendant le test.](https://b.stripecdn.com/docs-statics-srv/assets/apple-pay.3447ce2deeaab40d6d231eed4dc34644.gif) ## Éligibilité des achats dans l’application pour Apple Pay Ce guide explique comment configurer votre application pour qu’elle accepte directement Apple Pay pour des biens physiques, des services et d’autres éléments éligibles. Stripe traite ces paiements, et vous ne payez que les [frais de traitement](https://stripe.com/pricing) de Stripe. Pour les produits numériques, les contenus et les abonnements vendus aux États-Unis ou dans l’Espace économique européen (EEE), votre application peut accepter Apple Pay en redirigeant vers une page de paiement externe. Vous pouvez utiliser les interfaces utilisateur de paiement suivantes : - [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) (idéal pour un nombre limité de produits et de prix) Dans d’autres régions, votre application ne peut pas accepter Apple Pay pour les produits numériques, les contenus ou les abonnements. ## Accepter Apple Pay Stripe met à votre disposition différentes méthodes pour ajouter Apple Pay aux moyens de paiement que vous proposez. Pour plus d’informations sur l’intégration à mettre en place, sélectionnez la méthode qui vous intéresse : # iOS natif > This is a iOS natif for when platform is ios. View the full page at https://docs.stripe.com/apple-pay?platform=ios. > Si vous utilisez l’[interface utilisateur préconfigurée](https://docs.stripe.com/payments/mobile.md) de Stripe, suivez plutôt les étapes de [ce guide](https://docs.stripe.com/payments/mobile/accept-payment.md?platform=ios&type=payment#apple-pay). Avec le [SDK iOS de Stripe](https://github.com/stripe/stripe-ios), vous pouvez accepter Apple Pay et les cartes bancaires traditionnelles. Avant de commencer, vous devez vous inscrire au [programme Apple Developer](https://developer.apple.com/programs/). Ensuite, suivez les étapes ci-dessous : 1. [Configurer Stripe](https://docs.stripe.com/apple-pay.md#setup) 1. [Demander un ID de marchand Apple](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Créer un certificat Apple Pay](https://docs.stripe.com/apple-pay.md#csr) 1. [Réaliser une intégration avec Xcode](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Vérifier si Apple Pay est pris en charge](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Créer la requête de paiement](https://docs.stripe.com/apple-pay.md#create-payment-request) 1. [Présenter le formulaire de paiement](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Envoyer le paiement à Stripe](https://docs.stripe.com/apple-pay.md#handle-payment) ## Configurer Stripe [Côté serveur] [Côté client] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). ### Côté serveur Cette intégration exige des endpoints sur votre serveur qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur : #### 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' ``` ### Côté client Le [SDK iOS de Stripe](https://github.com/stripe/stripe-ios) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-ios/index.html). Il est également compatible avec les applications prenant en charge iOS 13 et les versions ultérieures. #### Swift Package Manager Pour installer le SDK, veuillez suivre les étapes ci-dessous : 1. Dans Xcode, sélectionnez **File** > **Add Package Dependencies…** puis saisissez `https://github.com/stripe/stripe-ios-spm` en tant qu’URL du référentiel. 1. Sélectionnez le dernier numéro de version, visible sur notre [page des versions](https://github.com/stripe/stripe-ios/releases). 1. Ajoutez le produit **StripeApplePay** à la [cible de votre application](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Si vous n’avez pas de fichier [Podfile](https://guides.cocoapods.org/syntax/podfile.html), exécutez la commande suivante pour en créer un : ```bash pod init ``` 1. Ajoutez cette ligne à votre `Podfile` : ```podfile pod 'StripeApplePay' ``` 1. Exécutez la commande suivante : ```bash pod install ``` 1. À partir de maintenant, n’oubliez pas d’utiliser le fichier .xcworkspace au lieu du fichier .xcodeproj pour ouvrir votre projet dans Xcode. 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, il vous suffit d’exécuter : ```bash pod update StripeApplePay ``` #### Carthage 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Ajoutez cette ligne à votre `Cartfile` : ```cartfile github "stripe/stripe-ios" ``` 1. Suivez les [instructions d’installation de Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Veillez à intégrer tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripeApplePay/README.md#manual-linking). 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, exécutez la commande suivante : ```bash carthage update stripe-ios --platform ios ``` #### Cadre manuel 1. Accédez à notre [page des versions GitHub](https://github.com/stripe/stripe-ios/releases/latest), puis téléchargez et décompressez **Stripe.xcframework.zip**. 1. Faites glisser **StripeApplePay.xcframework** vers la section **Embedded Binaries (Fichiers binaires incorporés)** des paramètres **General (Général)** de votre projet Xcode. Veillez à sélectionner **Copy items if needed (Copier les éléments si nécessaire)**. 1. Répétez l’étape 2 pour tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripeApplePay/README.md#manual-linking). 1. À l’avenir, pour mettre à jour vers la version la plus récente de notre SDK, répétez les étapes 1 à 3. > Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-ios/releases) sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, [surveillez les versions](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) à partir du référentiel. Configurez le SDK avec votre [clé publiable](https://dashboard.stripe.com/test/apikeys) Stripe au démarrage de votre application. Cela lui permet d’envoyer des requêtes à l’API Stripe. #### 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 } } ``` > Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) lors de vos activités de test et de développement et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application. ## Demander un ID de marchand Apple Pour obtenir un ID de marchand Apple, [demandez un nouvel identifiant](https://developer.apple.com/account/resources/identifiers/add/merchant) sur le site Web Apple Developer. Renseignez le formulaire en indiquant une description et un identifiant. La description n’est destinée qu’à votre propre information et vous pourrez la modifier ultérieurement au besoin. En ce qui concerne l’identifiant, Stripe vous recommande d’utiliser le nom de votre application (par exemple, `merchant.com.{{YOUR_APP_NAME}}`). ## Créer un certificat Apple Pay Créez un certificat permettant à votre application de chiffrer les données de paiement. Accédez aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard, cliquez sur **Ajouter une nouvelle application** et suivez le guide. Téléchargez un fichier CSR (Certificate Signing Request) pour obtenir d’Apple un certificat sécurisé vous autorisant à utiliser Apple Pay. Un fichier CSR peut émettre exactement un certificat. Si vous changez d’ID de marchand Apple, vous devez accéder aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard pour obtenir un nouveau fichier CSR et un nouveau certificat. ## Réaliser une intégration avec Xcode Ajoutez la fonctionnalité Apple Pay à votre application. Dans Xcode, ouvrez vos paramètres de projet, cliquez sur l’onglet **Signature et fonctionnalités**, puis ajoutez **Apple Pay**. Vous serez peut-être alors invité(e) à vous connecter à votre compte développeur. Sélectionnez l’ID du marchand créé plus tôt. Il est désormais possible d’utiliser Apple Pay sur votre application. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Activez la fonctionnalité Apple Pay dans Xcode ## Vérifier si Apple Pay est pris en charge Avant d’afficher Apple Pay comme option de paiement dans votre application, déterminez si l’appareil de l’utilisateur prend en charge Apple Pay et s’il a ajouté une carte bancaire à son portefeuille : #### 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 } ``` ## Créer la requête de paiement Lorsque l’utilisateur appuie sur le bouton **Apple Pay**, appelez [StripeAPI paymentRequestWithMerchantIdentifier:country:currency:](https://stripe.dev/stripe-ios/stripe-payments/Classes/StripeAPI.html#/c:@M@StripeCore@objc\(cs\)StripeAPI\(cm\)paymentRequestWithMerchantIdentifier:country:currency:) pour créer une [PKPaymentRequest](https://developer.apple.com/documentation/passkit/pkpaymentrequest). Ensuite, configurez la `PKPaymentRequest` de sorte à afficher le nom de votre entreprise et le total de la transaction. Vous pouvez également collecter des informations comme les détails de facturation ou les données de livraison. Consultez la [documentation d’Apple](https://developer.apple.com/design/human-interface-guidelines/apple-pay/overview/checkout-and-payment/#customize-the-payment-sheet) pour obtenir des instructions sur la personnalisation de la demande de paiement. #### 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 } ``` ## Présenter le formulaire de paiement Créez une instance [STPApplePayContext](https://stripe.dev/stripe-ios/stripe-applepay/Classes/STPApplePayContext.html) avec le `PKPaymentRequest` et utilisez-le pour présenter la fiche Apple Pay : #### 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 exige que les actions de l’utilisateur déclenchent la fenêtre modale d’Apple Pay (par exemple, le fait de cliquer sur un bouton ou d’interagir avec le formulaire). Assurez-vous que votre code respecte les conditions suivantes : - Appelez directement le formulaire de paiement avec un événement d’activation de l’utilisateur. - Ajoutez le code du formulaire de paiement en haut ou à proximité du haut de votre gestionnaire d’événements d’actions de l’utilisateur, avant tout code asynchrone ou de longue durée. - Définissez une limite de temps raisonnable pour appeler `confirmPayment` après le l’action de l’utilisateur. ## Envoyer le paiement à Stripe ### Côté serveur Créez un endpoint qui génère un PaymentIntent avec un [montant](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) et une [devise](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency). Décidez toujours du montant à débiter côté serveur, un environnement sécurisé, à la différence du côté client. Cette précaution empêchera les éventuels clients malveillants de fixer leurs propres tarifs. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Côté client #### API Payment Intents Implémentez `applePayContext(_:didCreatePaymentMethod:paymentInformation:)` pour renvoyer la clé secrète du client du PaymentIntent récupéré auprès de l’endpoint ci-dessus ou générez une erreur si la requête échoue. Une fois que vous avez renvoyé la clé secrète du client, `STPApplePayContext` finalise le paiement, ferme la fiche Apple Pay et appelle `applePayContext(_:didCompleteWithStatus:error:)` avec l’état du paiement. Implémentez cette méthode pour présenter un reçu au client. #### 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() } } } ``` Enfin, [gérez les événements post-paiement](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios#ios-post-payment) pour effectuer des tâches telles que l’envoi d’un e-mail de confirmation de commande à votre client, l’enregistrement de la vente dans une base de données ou le lancement d’un processus d’expédition. #### API Payment Intents (confirmation côté serveur) Implémentez `applePayContext(_:didCreatePaymentMethod:paymentInformation:)` pour envoyer `paymentMethod.id` à votre serveur et créer et confirmer le PaymentIntent. Renvoyez la clé secrète du client du PaymentIntent renvoyée par votre serveur ou générez une erreur si la requête échoue. Une fois que vous avez renvoyé la clé secrète du client, `STPApplePayContext` finalise le paiement, ferme la fiche Apple Pay et appelle `applePayContext(_:didCompleteWithStatus:error:)` avec l’état du paiement. Implémentez cette méthode pour présenter un reçu au client. #### 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() } } } ``` ### Résolution des problèmes Si l’API Stripe génère des erreurs lors de la tentative de création de tokens, il est probable que votre certificat Apple Pay pose problème. Solution : générer un nouveau certificat et l’envoyer à Stripe, comme expliqué sur cette page. Veillez à utiliser une demande de signature de certificat (CSR) obtenue depuis votre Dashboard et non pas une CSR que vous avez générée vous-même. Xcode met souvent en cache de manière incorrecte d’anciens certificats. En plus de générer un nouveau certificat, Stripe vous recommande donc de créer aussi un nouvel ID de marchand Apple. Si vous recevez l’erreur : > Vous n’avez pas ajouté votre compte de marchand Apple à Stripe Il est probable que votre application envoie des données chiffrées avec une ancienne CSR/un ancien certificat (non générés par Stripe). Vérifiez que tout certificat généré par des CSR autres que Stripe est révoqué pour votre ID de marchand Apple. Si cette mesure ne résout pas le problème, supprimez l’ID de marchand dans votre compte Apple et recréez-le. Ensuite, créez un nouveau certificat basé sur la même CSR (fournie par Stripe) que celle utilisée précédemment. Vous n’avez pas besoin de charger ce nouveau certificat sur Stripe. Une fois ces opérations effectuées, désactivez les identifiants Apple Pay dans votre application et réactivez-les pour vous assurer qu’ils sont bien actualisés. ## App Clips Le module `StripeApplePay` est un SDK Stripe simplifié, optimisé pour être utilisé dans un [App Clip](https://developer.apple.com/app-clips/). Suivez [les étapes ci-dessus](https://docs.stripe.com/apple-pay.md?platform=ios#accept) pour ajouter le module `StripeApplePay` à la cible de votre App Clip. > Le module `StripeApplePay` n’est pris en charge que dans Swift. Les utilisateurs d’Objective-C doivent importer `STPApplePayContext` depuis le module `Stripe`. ### Migration depuis STPApplePayContext Si vous utilisez déjà `STPApplePayContext` et souhaitez passer au SDK Apple Pay simplifié, suivez ces étapes : 1. Dans les dépendances de la cible de votre App Clip, remplacez le module `Stripe` par le module `StripeApplePay`. 1. Dans votre code, remplacez `import Stripe` par `import StripeApplePay`. 1. Remplacez votre utilisation de `STPApplePayContextDelegate` par le nouveau protocole `ApplePayContextDelegate`. 1. Modifiez votre implémentation de `applePayContext(_:didCreatePaymentMethod:)` pour accepter un `StripeAPI.PaymentMethod`. 1. Modifiez votre implémentation de `applePayContext(_:didCompleteWith:error:)` de manière à accepter un `STPApplePayContext.PaymentStatus`. ### 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?) { // ... } } ``` ## Paiements récurrents Sur iOS 16 ou les versions ultérieures, vous pouvez adopter des [tokens de marchand](https://developer.apple.com/apple-pay/merchant-tokens/) en définissant les propriétés `recurringPaymentRequest` ou `automaticReloadPaymentRequest` sur `PKPaymentRequest`. Les paiements récurrents peuvent utiliser des moyens de paiement enregistrés pour les [transactions hors session](https://docs.stripe.com/apple-pay/apple-pay-recurring.md#set-up-off-session-payments) uniquement. #### 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] } } ``` Pour en savoir plus sur l’utilisation des paiements récurrents avec Apple Pay, consultez la [documentation d’Apple sur PassKit](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Suivi des commandes Pour adopter le [suivi des commandes](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) dans iOS 16 ou une version ultérieure, implémentez la fonction [applePayContext(context:willCompleteWithResult:handler:)](https://github.com/stripe/stripe-ios/blob/22.8.0/StripeApplePay/StripeApplePay/Source/ApplePayContext/STPApplePayContext.swift#L38) dans votre `ApplePayContextDelegate`. Stripe appelle votre implémentation une fois le paiement effectué, mais avant qu’iOS ne ferme la fiche Apple Pay. Dans votre implémentation : 1. Récupérez les détails de la commande terminée sur votre serveur. 1. Ajoutez ces informations au [PKPaymentAuthorizationResult](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationresult) fourni. 1. Appelez le gestionnaire d’exécution fourni dans la file d’attente principale. Pour en savoir plus sur le suivi des commandes, consultez la [documentation d’Apple sur les commandes Wallet](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]) } } } ``` # iOS React Native > This is a iOS React Native for when platform is react-native. View the full page at https://docs.stripe.com/apple-pay?platform=react-native. Vous pouvez utiliser le [ SDK Native React](https://github.com/stripe/stripe-react-native) de Stripe, pour accepter à la fois Apple Pay et les paiements par cartes de crédit traditionnelles. Avant de commencer, vous devez vous inscrire au programme [Apple Developer Program](https://developer.apple.com/programs/) et[configurer Stripe sur votre serveur et dans votre application](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=react-native#react-native-setup). Ensuite, suivez ces étapes : 1. [Demander un ID de marchand Apple](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Créer un certificat Apple Pay](https://docs.stripe.com/apple-pay.md#csr) 1. [Réaliser une intégration avec Xcode](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Configurer votre ID de marchand Apple dans StripeProvider](https://docs.stripe.com/apple-pay.md#set-merchantid) 1. [Vérifier si Apple Pay est pris en charge](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Présenter le formulaire de paiement](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Envoyer le paiement à Stripe](https://docs.stripe.com/apple-pay.md#handle-payment) > Si vous utilisez React Native et Expo, Expo Go ne prend pas en charge Apple Pay. Pour utiliser Apple Pay avec Expo, vous devez créer une [version de développement](https://docs.expo.dev/get-started/set-up-your-environment/?mode=development-build&platform=ios). Si vous avez déjà un projet Expo Go, vous pouvez le [migrer vers une version de développement](https://docs.expo.dev/develop/development-builds/expo-go-to-dev-build/). ## Demander un ID de marchand Apple Pour obtenir un ID de marchand Apple, [demandez un nouvel identifiant](https://developer.apple.com/account/resources/identifiers/add/merchant) sur le site Web Apple Developer. Renseignez le formulaire en indiquant une description et un identifiant. La description n’est destinée qu’à votre propre information et vous pourrez la modifier ultérieurement au besoin. En ce qui concerne l’identifiant, Stripe vous recommande d’utiliser le nom de votre application (par exemple, `merchant.com.{{YOUR_APP_NAME}}`). ## Créer un certificat Apple Pay Créez un certificat permettant à votre application de chiffrer les données de paiement. Accédez aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard, cliquez sur **Ajouter une nouvelle application** et suivez le guide. Téléchargez un fichier CSR (Certificate Signing Request) pour obtenir d’Apple un certificat sécurisé vous autorisant à utiliser Apple Pay. Un fichier CSR peut émettre exactement un certificat. Si vous changez d’ID de marchand Apple, vous devez accéder aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard pour obtenir un nouveau fichier CSR et un nouveau certificat. ## Réaliser une intégration avec Xcode Ajoutez la fonctionnalité Apple Pay à votre application. Dans Xcode, ouvrez vos paramètres de projet, cliquez sur l’onglet **Signature et fonctionnalités**, puis ajoutez **Apple Pay**. Vous serez peut-être alors invité(e) à vous connecter à votre compte développeur. Sélectionnez l’ID du marchand créé plus tôt. Il est désormais possible d’utiliser Apple Pay sur votre application. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Activez la fonctionnalité Apple Pay dans Xcode ## Configurer votre ID de marchand Apple dans StripeProvider Dans le composant `StripeProvider`, spécifiez l’ID de marchand Apple avec lequel vous venez de vous inscrire : ```jsx import { StripeProvider } from '@stripe/stripe-react-native'; function App() { return ( {/* Your app code here */} ); } ``` ## Vérifier si Apple Pay est pris en charge Avant d’afficher Apple Pay comme option de paiement dans votre application, déterminez si l’appareil de l’utilisateur prend en charge Apple Pay et s’il a ajouté une carte bancaire à son portefeuille : ```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 && ( )} ); } ``` ## Créer le PaymentIntent ### Côté serveur Créez un endpoint qui génère un PaymentIntent avec un [montant](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) et une [devise](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency). Décidez toujours du montant à débiter côté serveur, un environnement sécurisé, à la différence du côté client. Cette précaution empêchera les éventuels clients malveillants de fixer leurs propres tarifs. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Côté client Créez une méthode qui demande un PaymentIntent depuis votre serveur : ```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; }; // ... } ``` ### Résolution des problèmes Si l’API Stripe génère des erreurs lors de la tentative de création de tokens, il est probable que votre certificat Apple Pay pose problème. Solution : générer un nouveau certificat et l’envoyer à Stripe, comme expliqué sur cette page. Veillez à utiliser une demande de signature de certificat (CSR) obtenue depuis votre Dashboard et non pas une CSR que vous avez générée vous-même. Xcode met souvent en cache de manière incorrecte d’anciens certificats. En plus de générer un nouveau certificat, Stripe vous recommande donc de créer aussi un nouvel ID de marchand Apple. Si vous recevez l’erreur : > Vous n’avez pas ajouté votre compte de marchand Apple à Stripe Il est probable que votre application envoie des données chiffrées avec une ancienne CSR/un ancien certificat (non générés par Stripe). Vérifiez que tout certificat généré par des CSR autres que Stripe est révoqué pour votre ID de marchand Apple. Si cette mesure ne résout pas le problème, supprimez l’ID de marchand dans votre compte Apple et recréez-le. Ensuite, créez un nouveau certificat basé sur la même CSR (fournie par Stripe) que celle utilisée précédemment. Vous n’avez pas besoin de charger ce nouveau certificat sur Stripe. Une fois ces opérations effectuées, désactivez les identifiants Apple Pay dans votre application et réactivez-les pour vous assurer qu’ils sont bien actualisés. ## Présenter le formulaire de paiement In your [`PlatformPayButton`’s](https://stripe.dev/stripe-react-native/api-reference/index.html#PlatformPayButton) `onPress` prop, call `confirmPlatformPayPayment` to open an Apple Pay sheet. To display the customer’s cart items on the payment sheet, pass the items as an argument. The final item must represent your company and the total; it appears in the sheet with the word “Pay” prepended (for example, “Pay iHats, Inc. 50 USD”). > Dans votre code qui gère l’action du client, n’incluez aucune action complexe ou asynchrone avant d’afficher le formulaire de paiement. Si l’action de l’utilisateur n’invoque pas directement le formulaire de paiement, Apple Pay renvoie une erreur. ```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: Créer un moyen de paiement [Côté client] Si la confirmation du paiement a lieu sur votre serveur, vous pouvez utiliser Apple Pay pour ne collecter qu’un objet `PaymentMethod`, sans confirmer le paiement. Pour ce faire, appelez la méthode `createPlatformPayPaymentMethod` : ```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: Paiements récurrents [Côté client] Sur iOS 16 ou les versions ultérieures, vous pouvez adopter des [tokens de marchand](https://developer.apple.com/apple-pay/merchant-tokens/) en définissant le champ `request` dans `confirmPlatformPayPayment()` et et l’objet de paramètres `applePay` de `confirmPlatformPaySetupIntent`. ```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', }, }, }, } ); ``` Pour en savoir plus sur l’utilisation des paiements récurrents avec Apple Pay, consultez la [documentation d’Apple sur PassKit](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Optional: Suivi des commandes [Côté client] Pour utiliser le [suivi de commande](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) sur iOS 16 ou les versions ultérieures, utilisez le rappel `setOrderTracking` pour le composant `PlatformPayButton`. Dans votre implémentation : 1. Récupérez les détails de la commande terminée sur votre serveur. 1. Appelez le gestionnaire d’exécution fourni dans `setOrderTracking` avec les résultats de votre serveur. ```jsx { const { orderIdentifier, orderType, authToken, webServiceUrl } = fetchOrderDetailsFromMyBackend(); completion(orderIdentifier, orderType, authToken, webServiceUrl); }} /> ``` Pour en savoir plus sur le suivi des commandes, consultez la [documentation d’Apple sur les commandes Wallet](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. Vous pouvez accepter les paiements Apple Pay sur le web à l’aide de [Checkout](https://docs.stripe.com/payments/checkout.md) ou [Elements](https://docs.stripe.com/payments/elements.md). Aucune configuration supplémentaire n’est requise pour utiliser Apple Pay avec Checkout. Pour utiliser Elements, consultez les guides [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) ou [Accepter un paiement](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=checkout) pour plus d’informations sur la façon d’ajouter Apple Pay sur votre site. ### Considérations relatives à l’intégration Web - **Utilisation d’un iframe avec [Elements](https://docs.stripe.com/payments/elements.md)** : lors de l’utilisation d’un iframe, son origine doit correspondre à l’origine de niveau supérieur (sauf pour Safari 17 lorsque vous précisez l’attribut `allow="payment"`). Deux pages ont la même origine si le protocole, l’hôte (nom de domaine complet) et le port (le cas échéant) sont les mêmes pour les deux pages. - **Domaine de niveau supérieur et domaine iframe** : si le domaine de niveau supérieur diffère du domaine iframe, le domaine de niveau supérieur et le domaine source de l’iframe doivent être des [domaines de moyen de paiement enregistré](https://docs.stripe.com/payments/payment-methods/pmd-registration.md) sur le compte associé. - **Intégrations Stripe.js v2 existantes** : passez à Checkout ou Elements dès que possible. - **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. L’utilisation d’Apple Pay sur le Web est régie par les [Conditions d’utilisation du service Apple Pay sur le Web](https://stripe.com/apple-pay/legal). ### Enregistrer votre domaine auprès d’Apple Pay Pour utiliser Apple Pay, vous devez enregistrer auprès d’Apple tous vos domaines Web présentant un bouton Apple Pay. Cela inclut les domaines principaux (p. ex., **stripe.com**) et les sous-domaines (p. ex., **shop.stripe.com**), en mode production et en mode test. > #### Sous-domaines > > `www` est un sous-domaine (par exemple, **www.stripe.com**) que vous devez également enregistrer. Stripe gère pour vous la validation des marchands Apple, y compris la création d’un identifiant de marchand Apple et d’une demande de signature de certificat. Au lieu de suivre le processus de validation du marchand décrit dans la documentation Apple Pay, effectuez plutôt l’étape suivante : 1. Demandez à Stripe d’enregistrer votre domaine auprès d’Apple. Vous pouvez le faire sur la page du Dashboard où figurent les [domaines des moyens de paiement](https://dashboard.stripe.com/settings/payment_method_domains), *ou* en utilisant l’API avec votre clé secrète réelle, comme indiqué ci-dessous. N’enregistrez pas votre domaine plus d’une fois par compte. ```curl curl https://api.stripe.com/v1/payment_method_domains \ -u "<>:" \ -d "domain_name=example.com" ``` Lorsque vous utilisez des [paiements directs](https://docs.stripe.com/connect/direct-charges.md) avec *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), vous devez configurer le domaine pour chaque compte connecté à l’aide de l’API. Cette condition n’est pas requise pour les comptes connectés utilisant d’autres types de frais. Une fois vos domaines enregistrés, vous pouvez effectuer des paiements sur votre site à l’aide de vos clés API de production. ## Paiements récurrents 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. ## Tester Apple Pay Pour tester Apple Pay, vous devez utiliser un vrai numéro de carte et vos clés [API de test](https://docs.stripe.com/keys.md). Stripe reconnaît que vous êtes en mode test et renvoie un token de carte de test que vous pouvez utiliser afin d’effectuer des paiements de test sur une carte active sans la débiter. Vous ne pouvez pas enregistrer les [cartes de test Stripe](https://docs.stripe.com/testing.md#use-test-cards) ou les [cartes de test Apple](https://developer.apple.com/apple-pay/sandbox-testing/) dans les wallets Apple Pay pour tester Apple Pay. # Web > This is a Web for when platform is web. View the full page at https://docs.stripe.com/apple-pay?platform=web. Si vous ne répondez pas aux exigences relatives à l’appareil et à l’intégration, Stripe n’affiche pas Apple Pay comme option de paiement. Utilisez notre [page de test](https://docs.stripe.com/testing/wallets.md) pour vous aider à résoudre le problème. ## See also - [Intégration iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [Apple Pay sur le Web](https://docs.stripe.com/elements/express-checkout-element.md) - [Bonnes pratiques pour Apple Pay](https://docs.stripe.com/apple-pay/best-practices.md)