# Configurer de futurs paiements Revolut Pay Découvrez comment enregistrer les informations de Revolut Pay et facturer vos clients ultérieurement. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/revolut-pay/set-up-future-payments?payment-ui=checkout. Ce guide explique comment enregistrer les informations de paiement d’un compte Revolut Pay à l’aide de [Checkout](https://docs.stripe.com/payments/checkout.md), notre page de paiement intégralement hébergée. Découvrez comment [configurer un abonnement avec Revolut Pay](https://docs.stripe.com/billing/subscriptions/revolut-pay.md) pour créer des paiements récurrents après avoir enregistré un moyen de paiement dans Checkout. ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### 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' ``` ## Obtenir l'autorisation d'enregistrer un moyen de paiement [Côté serveur] Pour enregistrer le moyen de paiement de votre client en vue de futurs paiements, vous devez obtenir son autorisation. En établissant au préalable un contrat (parfois nommé mandat), vous pouvez enregistrer les informations de paiement de votre client et éventuellement le débiter lorsqu’il n’utilise pas votre site Web ou votre application de façon active. Sur votre application ou votre site Web, indiquez la façon dont vous comptez enregistrer les informations du moyen de paiement de votre client, puis invitez le client à accepter ces dispositions. Si vous prévoyez de débiter votre client alors qu’il est hors ligne, veillez à ce que vos conditions couvrent également les éléments suivants : - Le consentement du client vous autorisant à déclencher un paiement ou une série de paiements en son nom pour les transactions spécifiées - Fréquence prévue des paiements (à savoir, paiement ponctuel ou paiements récurrents) et calendrier de paiements - La façon dont vous déterminez le montant du paiement - Votre politique d’annulation, si vous configurez le moyen de paiement dans le cadre d’un abonnement Veillez à conserver une trace écrite de l’acceptation de ces conditions par votre client. ## Créer ou récupérer un Customer [Côté serveur] Pour réutiliser un moyen de paiement Revolut Pay pour des paiements ultérieurs, rattachez-le à un *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un [objet Customer](https://docs.stripe.com/api/customers.md) lorsque votre client crée un compte auprès de votre entreprise et associez l’ID de cet objet Customer à votre propre représentation interne du client. Vous pouvez également créer un nouveau client juste avant d’enregistrer un moyen de paiement en vue de paiements ultérieurs. Créez ou récupérez un Customer afin de l’associer à ce paiement. Pour créer un nouveau Customer, ajoutez le code ci-après sur votre serveur : ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Créer une session Checkout [Côté serveur] Votre client doit vous autoriser à utiliser son compte Revolut pour de futurs paiements via Stripe Checkout. Cela vous permet d’accepter les paiements Revolut. Ajoutez sur votre site web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md). ```html Checkout
``` Créez une session Checkout en mode `setup` pour recueillir les informations requises. Après avoir créé la session Checkout, redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse. #### Ruby ```ruby client.v1.checkout.sessions.create({ mode: 'setup',payment_method_types: ['card', 'revolut_pay'], customer: customer.id, success_url: 'https://example.com/success', }) ``` ## Tester votre intégration Sélectionnez Revolut Pay comme moyen de paiement, puis cliquez sur **Continuer vers Revolut Pay**. Vous pouvez tester le bon fonctionnement de la configuration en authentifiant le SetupIntent sur la page de redirection. Le SetupIntent passe de requires_action à succeeded. # API directe > This is a API directe for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/revolut-pay/set-up-future-payments?payment-ui=direct-api. Vous pouvez utiliser l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter en avance les informations relatives au moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Utilisez cette méthode pour : - Enregistrement des moyens de paiement dans un portefeuille pour faciliter les futurs achats - Encaissement des frais supplémentaires après avoir fourni un service - [Démarrer une période d’essai gratuite dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/trials.md) Pour collecter les informations du moyen de paiement et débiter immédiatement le moyen de paiement enregistré, utilisez l’[API Payment Intents](https://docs.stripe.com/payments/payment-intents.md). Tout paiement Revolut on-session, lorsque le client est activement dans votre flux de paiement, redirige vers l’application Revolut pour confirmation, même si un moyen de paiement enregistré est utilisé. Découvrez comment [configurer un abonnement avec Revolut Pay](https://docs.stripe.com/billing/subscriptions/revolut-pay.md) pour créer des paiements récurrents après avoir enregistré un moyen de paiement dans Checkout. ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### 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' ``` ## Obtenir l'autorisation d'enregistrer un moyen de paiement [Côté serveur] Pour enregistrer le moyen de paiement de votre client en vue de futurs paiements, vous devez obtenir son autorisation. En établissant au préalable un contrat (parfois nommé mandat), vous pouvez enregistrer les informations de paiement de votre client et éventuellement le débiter lorsqu’il n’utilise pas votre site Web ou votre application de façon active. Sur votre application ou votre site Web, indiquez la façon dont vous comptez enregistrer les informations du moyen de paiement de votre client, puis invitez le client à accepter ces dispositions. Si vous prévoyez de débiter votre client alors qu’il est hors ligne, veillez à ce que vos conditions couvrent également les éléments suivants : - Le consentement du client vous autorisant à déclencher un paiement ou une série de paiements en son nom pour les transactions spécifiées - Fréquence prévue des paiements (à savoir, paiement ponctuel ou paiements récurrents) et calendrier de paiements - La façon dont vous déterminez le montant du paiement - Votre politique d’annulation, si vous configurez le moyen de paiement dans le cadre d’un abonnement Veillez à conserver une trace écrite de l’acceptation de ces conditions par votre client. ## Créer ou récupérer un Customer [Côté serveur] Pour enregistrer un moyen de paiement Revolut Pay pour des paiements ultérieurs, rattachez-le à un *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer une fois que votre client a créé un compte auprès de votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne du client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement pour les conserver. Si votre client n’a pas créé de compte, vous pouvez toujours créer un objet Customer et l’associer à votre représentation interne de ce compte client plus tard. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Présenter les conditions d'autorisation sur votre formulaire de paiement [Côté client] Enregistrez les identifiants Revolut Pay de votre client pour débiter son compte en vue de futurs paiements *hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information). Votre formulaire de paiement personnalisé doit présenter un avis d’autorisation écrit avant la confirmation du [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ou du [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Il vous suffit d’afficher l’autorisation la première fois que vous enregistrez les identifiants Revolut Pay de votre client. Nous vous recommandons d’utiliser le texte suivant pour votre formulaire de paiement personnalisé : > En continuant, vous autorisez Rocket Rides à débiter votre compte Revolut Pay pour ce paiement et les paiements ultérieurs conformément aux conditions de Rocket Rides, jusqu’à la révocation de cette autorisation. #### Enregistrer un moyen de paiement avec l'API Setup Intents Utilisez l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter à l’avance les données d’un moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Cette méthode est utile pour : - Enregistrement des moyens de paiement de vos clients afin que leurs achats ultérieurs ne nécessitent pas d’authentification - Mise en place d’une période d’essai gratuit pour un *abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) ## Créer un SetupIntent et enregistrer un moyen de paiement [Côté serveur] Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement d’un client en vue de futurs paiements. Le SetupIntent suit les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `revolut_pay`, indiquez l’ID du client et configurez [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) ou `usage=on_session`. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d "payment_method_data[type]=revolut_pay" \ -d usage=off_session \ -d customer={{CUSTOMER_ID}} ``` ### Récupérer la clé secrète du client Le SetupIntent contient une *clé secrète* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client. #### Application monopage Récupérez la clé secrète du client à partir d’un endpoint sur votre serveur, à l’aide de la fonction `fetch` du navigateur. Cette approche est recommandée si votre côté client est une application d’une seule page, en particulier si elle repose sur un framework front-end moderne tel que React. Créez l’endpoint de serveur qui gère la clé secrète du client : #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the SetupIntent {client_secret: intent.client_secret}.to_json end ``` Récupérez ensuite la clé secrète du client à l’aide JavaScript côté client : ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Rendu côté serveur Transmettez la clé secrète à votre client depuis votre serveur. Cette approche fonctionne mieux si votre application génère du contenu statique sur le serveur avant de l’envoyer sur le navigateur. Ajoutez le [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) à votre formulaire de paiement. Dans votre code côté serveur, récupérez la clé secrète du client à partir du SetupIntent : #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the SetupIntent erb :checkout end ``` Ensuite, enregistrez Revolut Pay côté client en utilisant [Stripe.js](https://docs.stripe.com/payments/elements.md). Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. ```html Checkout ``` Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement : ```javascript // Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` Utilisez `stripe.confirmRevolutPaySetup` pour confirmer le SetupIntent côté client, avec une [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) et des [mandate_data](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data). Utilisez l’adresse [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) pour rediriger les clients vers une page spécifique une fois le SetupIntent réussi. ```javascript // Redirects away from the client const {error} = await stripe.confirmRevolutPaySetup( '{{SETUP_INTENT_CLIENT_SECRET}}', { return_url: 'https://example.com/setup/complete', mandate_data: { customer_acceptance: { type: 'online', online: { infer_from_client: true } } }, } ); if (error) { // Inform the customer that there was an error. } ``` ## Optional: Gérer la redirection Revolut Pay manuellement Stripe.js vous aide à ajouter d’autres moyens de paiement à votre intégration. Cependant, vous pouvez rediriger vos clients manuellement vers votre serveur. 1. Créez et *confirmez* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) un PaymentIntent de type `revolut_pay`. En spécifiant `payment_method_data`, vous créez un PaymentMethod qui est utilisé immédiatement avec le PaymentIntent. Vous devez également fournir dans le champ `return_url` l’URL vers laquelle le client est redirigé une fois qu’il a finalisé son paiement. Vous pouvez fournir vos propres paramètres de requête dans cette URL. Ces paramètres seront inclus dans l’URL finale à l’issue du flux de redirection. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=gbp \ -d "payment_method_types[]=revolut_pay" \ -d "payment_method_data[type]=revolut_pay" \ --data-urlencode "return_url=https://example.com/checkout/complete" \ -d confirm=true ``` 1. Vérifiez que le `PaymentIntent` a l’état `requires_action` et que le type de `next_action` est `redirect_to_url`. #### Json ```json {"status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/checkout/complete" } }, "id": "pi_1G1sgdKi6xqXeNtkldRRE6HT", "object": "payment_intent", ... } ``` 1. Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. Cet exemple de code fourni ici n’a qu’une valeur illustrative : la méthode de redirection peut différer sur votre framework Web. #### Ruby ```ruby if payment_intent.status == 'requires_action' && payment_intent.next_action.type == 'redirect_to_url' url = payment_intent.next_action.redirect_to_url.url redirect(url) end ``` Le client est redirigé vers l’URL `return_url` une fois qu’il a effectué le paiement. Les paramètres de la requête d’URL `payment_intent` et `payment_intent_client_secret` sont inclus avec tous vos propres paramètres. Stripe recommande de configurer un [endpoint de webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour configurer l’état d’un paiement par voie programmatique. #### Enregistrer un moyen de paiement avec l'API Payment Intents Utilisez l’[API Payment Intents](https://docs.stripe.com/payments/payment-intents.md) pour collecter les données du moyen de paiement au moment du règlement et enregistrer le moyen de paiement d’un client. Cette méthode est utile pour : - Enregistrement des moyens de paiement de vos clients afin que leurs achats ultérieurs ne nécessitent pas d’authentification - Mise en place d’une période d’essai gratuit pour un *abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) ## Créer un PaymentIntent et enregistrer un moyen de paiement [Côté serveur] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) est un objet qui représente votre intention de débiter un client. Si vous ne fournissez pas de moyen de paiement enregistré avec la requête PaymentIntent, nous en créons un et l’associons à un client avant de confirmer le PaymentIntent. Créez un PaymentIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) défini sur `revolut_pay` et indiquez l’ID du client, `confirm=true`, [setup_future_usage=off_session](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) avec un [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) et un [mandate_data](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-mandate_data) facultatif. Utilisez le [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) pour rediriger les clients vers une page spécifique une fois que le PaymentIntent aboutit. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d "payment_method_data[type]=revolut_pay" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \ -d "mandate_data[customer_acceptance][online][user_agent]=device" \ --data-urlencode "return_url=https://www.stripe.com" \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d amount=1000 \ -d currency=gbp \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true ``` Le PaymentIntent renvoyé contient une *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)), qui est utilisée côté client pour finaliser le paiement de manière sécurisée, sans avoir à transmettre la totalité de l’objet PaymentIntent. Transmettez la clé secrète du client à l’application côté client pour poursuivre le processus de paiement. ## Créer un PaymentIntent à l'aide d'un moyen de paiement enregistré [Côté serveur] Après avoir créé un objet [PaymentMethod](https://docs.stripe.com/api/payment_methods.md), vous pouvez accepter les futurs paiements Revolut Pay en créant et en confirmant un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Lors de la confirmation d’un PaymentIntent, utilisez le même ID de moyen de paiement que celui de l’objet SetupIntent ou PaymentIntent précédent. La valeur `off_session` doit également être définie sur « true » si le client ne se trouve pas dans un tunnel de paiement pour ce PaymentIntent. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d amount=1000 \ -d currency=gbp \ -d customer={{CUSTOMER_ID}} \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true \ -d off_session=true ``` ## Détacher un moyen de paiement réutilisable Pour désactiver un moyen de paiement réutilisable, votre serveur peut appeler l’API [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md). Stripe envoie à la fois un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) et un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). Vous pouvez vous abonner à des événements [webhook](https://docs.stripe.com/webhooks.md) pour recevoir des notifications. # iOS > This is a iOS for when payment-ui is mobile and platform is ios. View the full page at https://docs.stripe.com/payments/revolut-pay/set-up-future-payments?payment-ui=mobile&platform=ios. Vous pouvez utiliser l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter en avance les informations relatives au moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Utilisez cette méthode pour : - Enregistrer des moyens de paiement dans un portefeuille pour faciliter les futurs achats - Encaisser des frais supplémentaires après avoir fourni un service - [Démarrer une période d’essai gratuite dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/trials.md) Ce guide explique comment enregistrer dans un premier temps les informations du moyen de paiement à l’aide de l’API Setup Intents, puis comment utiliser l’API Payment Intents pour débiter le moyen de paiement enregistré ultérieurement. Tout paiement Revolut on-session, lorsque le client est activement dans votre flux de paiement, redirige vers l’application Revolut pour confirmation, même si un moyen de paiement enregistré est utilisé. ## Configurer Stripe [Côté serveur] [Côté client] Tout d’abord, il vous faut un compte Stripe. [Inscrivez-vous](https://dashboard.stripe.com/register). ### Côté serveur Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. Utilisez les 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 **StripePaymentsUI** à 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 'StripePaymentsUI' ``` 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 StripePaymentsUI ``` #### 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/StripePaymentsUI/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 **StripePaymentsUI.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/StripePaymentsUI/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 UIKitimportStripePaymentsUI @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. ## Créer ou récupérer un Customer [Côté serveur] Pour enregistrer un moyen de paiement Revolut Pay en vue de paiements ultérieurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise. Associez l’ID de l’objet Customer à votre propre représentation interne d’un client. Vous pouvez également créer l’objet Customer juste avant d’enregistrer un moyen de paiement pour votre client pour ses paiements ultérieurs. Ajoutez le code suivant à votre serveur pour créer un nouveau client. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Créer un SetupIntent [Côté serveur] Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement d’un client en vue de futurs paiements. Le SetupIntent suit les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `revolut_pay`, indiquez l’ID du client et configurez [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) ou `usage=on_session`. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d usage=off_session \ -d customer={{CUSTOMER_ID}} ``` ## Présenter les conditions d'autorisation sur votre formulaire de paiement [Côté client] Enregistrez les identifiants Revolut Pay de votre client pour débiter son compte en vue de futurs paiements *hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information). Votre formulaire de paiement personnalisé doit présenter un avis d’autorisation écrit avant la confirmation du [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ou du [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Il vous suffit d’afficher l’autorisation la première fois que vous enregistrez les identifiants Revolut Pay de votre client. Nous vous recommandons d’utiliser le texte suivant pour votre formulaire de paiement personnalisé : > En continuant, vous autorisez Rocket Rides à débiter votre compte Revolut Pay pour ce paiement et les paiements futurs, conformément aux conditions de Rocket Rides, jusqu’à la révocation de cette autorisation. ## Collecter les informations du moyen de paiement [Côté client] #### Swift ```swift // Revolut Pay does not require additional parameters so we only need to pass the initialized // STPPaymentMethodRevolotPayParams instance to STPPaymentMethodParams let revolutPay = STPPaymentMethodRevolutPayParams() let paymentMethodParams = STPPaymentMethodParams(revolutPay: revolutPay, billingDetails: nil, metadata: nil) ``` ## Envoyer le paiement à Stripe [Côté client] Récupérez la clé secrète du client auprès du SetupIntent que vous avez créé, puis appelez le [STPPaymentHandler confirmSetupIntent](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentHandler.html#/c:objc\(cs\)STPPaymentHandler\(im\)confirmSetupIntent:withAuthenticationContext:completion:). Une vue Web s’affiche pour permettre au client de finaliser le paiement dans Revolut Pay. Une fois l’opération terminée, le bloc de finalisation est appelé avec le résultat du paiement. #### Swift ```swift let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret) setupIntentParams.paymentMethodParams = paymentMethodParams setupIntentParams.returnURL = "payments-example://stripe-redirect" STPPaymentHandler.shared().confirmSetupIntent(withParams: setupIntentParams, authenticationContext: self) { (handlerStatus, setupIntent, error) in switch handlerStatus { case .succeeded: // Setup succeeded case .canceled: // Setup was canceled case .failed: // Setup failed @unknown default: fatalError() } } ``` ## Créer un PaymentIntent à l'aide d'un moyen de paiement enregistré [Côté serveur] Après avoir créé un objet [PaymentMethod](https://docs.stripe.com/api/payment_methods.md), vous pouvez accepter les futurs paiements Revolut Pay en créant et en confirmant un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Lors de la confirmation d’un PaymentIntent, utilisez le même ID de moyen de paiement que celui de l’objet SetupIntent ou PaymentIntent précédent. La valeur `off_session` doit également être définie sur « true » si le client ne se trouve pas dans un tunnel de paiement pour ce PaymentIntent. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d amount=1000 \ -d currency=gbp \ -d customer={{CUSTOMER_ID}} \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true \ -d off_session=true ``` ## Gérer la révocation des moyens de paiement réutilisables Pour désactiver un moyen de paiement réutilisable, votre serveur peut appeler l’API [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md). Stripe envoie à la fois un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) et un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). Vous pouvez vous abonner à des [événements webhook](https://docs.stripe.com/webhooks.md) pour recevoir des notifications. # Android > This is a Android for when payment-ui is mobile and platform is android. View the full page at https://docs.stripe.com/payments/revolut-pay/set-up-future-payments?payment-ui=mobile&platform=android. Vous pouvez utiliser l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter en avance les informations relatives au moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Utilisez cette méthode pour : - Enregistrer des moyens de paiement dans un portefeuille pour faciliter les futurs achats - Encaisser des frais supplémentaires après avoir fourni un service - [Démarrer une période d’essai gratuite dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/trials.md) Ce guide explique comment enregistrer dans un premier temps les informations du moyen de paiement à l’aide de l’API Setup Intents, puis comment utiliser l’API Payment Intents pour débiter le moyen de paiement enregistré ultérieurement. Tout paiement Revolut on-session, lorsque le client est activement dans votre flux de paiement, redirige vers l’application Revolut pour confirmation, même si un moyen de paiement enregistré est utilisé. ## Configurer Stripe [Côté serveur] [Côté client] Tout d’abord, il vous faut un compte Stripe. [Inscrivez-vous](https://dashboard.stripe.com/register). ### Côté serveur Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. Utilisez les 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 Stripe Android](https://github.com/stripe/stripe-android) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-android/). Pour installer le SDK, ajoutez `stripe-android` au bloc `dependencies` de votre fichier [app/build.gradle](https://developer.android.com/studio/build/dependencies) : #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.3.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.3.0") } ``` > 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-android/releases) sur GitHub. Pour savoir quand une nouvelle version est disponible, [surveillez les versions du référentiel](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Configurez le SDK avec votre [clé publique](https://dashboard.stripe.com/apikeys) Stripe de façon à ce qu’il puisse envoyer des requêtes à l’API Stripe, par exemple à la sous-classe `Application` : #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > 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. Les échantillons de code de Stripe utilisent également [OkHttp](https://github.com/square/okhttp) et [GSON](https://github.com/google/gson) pour envoyer des requêtes HTTP à un serveur. ## Créer ou récupérer un Customer [Côté serveur] Pour enregistrer un moyen de paiement Revolut Pay en vue de paiements ultérieurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise. Associez l’ID de l’objet Customer à votre propre représentation interne d’un client. Vous pouvez également créer l’objet Customer juste avant d’enregistrer un moyen de paiement pour votre client pour ses paiements ultérieurs. Ajoutez le code suivant à votre serveur pour créer un nouveau client. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Créer un SetupIntent [Côté serveur] Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement d’un client en vue de futurs paiements. Le SetupIntent suit les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `revolut_pay`, indiquez l’ID du client et configurez [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) ou `usage=on_session`. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d usage=off_session \ -d customer={{CUSTOMER_ID}} ``` ## Présenter les conditions d'autorisation sur votre formulaire de paiement [Côté client] Enregistrez les identifiants Revolut Pay de votre client pour débiter son compte en vue de futurs paiements *hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information). Votre formulaire de paiement personnalisé doit présenter un avis d’autorisation écrit avant la confirmation du [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ou du [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Il vous suffit d’afficher l’autorisation la première fois que vous enregistrez les identifiants Revolut Pay de votre client. Nous vous recommandons d’utiliser le texte suivant pour votre formulaire de paiement personnalisé : > En continuant, vous autorisez Rocket Rides à débiter votre compte Revolut Pay pour ce paiement et les paiements futurs, conformément aux conditions de Rocket Rides, jusqu’à la révocation de cette autorisation. ## Envoyer les informations du moyen de paiement à Stripe [Côté client] Récupérez la clé secrète du client auprès du SetupIntent que vous avez créé et appelez la méthode [confirm de PaymentLauncher](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/confirm.html). Une page Web s’affiche dans laquelle le client peut finaliser la configuration avec Revolut Pay. Une fois l’opération terminée, le `PaymentResultCallback` fourni est appelé avec le résultat du paiement. #### Kotlin ```kotlin class RevolutPaySetupActivity : AppCompatActivity() { // ... private val paymentLauncher: PaymentLauncher by lazy { val paymentConfiguration = PaymentConfiguration.getInstance(applicationContext) PaymentLauncher.create( activity = this, publishableKey = paymentConfiguration.publishableKey, stripeAccountId = paymentConfiguration.stripeAccountId, callback = ::onPaymentResult, ) } override fun onCreate(savedInstanceState: Bundle?) { // … startCheckout() } private fun startCheckout() { // Create a SetupIntent on your backend and return the client_secret here val setupIntentClientSecret = // … val revolutPayParams = PaymentMethodCreateParams.createRevolutPay() val confirmParams = ConfirmSetupIntentParams.create( paymentMethodCreateParams = revolutPayParams, clientSecret = setupIntentClientSecret, // Add a mandate ID or MandateDataParams… ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { // Handle the setup result… } } ``` ## Créer un PaymentIntent à l'aide d'un moyen de paiement enregistré [Côté serveur] Après avoir créé un objet [PaymentMethod](https://docs.stripe.com/api/payment_methods.md), vous pouvez accepter les futurs paiements Revolut Pay en créant et en confirmant un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Lors de la confirmation d’un PaymentIntent, utilisez le même ID de moyen de paiement que celui de l’objet SetupIntent ou PaymentIntent précédent. La valeur `off_session` doit également être définie sur « true » si le client ne se trouve pas dans un tunnel de paiement pour ce PaymentIntent. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=revolut_pay" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d amount=1000 \ -d currency=gbp \ -d customer={{CUSTOMER_ID}} \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true \ -d off_session=true ``` ## Gérer la révocation des moyens de paiement réutilisables Pour désactiver un moyen de paiement réutilisable, votre serveur peut appeler l’API [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md). Stripe envoie à la fois un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) et un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). Vous pouvez vous abonner à des [événements webhook](https://docs.stripe.com/webhooks.md) pour recevoir des notifications.