# Enregistrer directement les informations sans débiter le client Collecter les informations d'une carte présente et les sauvegarder pour une utilisation en ligne. > #### Prise en charge de l’API Accounts v2 > > Le SDK Terminal ne prend pas en charge les *Accounts configurés par le client* (Account configurations represent role-based functionality that you can enable for accounts, such as merchant, customer, or recipient). Il prend uniquement en charge les objets `Customer`. Vous pouvez utiliser Terminal avec l’API Accounts v2 si tout votre code client se trouve côté serveur et n’utilise pas le SDK. Utilisez les [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) pour collecter les informations d’une carte ou d’un wallet mobile sans débiter la carte. Un `SetupIntent` ne peut pas enregistrer directement un *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) `card_present`, mais dans la plupart des cas, vous pouvez créer un `PaymentMethod` `generated_card` réutilisable qui représente la même carte. Du point de vue du client, il s’agit du même moyen de paiement. > Tous les paiements effectués à l’aide du PaymentMethod `generated_card` sont des transactions sans présentation de la carte (CNP), et les fonctionnalités disponibles pour les transactions avec la présentation de la carte (telles que les *le transferts de responsabilité* (With some 3D Secure transactions, the liability for fraudulent chargebacks (stolen or counterfeit cards) shifts from you to the card issuer) et les [tarifs](https://stripe.com/terminal#pricing)) ne s’appliquent pas à ces frais. Vous pouvez utiliser [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) pour collecter les informations des cartes Visa, Mastercard, American Express, Discover et des cartes Interac, eftpos et girocard co-marquées. `SetupIntents` ne prennent pas en charge les cartes Interac, eftpos et girocard à marque unique. [Tap to Pay](https://docs.stripe.com/terminal/payments/setup-reader/tap-to-pay.md) ne prend pas en charge les cartes Interac co-marquées, qui doivent être insérées dans un lecteur. L’enregistrement des cartes bancaires avec Stripe Terminal à l’aide de `SetupIntents` impose de suivre la procédure suivante : 1. Créez ou récupérez 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) ou `Account` *configuré par le client* (Account configurations represent role-based functionality that you can enable for accounts, such as merchant, customer, or recipient). 1. Créez un objet [SetupIntent](https://docs.stripe.com/api/setup_intents.md) pour suivre le processus. 1. Après avoir obtenu le consentement du client, recueillez les informations relatives au moyen de paiement et transmettez-les à Stripe. # Piloté par le serveur > This is a Piloté par le serveur for when terminal-sdk-platform is server-driven. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=server-driven. > L’API SetupIntents sur serveur est compatible avec le BBPOS WisePOS E et le lecteur Stripe S700/S710. ## Créer ou récupérer un objet Customer Pour débiter une carte bancaire enregistrée auprès de Stripe, celle-ci doit être associée à un objet [Customer](https://docs.stripe.com/api/customers.md) ou à un objet [Account](https://docs.stripe.com/api/v2/core/accounts.md) configuré par le client. Lorsque vous intégrez un client dans votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte bancaire généré à l’objet fourni qui représente le client. ## Créer un SetupIntent 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 afin de l’utiliser pour des paiements ultérieurs. Le `SetupIntent` suit les étapes de ce processus de configuration. Dans le cas de Terminal, cet objet prévoit l’obtention et l’enregistrement du consentement du titulaire de carte. Lorsque vous créez un `SetupIntent`, fournissez l’identifiant de l’objet client dans le paramètre [customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) ou [customer_account](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer_account) pour associer automatiquement le moyen de paiement au client lors d’une configuration réussie. Si vous ne fournissez pas l’identifiant à la création, vous devez associer le moyen de paiement au client dans un appel distinct. - [Créer un SetupIntent](https://docs.stripe.com/api/setup_intents/create.md) Vous devez créer le `SetupIntent` sur votre serveur et inclure `card_present` dans le tableau `payment_method_types`. Définissez `usage` sur `on_session` si vous souhaitez uniquement réutiliser le moyen de paiement lorsque le client se trouve dans votre tunnel de paiement. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "payment_method_types[]=card_present" \ -d usage=on_session ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=card_present" \ -d usage=on_session ``` ## Collecter un moyen de paiement pour l’enregistrement - [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md) Après avoir créé un `SetupIntent`, vous devez collecter un moyen de paiement et recueillir le consentement du client. Définissez `allow_redisplay` sur `always` ou `limited`, indiquant dans quelle mesure le moyen de paiement peut être affiché dans un tunnel de paiement client. Obtenez le consentement du client oralement ou avec une case à cocher dans votre application. Vous devez respecter toutes les lois, règles et réglementations en vigueur dans votre région. Vous devez appeler l’endpoint [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md), qui gère à la fois la collecte et la confirmation du `SetupIntent`. Si le client donne son consentement, définissez `allow_redisplay` sur `always` ou `limited`. ```curl curl https://api.stripe.com/v1/terminal/readers/{{READER_ID}}/process_setup_intent \ -u "<>:" \ -d setup_intent={{SETUP_INTENT_ID}} \ -d allow_redisplay=always ``` Cette méthode collecte les données chiffrées du moyen de paiement via le lecteur de carte connecté, et associe les données chiffrées au `SetupIntent`. La collecte du moyen de paiement s’effectue en local et ne nécessite aucune autorisation ni mise à jour de l’objet `SetupIntent` avant l’étape suivante. ### Annuler la collecte #### Annulation programmatique - [cancel_action](https://docs.stripe.com/api/terminal/readers/cancel_action.md) Vous pouvez annuler la collecte d’un moyen de paiement en appelant [cancel_action](https://docs.stripe.com/api/terminal/readers/cancel_action.md). ## Envoyer les informations du moyen de paiement à Stripe Votre appel précédent à [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md) gère la *confirmation* (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) pour vous, aucune autre action n’est donc nécessaire. Une fois menée à bien, la configuration renvoie la valeur `succeeded` pour la propriété de l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) du `SetupIntent`, ainsi qu’un [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card), qui est un moyen de paiement `card` réutilisable que vous pouvez utiliser pour les paiements en ligne. > Le [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) est un `PaymentMethod` de type `card_present` qui représente la tokenisation de la carte physiquement présente. Il n’est pas possible d’effectuer un paiement en ligne avec celui-ci. Les paiements futurs utilisent plutôt la carte générée. Du point de vue du client, il s’agit du même moyen de paiement. Le moyen de paiement `generated_card` est automatiquement associé au client que vous avez fourni lors de la [création du SetupIntent](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent). Vous pouvez récupérer le moyen de paiement `generated_card` en développant la propriété `latest_attempt` du `SetupIntent`. Vérifiez systématiquement la valeur `generated_card` ; pour les moyens de paiement qui n’autorisent pas les cartes générées, la valeur est vide. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Vous pouvez également récupérer le moyen de paiement associé en récupérant la liste des moyens de paiement associés au client. #### Accounts v2 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d type=card ``` #### Customers v1 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d type=card ``` Si vous n’avez pas fourni de client lors de la création du `SetupIntent`, vous pouvez associer le moyen de paiement `generated_card` au client dans un appel distinct. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` Si la configuration n’aboutit pas, examinez l’erreur renvoyée pour en déterminer la cause. Par exemple, omettre de recueillir le consentement du client et d’en informer Stripe entraîne une erreur. ## Considérations relatives aux wallets mobiles Vous pouvez uniquement utiliser les wallets mobiles enregistrés pour les paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) que vous initiez au nom de votre client, comme les paiements d’abonnement récurrents. Lorsque vous enregistrez un moyen de paiement par wallet, la `generated_card` possède `allow_redisplay=limited`, pour indiquer les considérations d’utilisation spécifiques. Lorsque vous tentez d’effectuer un paiement avec un wallet mobile, veillez à définir `off_session` sur true lors de la confirmation du `PaymentIntent`. Si le client est présent dans votre tunnel de paiement, vous devez plutôt utiliser l’intégration de wallet mobile appropriée pour l’inviter à renseigner son moyen de paiement. ## Conformité Vous êtes responsable du respect de toutes les lois, réglementations et règles des réseaux applicables lorsque vous enregistrez les informations de paiement d’un client. Par exemple, le Comité européen de la protection des données a publié des recommandations sur l’enregistrement des informations de paiement. Ces exigences s’appliquent généralement si vous souhaitez enregistrer le moyen de paiement d’un client pour une utilisation ultérieure, par exemple en lui présentant le moyen de paiement dans le tunnel de paiement pour un achat futur ou en le facturant lorsqu’il n’utilise pas activement votre site Web ou votre application, ou encore en passant une commande MOTO ou en magasin. Intégrez à votre tunnel de paiement des conditions précisant la manière dont vous allez enregistrer les informations de moyen de paiement et offrant aux clients la possibilité de donner leur accord. Si vous envisagez de prélever le client alors qu’il ne paie pas activement, veillez à ce que vos conditions incluent au minimum 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 - Le calendrier et la fréquence prévus des paiements (par exemple, si les paiements concernent des versements échelonnés ou d’abonnement planifiés, ou des recharges non planifiées). - 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. Lors de l’enregistrement d’un moyen de paiement, celui-ci ne peut être utilisé que pour l’usage spécifié dans vos conditions. Pour prélever un client lorsqu’il n’est pas activement en train de payer et enregistrer son moyen de paiement pour un usage futur, vous devez recueillir son consentement explicite. Une option consiste à proposer une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure ». # JavaScript > This is a JavaScript for when terminal-sdk-platform is js. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=js. ## Créer ou récupérer un objet Customer Pour débiter une carte bancaire enregistrée auprès de Stripe, celle-ci doit être associée à un objet [Customer](https://docs.stripe.com/api/customers.md) ou à un objet [Account](https://docs.stripe.com/api/v2/core/accounts.md) configuré par le client. Lorsque vous intégrez un client dans votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte bancaire généré à l’objet fourni qui représente le client. ## Créer un SetupIntent 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 afin de l’utiliser pour des paiements ultérieurs. Le `SetupIntent` suit les étapes de ce processus de configuration. Dans le cas de Terminal, cet objet prévoit l’obtention et l’enregistrement du consentement du titulaire de carte. Lorsque vous créez un `SetupIntent`, fournissez l’identifiant de l’objet client dans le paramètre [customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) ou [customer_account](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer_account) pour associer automatiquement le moyen de paiement au client lors d’une configuration réussie. Si vous ne fournissez pas l’identifiant à la création, vous devez associer le moyen de paiement au client dans un appel distinct. - [Créer un SetupIntent](https://docs.stripe.com/api/setup_intents/create.md) Vous devez créer le `SetupIntent` sur votre serveur et inclure `card_present` dans le tableau `payment_method_types`. Définissez `usage` sur `on_session` si vous souhaitez uniquement réutiliser le moyen de paiement lorsque le client se trouve dans votre tunnel de paiement. Le `SetupIntent` contient une *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent (for example, status)), que vous pouvez transmettre au client au lieu de transmettre l’objet entier. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "payment_method_types[]=card_present" \ -d usage=on_session ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=card_present" \ -d usage=on_session ``` ## Collecter un moyen de paiement pour l’enregistrement - [collectSetupIntentPaymentMethod (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#collect-setup-intent-payment-method) Après avoir créé un `SetupIntent`, vous devez collecter un moyen de paiement via le SDK et recueillir le consentement du client. Définissez `allowRedisplay` sur `always` ou `limited`, indiquant dans quelle mesure le moyen de paiement peut être affiché dans un tunnel de paiement client. Obtenez le consentement du client oralement ou avec une case à cocher dans votre application. Vous devez respecter toutes les lois, règles et réglementations en vigueur dans votre région. Pour collecter un moyen de paiement, assurez-vous d’être connecté à un lecteur. Le lecteur connecté attend qu’une carte soit présentée après que votre application a appelé `collectSetupIntentPaymentMethod`. ```javascript async () => { // clientSecret is the client_secret from the SetupIntent you created in Step 1. const result = await terminal.collectSetupIntentPaymentMethod(clientSecret, "always"); if (result.error) { // Placeholder for handling result.error } else { // Placeholder for confirming result.setupIntent } } ``` Cette méthode collecte les données chiffrées du moyen de paiement via le lecteur de carte connecté, et associe les données chiffrées au `SetupIntent`. La collecte du moyen de paiement s’effectue en local et ne nécessite aucune autorisation ni mise à jour de l’objet `SetupIntent` avant l’étape suivante. ### Annuler la collecte #### Annulation programmatique Vous pouvez annuler la collecte d’un moyen de paiement en appelant [cancelCollectSetupIntentPaymentMethod](https://docs.stripe.com/terminal/references/api/js-sdk.md#cancel-collect-setup-intent-payment-method) dans le SDK. #### Annulation initiée par le client Lorsque vous définissez [enable_customer_cancellation](https://docs.stripe.com/terminal/references/api/js-sdk.md#collect-setup-intent-payment-method) sur la valeur « true » pour une transaction, les utilisateurs de lecteurs intelligents voient apparaître un bouton d’annulation. Appuyer sur le bouton d’annulation annule la transaction active. ```javascript terminal.collectSetupIntentPaymentMethod( setupIntent, allowRedisplay,{ enable_customer_cancellation: true } ) ``` ## Envoyer les informations du moyen de paiement à Stripe - [confirmSetupIntent (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#confirm-setup-intent) Utilisez `confirmSetupIntent` ` pour mener à bien la configuration. Une fois menée à bien, la configuration renvoie la valeur `succeeded` pour la propriété de l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) du `SetupIntent`, ainsi qu’un [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card), qui est un moyen de paiement `card` réutilisable que vous pouvez utiliser pour les paiements en ligne. > Le [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) est un `PaymentMethod` de type `card_present` qui représente la tokenisation de la carte physiquement présente. Il n’est pas possible d’effectuer un paiement en ligne avec celui-ci. Les paiements futurs utilisent plutôt la carte générée. Du point de vue du client, il s’agit du même moyen de paiement. Le moyen de paiement `generated_card` est automatiquement associé au client que vous avez fourni lors de la [création du SetupIntent](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent). Vous pouvez récupérer le moyen de paiement `generated_card` en développant la propriété `latest_attempt` du `SetupIntent`. Vérifiez systématiquement la valeur `generated_card` ; pour les moyens de paiement qui n’autorisent pas les cartes générées, la valeur est vide. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Vous pouvez également récupérer le moyen de paiement associé en récupérant la liste des moyens de paiement associés au client. #### Accounts v2 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d type=card ``` #### Customers v1 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d type=card ``` Si vous n’avez pas fourni de client lors de la création du `SetupIntent`, vous pouvez associer le moyen de paiement `generated_card` au client dans un appel distinct. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` Si la configuration n’aboutit pas, examinez l’erreur renvoyée pour en déterminer la cause. Par exemple, omettre de recueillir le consentement du client et d’en informer Stripe entraîne une erreur. ## Considérations relatives aux wallets mobiles Vous pouvez uniquement utiliser les wallets mobiles enregistrés pour les paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) que vous initiez au nom de votre client, comme les paiements d’abonnement récurrents. Lorsque vous enregistrez un moyen de paiement par wallet, la `generated_card` possède `allow_redisplay=limited`, pour indiquer les considérations d’utilisation spécifiques. Lorsque vous tentez d’effectuer un paiement avec un wallet mobile, veillez à définir `off_session` sur true lors de la confirmation du `PaymentIntent`. Si le client est présent dans votre tunnel de paiement, vous devez plutôt utiliser l’intégration de wallet mobile appropriée pour l’inviter à renseigner son moyen de paiement. ## Conformité Vous êtes responsable du respect de toutes les lois, réglementations et règles des réseaux applicables lorsque vous enregistrez les informations de paiement d’un client. Par exemple, le Comité européen de la protection des données a publié des recommandations sur l’enregistrement des informations de paiement. Ces exigences s’appliquent généralement si vous souhaitez enregistrer le moyen de paiement d’un client pour une utilisation ultérieure, par exemple en lui présentant le moyen de paiement dans le tunnel de paiement pour un achat futur ou en le facturant lorsqu’il n’utilise pas activement votre site Web ou votre application, ou encore en passant une commande MOTO ou en magasin. Intégrez à votre tunnel de paiement des conditions précisant la manière dont vous allez enregistrer les informations de moyen de paiement et offrant aux clients la possibilité de donner leur accord. Si vous envisagez de prélever le client alors qu’il ne paie pas activement, veillez à ce que vos conditions incluent au minimum 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 - Le calendrier et la fréquence prévus des paiements (par exemple, si les paiements concernent des versements échelonnés ou d’abonnement planifiés, ou des recharges non planifiées). - 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. Lors de l’enregistrement d’un moyen de paiement, celui-ci ne peut être utilisé que pour l’usage spécifié dans vos conditions. Pour prélever un client lorsqu’il n’est pas activement en train de payer et enregistrer son moyen de paiement pour un usage futur, vous devez recueillir son consentement explicite. Une option consiste à proposer une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure ». # iOS > This is a iOS for when terminal-sdk-platform is ios. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=ios. > Dans la version `5.0.0` du SDK, les étapes d’intégration collecter et confirmer sont désormais combinées en une seule étape `processSetupIntent`. ## Créer ou récupérer un objet Customer Pour débiter une carte bancaire enregistrée auprès de Stripe, celle-ci doit être associée à un objet [Customer](https://docs.stripe.com/api/customers.md) ou à un objet [Account](https://docs.stripe.com/api/v2/core/accounts.md) configuré par le client. > #### Prise en charge du SDK Terminal pour les clients > > Si vous créez et gérez des `SetupIntents` côté client via le SDK Terminal, vous devez utiliser des objets `Customer`. Le SDK Terminal ne prend pas en charge l’API Accounts v2. Lorsque vous intégrez un client dans votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte bancaire généré à l’objet fourni qui représente le client. ## Créer un SetupIntent 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 afin de l’utiliser pour des paiements ultérieurs. Le `SetupIntent` suit les étapes de ce processus de configuration. Dans le cas de Terminal, cet objet prévoit l’obtention et l’enregistrement du consentement du titulaire de carte. Lorsque vous créez un `SetupIntent`, fournissez l’identifiant de l’objet client dans le paramètre [customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) ou [customer_account](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer_account) pour associer automatiquement le moyen de paiement au client lors d’une configuration réussie. Si vous ne fournissez pas l’identifiant à la création, vous devez associer le moyen de paiement au client dans un appel distinct. - [SetupIntentParameters (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPSetupIntentParameters.html) Vous pouvez créer un `SetupIntent` en fournissant les paramètres `customer` ou `customerAccount`, `onBehalfOf` (uniquement pour *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)), et `usage`. #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Save Card" button func saveCardAction() throws { let params = try SetupIntentParametersBuilder().setCustomer(""{{CUSTOMER_ID}}"") Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") // ... } } } // ... } ``` Si les informations nécessaires pour démarrer un paiement ne sont pas disponibles dans votre application, vous pouvez [créer le SetupIntent](https://docs.stripe.com/api/setup_intents/create.md) sur votre serveur. Utilisez la clé secrète du client pour appeler `retrieveSetupIntent`, puis utilisez le `SetupIntent` récupéré pour appeler `processSetupIntent`. ## Collecter un moyen de paiement pour l’enregistrement - [retrieveSetupIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)retrieveSetupIntent:delegate:completion:) - [processSetupIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)processSetupIntent:collectConfig:completion:) Après avoir créé un `SetupIntent`, vous devez collecter un moyen de paiement via le SDK et recueillir le consentement du client. Définissez `allowRedisplay` sur `always` ou `limited`, indiquant dans quelle mesure le moyen de paiement peut être affiché dans un tunnel de paiement client. Obtenez le consentement du client oralement ou avec une case à cocher dans votre application. Vous devez respecter toutes les lois, règles et réglementations en vigueur dans votre région. Pour traiter un setupIntent, assurez-vous d’être connecté à un lecteur. Le lecteur connecté attend qu’une carte soit présentée après que votre application a appelé `processSetupIntent`. #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController, ReaderDisplayDelegate { // Label for displaying messages from the card reader let readerMessageLabel = UILabel(frame: .zero) var collectCancelable: Cancelable? = nil // ... // Action for a "Subscribe" button func subscribeAction() throws { let params = try SetupIntentParametersBuilder().setCustomer(""{{CUSTOMER_ID}}"").build() Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") let config = try CollectSetupIntentConfigurationBuilder() .setAllowRedisplay(.always) .build() self.collectCancelable = Terminal.shared.processSetupIntent(setupIntent, collectConfig: config) { processedSetupIntent, processError in if let error = processError { print("processSetupIntent failed: \(error)") } else if let processedSetupIntent = processedSetupIntent { print("processSetupIntent succeeded") } } } } } } ``` Cette méthode collecte les données chiffrées du moyen de paiement via le lecteur de carte connecté, et associe les données chiffrées au `SetupIntent`. La collecte du moyen de paiement s’effectue en local et ne nécessite aucune autorisation ni mise à jour de l’objet `SetupIntent` avant l’étape suivante. ### Annuler la collecte #### Annulation programmatique Vous pouvez annuler la collecte d’un moyen de paiement à l’aide de l’objet [Cancelable](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCancelable.html) renvoyé par le SDK. #### Annulation initiée par le client Le paramètre CustomerCancellation est activé par défaut. Les utilisateurs des lecteurs intelligents voient donc un bouton d’annulation. Le fait d’appuyer sur le bouton d’annulation permet d’annuler la transaction active. Utilisez [setCustomerCancellation](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCollectSetupIntentConfigurationBuilder.html#/c:objc\(cs\)SCPCollectSetupIntentConfigurationBuilder\(im\)setCustomerCancellation) pour activer ou désactiver cette fonctionnalité lors d’une transaction. #### Swift ```swift let setupConfig = try CollectSetupIntentConfiguration() .build() Terminal.shared.collectSetupIntentPaymentMethod(intent, allowRedisplay: AllowRedisplay.always, setupConfig: setupConfig) { collectedSetupIntent, collectError in } ``` ## Envoyer les informations du moyen de paiement à Stripe Votre appel précédent à `processSetupIntent` gère la *confirmation* (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) pour vous, aucune autre action n’est donc nécessaire. Une fois menée à bien, la configuration renvoie la valeur `succeeded` pour la propriété de l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) du `SetupIntent`, ainsi qu’un [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card), qui est un moyen de paiement `card` réutilisable que vous pouvez utiliser pour les paiements en ligne. > Le [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) est un `PaymentMethod` de type `card_present` qui représente la tokenisation de la carte physiquement présente. Il n’est pas possible d’effectuer un paiement en ligne avec celui-ci. Les paiements futurs utilisent plutôt la carte générée. Du point de vue du client, il s’agit du même moyen de paiement. Le moyen de paiement `generated_card` est automatiquement associé au client que vous avez fourni lors de la [création du SetupIntent](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent). Vous pouvez récupérer le moyen de paiement `generated_card` en développant la propriété `latest_attempt` du `SetupIntent`. Vérifiez systématiquement la valeur `generated_card` ; pour les moyens de paiement qui n’autorisent pas les cartes générées, la valeur est vide. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Vous pouvez également récupérer le moyen de paiement associé en récupérant la liste des moyens de paiement associés au client. #### Accounts v2 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d type=card ``` #### Customers v1 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d type=card ``` Si vous n’avez pas fourni de client lors de la création du `SetupIntent`, vous pouvez associer le moyen de paiement `generated_card` au client dans un appel distinct. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` Si la configuration n’aboutit pas, examinez l’erreur renvoyée pour en déterminer la cause. Par exemple, omettre de recueillir le consentement du client et d’en informer Stripe entraîne une erreur. #### Swift ```swift // Action for a "Save Card" button func saveCardAction() throws { let params = try SetupIntentParametersBuilder.setCustomer(""{{CUSTOMER_ID}}"").build() Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") let config = try CollectSetupIntentConfigurationBuilder() .setAllowRedisplay(.always) .build() self.collectCancelable = Terminal.shared.processSetupIntent(setupIntent, collectConfig: config) { processedSetupIntent, processError in if let error = processError { print("processSetupIntent failed: \(error)") } else if let processedSetupIntent = processedSetupIntent { print("processSetupIntent succeeded") } } } } } ``` ## Considérations relatives aux wallets mobiles Vous pouvez uniquement utiliser les wallets mobiles enregistrés pour les paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) que vous initiez au nom de votre client, comme les paiements d’abonnement récurrents. Lorsque vous enregistrez un moyen de paiement par wallet, la `generated_card` possède `allow_redisplay=limited`, pour indiquer les considérations d’utilisation spécifiques. Lorsque vous tentez d’effectuer un paiement avec un wallet mobile, veillez à définir `off_session` sur true lors de la confirmation du `PaymentIntent`. Si le client est présent dans votre tunnel de paiement, vous devez plutôt utiliser l’intégration de wallet mobile appropriée pour l’inviter à renseigner son moyen de paiement. ## Conformité Vous êtes responsable du respect de toutes les lois, réglementations et règles des réseaux applicables lorsque vous enregistrez les informations de paiement d’un client. Par exemple, le Comité européen de la protection des données a publié des recommandations sur l’enregistrement des informations de paiement. Ces exigences s’appliquent généralement si vous souhaitez enregistrer le moyen de paiement d’un client pour une utilisation ultérieure, par exemple en lui présentant le moyen de paiement dans le tunnel de paiement pour un achat futur ou en le facturant lorsqu’il n’utilise pas activement votre site Web ou votre application, ou encore en passant une commande MOTO ou en magasin. Intégrez à votre tunnel de paiement des conditions précisant la manière dont vous allez enregistrer les informations de moyen de paiement et offrant aux clients la possibilité de donner leur accord. Si vous envisagez de prélever le client alors qu’il ne paie pas activement, veillez à ce que vos conditions incluent au minimum 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 - Le calendrier et la fréquence prévus des paiements (par exemple, si les paiements concernent des versements échelonnés ou d’abonnement planifiés, ou des recharges non planifiées). - 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. Lors de l’enregistrement d’un moyen de paiement, celui-ci ne peut être utilisé que pour l’usage spécifié dans vos conditions. Pour prélever un client lorsqu’il n’est pas activement en train de payer et enregistrer son moyen de paiement pour un usage futur, vous devez recueillir son consentement explicite. Une option consiste à proposer une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure ». # Android > This is a Android for when terminal-sdk-platform is android. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=android. > Dans la version `5.0.0` du SDK, les étapes d’intégration collecter et confirmer sont désormais combinées en une seule étape `processSetupIntent`. ## Créer ou récupérer un objet Customer Pour débiter une carte bancaire enregistrée auprès de Stripe, celle-ci doit être associée à un objet [Customer](https://docs.stripe.com/api/customers.md) ou à un objet [Account](https://docs.stripe.com/api/v2/core/accounts.md) configuré par le client. > #### Prise en charge du SDK Terminal pour les clients > > Si vous créez et gérez des `SetupIntents` côté client via le SDK Terminal, vous devez utiliser des objets `Customer`. Le SDK Terminal ne prend pas en charge l’API Accounts v2. Lorsque vous intégrez un client dans votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte bancaire généré à l’objet fourni qui représente le client. ## Créer un SetupIntent 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 afin de l’utiliser pour des paiements ultérieurs. Le `SetupIntent` suit les étapes de ce processus de configuration. Dans le cas de Terminal, cet objet prévoit l’obtention et l’enregistrement du consentement du titulaire de carte. Lorsque vous créez un `SetupIntent`, fournissez l’identifiant de l’objet client dans le paramètre [customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) ou [customer_account](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer_account) pour associer automatiquement le moyen de paiement au client lors d’une configuration réussie. Si vous ne fournissez pas l’identifiant à la création, vous devez associer le moyen de paiement au client dans un appel distinct. - [SetupIntentParameters (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-setup-intent-parameters/index.html) Vous pouvez créer un `SetupIntent` en fournissant les paramètres `customer` ou `customerAccount`, `onBehalfOf` (uniquement pour *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)), et `usage`. #### Kotlin ```kotlin val params = SetupIntentParameters.Builder() .setCustomer(""{{CUSTOMER_ID}}"") .build() Terminal.getInstance().createSetupIntent( params, object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` Si les informations nécessaires pour démarrer un paiement ne sont pas disponibles dans votre application, vous pouvez [créer le SetupIntent](https://docs.stripe.com/api/setup_intents/create.md) sur votre serveur. Utilisez la clé secrète du client pour appeler `retrieveSetupIntent`, puis utilisez le `SetupIntent` récupéré pour appeler `processSetupIntent`. ## Collecter un moyen de paiement pour l’enregistrement - [retrieveSetupIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/retrieve-setup-intent.html) - [processSetupIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/process-setup-intent.html) Après avoir créé un `SetupIntent`, vous devez collecter un moyen de paiement via le SDK et recueillir le consentement du client. Définissez `allowRedisplay` sur `always` ou `limited`, indiquant dans quelle mesure le moyen de paiement peut être affiché dans un tunnel de paiement client. Obtenez le consentement du client oralement ou avec une case à cocher dans votre application. Vous devez respecter toutes les lois, règles et réglementations en vigueur dans votre région. Pour traiter un setupIntent, assurez-vous d’être connecté à un lecteur. Le lecteur connecté attend qu’une carte soit présentée après que votre application a appelé `processSetupIntent`. #### Kotlin ```kotlin val config = CollectSetupIntentConfiguration.Builder() .build() val cancelable = Terminal.getInstance().processSetupIntent( setupIntent, AllowRedisplay.ALWAYS, config, object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` Cette méthode collecte les données chiffrées du moyen de paiement via le lecteur de carte connecté, et associe les données chiffrées au `SetupIntent`. La collecte du moyen de paiement s’effectue en local et ne nécessite aucune autorisation ni mise à jour de l’objet `SetupIntent` avant l’étape suivante. ### Annuler la collecte #### Annulation programmatique Vous pouvez annuler la collecte d’un moyen de paiement à l’aide de l’objet [Cancelable](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCancelable.html) renvoyé par le SDK. #### Annulation initiée par le client Le paramètre CustomerCancellation est activé par défaut. Les utilisateurs de lecteurs intelligents voient donc un bouton d’annulation. Le fait d’appuyer sur le bouton d’annulation permet d’annuler la transaction active. Utilisez [setCustomerCancellation](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-collect-setup-intent-configuration/-builder/set-customer-cancellation.html) pour activer cette fonctionnalité lors d’une transaction. #### Kotlin ```kotlin Terminal.getInstance().collectSetupIntentPaymentMethod( setupIntent, AllowRedisplay.ALWAYS,SetupIntentConfiguration.Builder() .build(), object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` ## Envoyer les informations du moyen de paiement à Stripe Votre appel précédent à `processSetupIntent` gère la *confirmation* (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) pour vous, aucune autre action n’est donc nécessaire. Une fois menée à bien, la configuration renvoie la valeur `succeeded` pour la propriété de l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) du `SetupIntent`, ainsi qu’un [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card), qui est un moyen de paiement `card` réutilisable que vous pouvez utiliser pour les paiements en ligne. > Le [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) est un `PaymentMethod` de type `card_present` qui représente la tokenisation de la carte physiquement présente. Il n’est pas possible d’effectuer un paiement en ligne avec celui-ci. Les paiements futurs utilisent plutôt la carte générée. Du point de vue du client, il s’agit du même moyen de paiement. Le moyen de paiement `generated_card` est automatiquement associé au client que vous avez fourni lors de la [création du SetupIntent](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent). Vous pouvez récupérer le moyen de paiement `generated_card` en développant la propriété `latest_attempt` du `SetupIntent`. Vérifiez systématiquement la valeur `generated_card` ; pour les moyens de paiement qui n’autorisent pas les cartes générées, la valeur est vide. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Vous pouvez également récupérer le moyen de paiement associé en récupérant la liste des moyens de paiement associés au client. #### Accounts v2 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d type=card ``` #### Customers v1 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d type=card ``` Si vous n’avez pas fourni de client lors de la création du `SetupIntent`, vous pouvez associer le moyen de paiement `generated_card` au client dans un appel distinct. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` Si la configuration n’aboutit pas, examinez l’erreur renvoyée pour en déterminer la cause. Par exemple, omettre de recueillir le consentement du client et d’en informer Stripe entraîne une erreur. ## Considérations relatives aux wallets mobiles Vous pouvez uniquement utiliser les wallets mobiles enregistrés pour les paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) que vous initiez au nom de votre client, comme les paiements d’abonnement récurrents. Lorsque vous enregistrez un moyen de paiement par wallet, la `generated_card` possède `allow_redisplay=limited`, pour indiquer les considérations d’utilisation spécifiques. Lorsque vous tentez d’effectuer un paiement avec un wallet mobile, veillez à définir `off_session` sur true lors de la confirmation du `PaymentIntent`. Si le client est présent dans votre tunnel de paiement, vous devez plutôt utiliser l’intégration de wallet mobile appropriée pour l’inviter à renseigner son moyen de paiement. ## Conformité Vous êtes responsable du respect de toutes les lois, réglementations et règles des réseaux applicables lorsque vous enregistrez les informations de paiement d’un client. Par exemple, le Comité européen de la protection des données a publié des recommandations sur l’enregistrement des informations de paiement. Ces exigences s’appliquent généralement si vous souhaitez enregistrer le moyen de paiement d’un client pour une utilisation ultérieure, par exemple en lui présentant le moyen de paiement dans le tunnel de paiement pour un achat futur ou en le facturant lorsqu’il n’utilise pas activement votre site Web ou votre application, ou encore en passant une commande MOTO ou en magasin. Intégrez à votre tunnel de paiement des conditions précisant la manière dont vous allez enregistrer les informations de moyen de paiement et offrant aux clients la possibilité de donner leur accord. Si vous envisagez de prélever le client alors qu’il ne paie pas activement, veillez à ce que vos conditions incluent au minimum 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 - Le calendrier et la fréquence prévus des paiements (par exemple, si les paiements concernent des versements échelonnés ou d’abonnement planifiés, ou des recharges non planifiées). - 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. Lors de l’enregistrement d’un moyen de paiement, celui-ci ne peut être utilisé que pour l’usage spécifié dans vos conditions. Pour prélever un client lorsqu’il n’est pas activement en train de payer et enregistrer son moyen de paiement pour un usage futur, vous devez recueillir son consentement explicite. Une option consiste à proposer une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure ». # React Native > This is a React Native for when terminal-sdk-platform is react-native. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=react-native. > Dans la version `0.0.1-bêta.29` du SDK React Native, vous pouvez utiliser la méthode [processSetupIntent](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#processsetupintent) pour combiner les étapes d’intégration de collecte et de confirmation en un seul appel à l’API. ## Créer ou récupérer un objet Customer Pour débiter une carte bancaire enregistrée auprès de Stripe, celle-ci doit être associée à un objet [Customer](https://docs.stripe.com/api/customers.md) ou à un objet [Account](https://docs.stripe.com/api/v2/core/accounts.md) configuré par le client. > #### Prise en charge du SDK Terminal pour les clients > > Si vous créez et gérez des `SetupIntents` côté client via le SDK Terminal, vous devez utiliser des objets `Customer`. Le SDK Terminal ne prend pas en charge l’API Accounts v2. Lorsque vous intégrez un client dans votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte bancaire généré à l’objet fourni qui représente le client. ## Créer un SetupIntent 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 afin de l’utiliser pour des paiements ultérieurs. Le `SetupIntent` suit les étapes de ce processus de configuration. Dans le cas de Terminal, cet objet prévoit l’obtention et l’enregistrement du consentement du titulaire de carte. Lorsque vous créez un `SetupIntent`, fournissez l’identifiant de l’objet client dans le paramètre [customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) ou [customer_account](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer_account) pour associer automatiquement le moyen de paiement au client lors d’une configuration réussie. Si vous ne fournissez pas l’identifiant à la création, vous devez associer le moyen de paiement au client dans un appel distinct. - [CreateSetupIntentParams (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/index.html#CreateSetupIntentParams) Vous pouvez créer un `SetupIntent` en fournissant les paramètres `customer` ou `customerAccount`, `onBehalfOf` (uniquement pour *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)), et `usage`. ```js const { createSetupIntent } = useStripeTerminal(); const { paymentIntent, error } = await createSetupIntent({ customer: "{{CUSTOMER_ID}}", }); if (error) { // Placeholder for handling exception return; } // Placeholder for collecting a payment method with setupIntent ``` Si les informations nécessaires pour démarrer un paiement ne sont pas disponibles dans votre application, vous pouvez [créer le SetupIntent](https://docs.stripe.com/api/setup_intents/create.md) sur votre serveur. Utilisez la clé secrète du client pour appeler `retrieveSetupIntent`, puis utilisez le `SetupIntent` récupéré pour appeler `collectSetupIntentPaymentMethod`. ## Collecter un moyen de paiement pour l’enregistrement - [retrieveSetupIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#retrieveSetupIntent) - [collectSetupIntentPaymentMethod (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#collectSetupIntentPaymentMethod) Après avoir créé un `SetupIntent`, vous devez collecter un moyen de paiement via le SDK et recueillir le consentement du client. Définissez `allowRedisplay` sur `always` ou `limited`, indiquant dans quelle mesure le moyen de paiement peut être affiché dans un tunnel de paiement client. Obtenez le consentement du client oralement ou avec une case à cocher dans votre application. Vous devez respecter toutes les lois, règles et réglementations en vigueur dans votre région. Pour collecter un moyen de paiement, assurez-vous d’être connecté à un lecteur. Le lecteur connecté attend qu’une carte soit présentée après que votre application a appelé `collectSetupIntentPaymentMethod`. ```js const { setupIntent, error} = await collectSetupIntentPaymentMethod({ setupIntent: setupIntent, allowRedisplay: "always" }); if (error) { // Placeholder for handling exception return; } // Placeholder for confirming setupIntent ``` Cette méthode collecte les données chiffrées du moyen de paiement via le lecteur de carte connecté, et associe les données chiffrées au `SetupIntent`. La collecte du moyen de paiement s’effectue en local et ne nécessite aucune autorisation ni mise à jour de l’objet `SetupIntent` avant l’étape suivante. ### Annuler la collecte #### Annulation programmatique Vous pouvez annuler la collecte du moyen de paiement en appelant [cancelCollectSetupIntent](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelCollectSetupIntent) dans le SDK. #### Annulation initiée par le client Par défaut, les lecteurs intelligents affichent aux clients un bouton d’annulation. Vous pouvez le désactiver en réglant [customerCancellation](https://stripe.dev/stripe-terminal-react-native/api-reference/types/CollectSetupIntentPaymentMethodParams.html) sur `’disableIfAvailable’`. Appuyer sur le bouton d’annulation interrompt la transaction en cours. ```js const { setupIntent, error } = await collectSetupIntentPaymentMethod({ setupIntentId: setupIntentId, allowRedisplay: "always",customerCancellation: 'enableIfAvailable', }); if (error) { // Placeholder for handling exception } // Placeholder for processing SetupIntent ``` ## Envoyer les informations du moyen de paiement à Stripe - [confirmSetupIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#confirmSetupIntent) Utilisez `confirmSetupIntent` ` pour mener à bien la configuration. Une fois menée à bien, la configuration renvoie la valeur `succeeded` pour la propriété de l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) du `SetupIntent`, ainsi qu’un [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card), qui est un moyen de paiement `card` réutilisable que vous pouvez utiliser pour les paiements en ligne. > Le [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) est un `PaymentMethod` de type `card_present` qui représente la tokenisation de la carte physiquement présente. Il n’est pas possible d’effectuer un paiement en ligne avec celui-ci. Les paiements futurs utilisent plutôt la carte générée. Du point de vue du client, il s’agit du même moyen de paiement. Le moyen de paiement `generated_card` est automatiquement associé au client que vous avez fourni lors de la [création du SetupIntent](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent). Vous pouvez récupérer le moyen de paiement `generated_card` en développant la propriété `latest_attempt` du `SetupIntent`. Vérifiez systématiquement la valeur `generated_card` ; pour les moyens de paiement qui n’autorisent pas les cartes générées, la valeur est vide. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Vous pouvez également récupérer le moyen de paiement associé en récupérant la liste des moyens de paiement associés au client. #### Accounts v2 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d type=card ``` #### Customers v1 ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d type=card ``` Si vous n’avez pas fourni de client lors de la création du `SetupIntent`, vous pouvez associer le moyen de paiement `generated_card` au client dans un appel distinct. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` Si la configuration n’aboutit pas, examinez l’erreur renvoyée pour en déterminer la cause. Par exemple, omettre de recueillir le consentement du client et d’en informer Stripe entraîne une erreur. ```js const { setupIntent, error } = await confirmSetupIntent({ setupIntent: setupIntent }); if (error) { // Placeholder for handling exception return; } // The SetupIntent is now ready to be used as a payment method on a future payment ``` ## Considérations relatives aux wallets mobiles Vous pouvez uniquement utiliser les wallets mobiles enregistrés pour les paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) que vous initiez au nom de votre client, comme les paiements d’abonnement récurrents. Lorsque vous enregistrez un moyen de paiement par wallet, la `generated_card` possède `allow_redisplay=limited`, pour indiquer les considérations d’utilisation spécifiques. Lorsque vous tentez d’effectuer un paiement avec un wallet mobile, veillez à définir `off_session` sur true lors de la confirmation du `PaymentIntent`. Si le client est présent dans votre tunnel de paiement, vous devez plutôt utiliser l’intégration de wallet mobile appropriée pour l’inviter à renseigner son moyen de paiement. ## Conformité Vous êtes responsable du respect de toutes les lois, réglementations et règles des réseaux applicables lorsque vous enregistrez les informations de paiement d’un client. Par exemple, le Comité européen de la protection des données a publié des recommandations sur l’enregistrement des informations de paiement. Ces exigences s’appliquent généralement si vous souhaitez enregistrer le moyen de paiement d’un client pour une utilisation ultérieure, par exemple en lui présentant le moyen de paiement dans le tunnel de paiement pour un achat futur ou en le facturant lorsqu’il n’utilise pas activement votre site Web ou votre application, ou encore en passant une commande MOTO ou en magasin. Intégrez à votre tunnel de paiement des conditions précisant la manière dont vous allez enregistrer les informations de moyen de paiement et offrant aux clients la possibilité de donner leur accord. Si vous envisagez de prélever le client alors qu’il ne paie pas activement, veillez à ce que vos conditions incluent au minimum 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 - Le calendrier et la fréquence prévus des paiements (par exemple, si les paiements concernent des versements échelonnés ou d’abonnement planifiés, ou des recharges non planifiées). - 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. Lors de l’enregistrement d’un moyen de paiement, celui-ci ne peut être utilisé que pour l’usage spécifié dans vos conditions. Pour prélever un client lorsqu’il n’est pas activement en train de payer et enregistrer son moyen de paiement pour un usage futur, vous devez recueillir son consentement explicite. Une option consiste à proposer une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure ».