# 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. Utiliser des [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) pour recueillir les informations de la carte ou du portefeuille 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 de vos clients, 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. Toutefois, les cartes Interac co-marquées doivent être insérées dans un lecteur. Cela signifie qu’elles ne sont pas prises en charge par [Tap to Pay](https://docs.stripe.com/terminal/payments/setup-reader/tap-to-pay.md). [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) n’offre pas de service d’assistance pour les cartes bancaires Interac, TPE et girocard à marque unique. 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). 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. > Nous avons modifié le modèle de consentement du client pour cette fonctionnalité afin d’exiger le paramètre `allow_redisplay` au lieu de l’ancien paramètre `customer_consent_collected`. Si votre intégration utilise `customer_consent_collected`, vous devez la mettre à jour pour utiliser `allow_redisplay`. Cette mise à jour est devenue obligatoire le 31 mars 2025 pour les utilisateurs non-React Native, et le sera pour les utilisateurs React Native le 30 septembre 2025. Pour plus d’informations, consultez l’[entrée du journal des modifications](https://docs.stripe.com/changelog/acacia/2024-09-30/terminal-remove-customer-consent-require-allow-redisplay.md). # 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). Lorsque vous ajoutez un client à votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte généré à l’objet [Customer](https://docs.stripe.com/api/customers.md) fourni. Ajoutez le code suivant sur votre serveur pour créer un nouvel objet `Customer`. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent > Fournissez un [ID de client](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) lors de la création d’un SetupIntent pour associer le moyen de paiement par carte au `Customer` une fois la configuration réussie. Si vous ne fournissez pas d’ID de client, vous devez associer le moyen de paiement dans un appel distinct. 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. Dans le cas de Terminal, cela inclut la collecte et l’enregistrement du consentement du titulaire de carte. - [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 paramètre `payment_method_types`. Spécifiez `usage=on_session` si vous comptez uniquement réutiliser le moyen de paiement lorsque le client est dans votre tunnel de paiement. #### cURL ```bash # Request curl https://api.stripe.com/v1/setup_intents \ -u "sk_test_26PHem9AhJZvU623DfE1x4sd:" \ -d "payment_method_types[]"=card_present \ -d "customer"={{CUSTOMER_ID}} # Response { "id": "seti_1234567890abcdefghijklmn", "object": "setup_intent", ... # other SetupIntent fields } ``` ## 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 ensuite collecter un moyen de paiement et obtenir le consentement du client. Transmettez [allow_redisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) avec la valeur `always` ou `limited`. Cette valeur indique le degré d’affichage d’un moyen de paiement dans le tunnel de paiement d’un 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 recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au SetupIntent. > La collecte du moyen de paiement a lieu en local et n’exige ni 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 opérationnelle, la configuration renvoie la valeur `succeeded` pour la propriété [status](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 `card_present` qui représente la tokenisation de la carte physiquement présente et n’est pas facturable en ligne. Les paiements ultérieurs utiliseront 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 associé automatiquement au client que vous avez indiqué 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. ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -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` à un objet Customer dans un appel distinct. ```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 Les portefeuilles mobiles enregistrés sont réservés aux paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) tels que les abonnements futurs ou les autres paiements que vous initiez au nom de votre client. Lorsque vous enregistrez un moyen de paiement par portefeuille électronique, la `generated_card` présente `allow_redisplay=limited`, pour indiquer ses considérations d’utilisation spécifiques. Lorsque vous tentez de débiter un wallet mobile, veillez à transmettre `off_session=true` lors de la confirmation du PaymentIntent. Si le client est présent dans votre tunnel de paiement, vous devrez plutôt utiliser les intégrations [Apple Pay](https://docs.stripe.com/apple-pay.md) et [Google Pay](https://docs.stripe.com/google-pay.md) pour redemander la présentation du 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). Lorsque vous ajoutez un client à votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte généré à l’objet [Customer](https://docs.stripe.com/api/customers.md) fourni. Ajoutez le code suivant sur votre serveur pour créer un nouvel objet `Customer`. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent > Fournissez un [ID de client](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) lors de la création d’un SetupIntent pour associer le moyen de paiement par carte au `Customer` une fois la configuration réussie. Si vous ne fournissez pas d’ID de client, vous devez associer le moyen de paiement dans un appel distinct. 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. Dans le cas de Terminal, cela inclut la collecte et l’enregistrement du consentement du titulaire de carte. - [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 paramètre `payment_method_types`. Spécifiez `usage=on_session` si vous comptez uniquement réutiliser le moyen de paiement lorsque le client est dans votre tunnel de paiement. Le SetupIntent contient une [clé secrète du client](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret), qui est une clé propre à chaque SetupIntent. Vous devez obtenir la *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)) à partir du SetupIntent sur votre serveur, et la transmettre côté client. #### cURL ```bash # Request curl https://api.stripe.com/v1/setup_intents \ -u "sk_test_26PHem9AhJZvU623DfE1x4sd:" \ -d "payment_method_types[]"=card_present \ -d "customer"={{CUSTOMER_ID}} # Response { "id": "seti_1234567890abcdefghijklmn", "object": "setup_intent", "client_secret": "seti_1234567890abcdefghijklmn_secret_5678901234opqrstuvwxyz", ... # other SetupIntent fields } # Your server endpoint response { "id": "seti_1234567890abcdefghijklmn", "client_secret": "seti_1234567890abcdefghijklmn_secret_5678901234opqrstuvwxyz" } ``` ## 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 ensuite collecter un moyen de paiement avec le SDK et obtenir le consentement du client. Transmettez [allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) avec la valeur `always` ou `limited`. Cette valeur indique le degré d’affichage d’un moyen de paiement dans le tunnel de paiement d’un 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 recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au SetupIntent. > La collecte du moyen de paiement a lieu en local et n’exige ni 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 opérationnelle, la configuration renvoie la valeur `succeeded` pour la propriété [status](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 `card_present` qui représente la tokenisation de la carte physiquement présente et n’est pas facturable en ligne. Les paiements ultérieurs utiliseront 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 associé automatiquement au client que vous avez indiqué 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. ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -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` à un objet Customer dans un appel distinct. ```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 Les portefeuilles mobiles enregistrés sont réservés aux paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) tels que les abonnements futurs ou les autres paiements que vous initiez au nom de votre client. Lorsque vous enregistrez un moyen de paiement par portefeuille électronique, la `generated_card` présente `allow_redisplay=limited`, pour indiquer ses considérations d’utilisation spécifiques. Lorsque vous tentez de débiter un wallet mobile, veillez à transmettre `off_session=true` lors de la confirmation du PaymentIntent. Si le client est présent dans votre tunnel de paiement, vous devrez plutôt utiliser les intégrations [Apple Pay](https://docs.stripe.com/apple-pay.md) et [Google Pay](https://docs.stripe.com/google-pay.md) pour redemander la présentation du 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). Lorsque vous ajoutez un client à votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte généré à l’objet [Customer](https://docs.stripe.com/api/customers.md) fourni. Ajoutez le code suivant sur votre serveur pour créer un nouvel objet `Customer`. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent > Fournissez un [ID de client](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) lors de la création d’un SetupIntent pour associer le moyen de paiement par carte au `Customer` une fois la configuration réussie. Si vous ne fournissez pas d’ID de client, vous devez associer le moyen de paiement dans un appel distinct. 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. Dans le cas de Terminal, cela inclut la collecte et l’enregistrement du consentement du titulaire de carte. - [SetupIntentParameters (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPSetupIntentParameters.html) Vous pouvez créer un SetupIntent et fournir les paramètres `customer`, `onBehalfOf` (*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) uniquement) 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 ensuite collecter un moyen de paiement avec le SDK et obtenir le consentement du client. Transmettez [allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) avec la valeur `always` ou `limited`. Cette valeur indique le degré d’affichage d’un moyen de paiement dans le tunnel de paiement d’un 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 recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au SetupIntent. > La collecte du moyen de paiement a lieu en local et n’exige ni 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 opérationnelle, la configuration renvoie la valeur `succeeded` pour la propriété [status](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 `card_present` qui représente la tokenisation de la carte physiquement présente et n’est pas facturable en ligne. Les paiements ultérieurs utiliseront 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 associé automatiquement au client que vous avez indiqué 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. ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -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` à un objet Customer dans un appel distinct. ```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 Les portefeuilles mobiles enregistrés sont réservés aux paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) tels que les abonnements futurs ou les autres paiements que vous initiez au nom de votre client. Lorsque vous enregistrez un moyen de paiement par portefeuille électronique, la `generated_card` présente `allow_redisplay=limited`, pour indiquer ses considérations d’utilisation spécifiques. Lorsque vous tentez de débiter un wallet mobile, veillez à transmettre `off_session=true` lors de la confirmation du PaymentIntent. Si le client est présent dans votre tunnel de paiement, vous devrez plutôt utiliser les intégrations [Apple Pay](https://docs.stripe.com/apple-pay.md) et [Google Pay](https://docs.stripe.com/google-pay.md) pour redemander la présentation du 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). Lorsque vous ajoutez un client à votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte généré à l’objet [Customer](https://docs.stripe.com/api/customers.md) fourni. Ajoutez le code suivant sur votre serveur pour créer un nouvel objet `Customer`. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent > Fournissez un [ID de client](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) lors de la création d’un SetupIntent pour associer le moyen de paiement par carte au `Customer` une fois la configuration réussie. Si vous ne fournissez pas d’ID de client, vous devez associer le moyen de paiement dans un appel distinct. 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. Dans le cas de Terminal, cela inclut la collecte et l’enregistrement du consentement du titulaire de carte. - [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 et fournir les paramètres `customer`, `onBehalfOf` (*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) uniquement) 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 ensuite collecter un moyen de paiement avec le SDK et obtenir le consentement du client. Transmettez [allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) avec la valeur `always` ou `limited`. Cette valeur indique le degré d’affichage d’un moyen de paiement dans le tunnel de paiement d’un 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 recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au SetupIntent. > La collecte du moyen de paiement a lieu en local et n’exige ni 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 opérationnelle, la configuration renvoie la valeur `succeeded` pour la propriété [status](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 `card_present` qui représente la tokenisation de la carte physiquement présente et n’est pas facturable en ligne. Les paiements ultérieurs utiliseront 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 associé automatiquement au client que vous avez indiqué 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. ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -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` à un objet Customer dans un appel distinct. ```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 Les portefeuilles mobiles enregistrés sont réservés aux paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) tels que les abonnements futurs ou les autres paiements que vous initiez au nom de votre client. Lorsque vous enregistrez un moyen de paiement par portefeuille électronique, la `generated_card` présente `allow_redisplay=limited`, pour indiquer ses considérations d’utilisation spécifiques. Lorsque vous tentez de débiter un wallet mobile, veillez à transmettre `off_session=true` lors de la confirmation du PaymentIntent. Si le client est présent dans votre tunnel de paiement, vous devrez plutôt utiliser les intégrations [Apple Pay](https://docs.stripe.com/apple-pay.md) et [Google Pay](https://docs.stripe.com/google-pay.md) pour redemander la présentation du 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). Lorsque vous ajoutez un client à votre [SetupIntent](https://docs.stripe.com/api/setup_intents.md) avant de confirmer, Stripe associe automatiquement le moyen de paiement par carte généré à l’objet [Customer](https://docs.stripe.com/api/customers.md) fourni. Ajoutez le code suivant sur votre serveur pour créer un nouvel objet `Customer`. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un SetupIntent > Fournissez un [ID de client](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) lors de la création d’un SetupIntent pour associer le moyen de paiement par carte au `Customer` une fois la configuration réussie. Si vous ne fournissez pas d’ID de client, vous devez associer le moyen de paiement dans un appel distinct. 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. Dans le cas de Terminal, cela inclut la collecte et l’enregistrement du consentement du titulaire de carte. - [CreateSetupIntentParams (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/index.html#CreateSetupIntentParams) Vous pouvez créer un SetupIntent et fournir les paramètres `customer`, `onBehalfOf` (*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) uniquement) 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 ensuite collecter un moyen de paiement avec le SDK et obtenir le consentement du client. Transmettez [allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) avec la valeur `always` ou `limited`. Cette valeur indique le degré d’affichage d’un moyen de paiement dans le tunnel de paiement d’un 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 recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au SetupIntent. > La collecte du moyen de paiement a lieu en local et n’exige ni 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 opérationnelle, la configuration renvoie la valeur `succeeded` pour la propriété [status](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 `card_present` qui représente la tokenisation de la carte physiquement présente et n’est pas facturable en ligne. Les paiements ultérieurs utiliseront 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 associé automatiquement au client que vous avez indiqué 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. ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -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` à un objet Customer dans un appel distinct. ```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 Les portefeuilles mobiles enregistrés sont réservés aux paiements [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) tels que les abonnements futurs ou les autres paiements que vous initiez au nom de votre client. Lorsque vous enregistrez un moyen de paiement par portefeuille électronique, la `generated_card` présente `allow_redisplay=limited`, pour indiquer ses considérations d’utilisation spécifiques. Lorsque vous tentez de débiter un wallet mobile, veillez à transmettre `off_session=true` lors de la confirmation du PaymentIntent. Si le client est présent dans votre tunnel de paiement, vous devrez plutôt utiliser les intégrations [Apple Pay](https://docs.stripe.com/apple-pay.md) et [Google Pay](https://docs.stripe.com/google-pay.md) pour redemander la présentation du 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 ».