# Authentification avec 3D Secure Intégrez 3D Secure (3DS) à votre tunnel de paiement. > Les principales marques de cartes bancaires ne prennent plus en charge 3D Secure 1. Si votre implémentation utilise 3D Secure 1, mettez-la à niveau pour utiliser les API [Payment Intents](https://docs.stripe.com/api/payment_intents.md) et [Setup Intents](https://docs.stripe.com/api/setup_intents.md). Utiliser ces API permet de : > > - Prend en charge [3D Secure 2 (3DS2)](https://stripe.com/guides/3d-secure-2). - Tirer parti de [3D Secure Dynamic](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar). - Respecter la réglementation européenne sur l’[authentification forte du client](https://docs.stripe.com/strong-customer-authentication.md). Vous pouvez intégrer l’authentification 3D Secure (3DS) à votre tunnel de paiement sur différentes plateformes, notamment web, iOS, Android et React Native. Cette intégration exécute [3D Secure 2 (3DS2)](https://stripe.com/guides/3d-secure-2) si cette version est prise en charge par la banque du client, ou 3D Secure 1 dans le cas contraire. Vous pouvez également effectuer une authentification 3DS sur Stripe lors de l’acquisition de la transaction auprès d’un autre prestataire de services de paiement (PSP) en utilisant le produit [Standalone 3DS](https://docs.stripe.com/payments/3d-secure/standalone-three-d-secure.md). #### Web ![Page de paiement](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-1-checkout-page.039294e0dee3a6dede8ea8a32185aae5.png) Le client saisit ses informations de carte. ![Symbole de chargement](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-2-frictionless-flow.417618d0570c469cfb6bbc43630c7896.png) La banque du client évalue la transaction et peut lancer l’authentification 3D Secure. ![Fenêtre modale d'authentification](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-3-challenge-flow.9052a220f336bbdb75a51799622c6477.png) Si la banque le demande, le client se soumet à une étape d’authentification supplémentaire. #### iOS ![Écran de paiement](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-checkout.1cd901263328cbb76020b66c173da8b7.png) Le client saisit ses informations de carte. ![Écran de chargement](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-loading.f93743ad15b9120027f93f49ed45b26d.png) Le SDK présente un écran de chargement pendant que la banque du client vérifie si une authentification est requise. ![Écran du flux d'authentification](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-otp.ce1e46e0a853d7d6e3238750a07bca86.png) Si la banque le demande, le SDK authentifie le client. #### Android ![Écran de paiement](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step01-confirm.399f5a4abbd7f303861689d186b79557.png) Le client saisit ses informations de paiement. ![Initier l'authentification](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step02-processing.3877946d74743878ec86cec56dd69085.png) Le SDK présente un écran de chargement pendant que la banque du client vérifie si une authentification est requise. ![Écran du flux d'authentification](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step03-otp.f42397e1ce4ec5975e05f1bada72d195.png) Si la banque le demande, le SDK authentifie le client. ## Contrôler le flux 3DS Stripe déclenche automatiquement l’authentification 3DS lorsque des réglementations telles que l’[authentification forte du client](https://docs.stripe.com/strong-customer-authentication.md) en Europe s’appliquent, si des directives du secteur (telles que les directives de sécurité relatives aux cartes de crédit au Japon) l’exigent, si un émetteur le demande avec un code de [refus temporaire](https://docs.stripe.com/declines/codes.md) ou lorsque certaines optimisations Stripe s’appliquent. Vous pouvez également [utiliser Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) ou [l’API](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#manual-three-ds) pour décider quand inviter les utilisateurs à s’authentifier par 3DS. Cela vous permet de personnaliser le processus d’authentification pour chaque utilisateur en fonction des paramètres que vous avez choisis. Cependant, certaines transactions ne prennent pas en charge 3DS, par exemple les wallets ou les *paiements hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information). Lorsqu’un paiement déclenche l’authentification 3DS, l’émetteur de la carte peut exiger que le client s’authentifie pour finaliser le paiement, à condition que l’authentification 3DS soit prise en charge pour cette carte. Bien que Stripe initie la demande d’authentification, l’exigence provient de l’émetteur. Selon le front-end que vous utilisez, cela peut vous obliger à [afficher le flux 3DS](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#when-to-use-3d-secure). Dans le cas d’un flux classique de l’API Payment Intent qui déclenche l’authentification 3DS : 1. L’utilisateur saisit ses informations de paiement, qui confirment un PaymentIntent, un SetupIntent ou associent un PaymentMethod à un objet Customer. 1. Stripe détermine si la transaction prend en charge et nécessite 3DS sur la base des mandats réglementaires, des règles Radar, des requêtes manuelles à l’API, des refus de paiement provisoires de l’émetteur et d’autres critères. 1. Si 3DS est : - **Non requis** : en raison, par exemple, d’une *exemption* (Some transactions that are deemed low risk, based on the volume of fraud rates associated with the payment provider or bank, may be exempt from Europe's Strong Customer Authentication requirements), Stripe tente le paiement. Le PaymentIntent passe à l’état `processing`. Si l’émetteur le demande via un [refus partiel](https://docs.stripe.com/declines/codes.md) de paiement, nous effectuons automatiquement une nouvelle tentative et poursuivons comme si 3DS était exigé. - **Non pris en charge** : le PaymentIntent passe à l’état `requires_payment_method`. En fonction de la raison pour laquelle 3DS a été déclenché, il peut être possible de poursuivre l’étape d’autorisation du paiement. Dans ce cas, le PaymentIntent passe à l’état `processing`. - **Obligatoire** : Stripe lance le flux d’authentification 3DS en contactant le serveur de contrôle d’accès 3DS (ACS) de l’émetteur de la carte et en lançant le flux 3DS. 1. Lorsque les informations sur le flux 3DS sont reçues de l’émetteur, Stripe soumet la requête à l’émetteur afin d’authentifier le titulaire de la carte. Le PaymentIntent passe à l’état `requires_action` : - Découvrez ci-dessous comment [afficher l’action 3DS requise](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#when-to-use-3d-secure). Les émetteurs peuvent demander différents types d’actions de flux 3DS, qui peuvent ne pas toujours se traduire par l’affichage d’une demande d’authentification 3DS (par exemple, un flux simple). - Si l’émetteur ne prend pas du tout en charge 3DS ou en cas de panne, Stripe peut tenter d’effectuer le paiement sans authentification, si cela est autorisé. - Les données des demandes d’authentification 3DS sont généralement fournies par le client au moment de la transaction. Pour faciliter la transaction et réduire le risque d’échec de l’authentification, nous pouvons compléter ces demandes par des informations provenant d’autres sources. Il peut s’agir de données saisies par votre client dans le tunnel de paiement, de données de transactions antérieures entre vous et un client, ou d’informations pertinentes provenant de la carte du client ou de l’émetteur. - Si Stripe a déjà accès à toutes les données 3DS requises, notre serveur 3DS optimisé peut tenter de compléter la demande d’authentification pour vous tout en confirmant le PaymentIntent. Le PaymentIntent peut alors passer directement à l’état `processing` si le flux 3DS aboutit, ou à l’état `requires_action` si des étapes ou des données supplémentaires sont nécessaires pour compléter le flux 3DS. 1. En fonction du résultat de l’authentification 3DS : - **Authentifié** : Stripe tente le paiement et le PaymentIntent passe à l’état `processing`. - **Échec** : le PaymentIntent passe à l’état `requires_payment_method`, indiquant que vous devez utiliser un autre moyen de paiement, ou que vous pouvez effectuer une nouvelle tentative d’authentification 3DS après une nouvelle confirmation. - **Autres scénarios** : en fonction de la raison pour laquelle le paiement a déclenché l’authentification 3DS, il peut être permis de poursuivre l’autorisation dans des [cas particuliers](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure-result). Par exemple, un résultat `attempt_acknowledged` entraîne un paiement et le PaymentIntent passe à l’état `processing`. - La création de [mandats électroniques indiens pour les paiements récurrents](https://docs.stripe.com/india-recurring-payments.md) constitue une exception. Tout résultat autre que `authenticated` est considéré comme un échec. 1. En fonction du résultat du paiement, le PaymentIntent passe à l’un des états suivants : `succeeded`, `requires_capture` ou `requires_payment_method`. Pour déterminer si un paiement par carte a fait l’objet d’une tentative d’authentification 3DS ou prenait en charge cette méthode, lisez la propriété [three_d_secure](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure) sur les informations de la carte au niveau de l’élément `payment_method_details` du paiement. Stripe renseigne la propriété `three_d_secure` lorsque le client tente d’authentifier la carte. L’attribut `three_d_secure.result` indique le résultat de l’authentification. ### Utiliser des règles Radar dans le Dashboard Stripe propose des [contrôles anti-fraude](https://docs.stripe.com/radar/rules.md#request-3d-secure) pour exiger l’authentification 3DS de manière dynamique lors de la création ou de la confirmation d’un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ou d’un [SetupIntent](https://docs.stripe.com/api/setup_intents.md). Vous pouvez configurer ces règles dans votre [Dashboard](https://dashboard.stripe.com/settings/radar/rules). Si vous disposez de [Radar for Fraud Teams](https://stripe.com/radar/fraud-teams), vous pouvez ajouter des [règles 3DS personnalisées](https://docs.stripe.com/radar/rules.md#request-3d-secure). ### Demander manuellement une authentification 3DS avec l’API La méthode par défaut pour déclencher le 3DS consiste à [utiliser Radar pour demander dynamiquement le 3D Secure](https://docs.stripe.com/radar/risk-settings.md#adaptive-3ds) en fonction du niveau de risque et d’autres exigences. Le déclenchement manuel du 3DS est destiné aux utilisateurs avancés qui intègrent Stripe à leur propre moteur de détection des fraudes. Pour déclencher 3DS manuellement, définissez `payment_method_options[card][request_three_d_secure]` en fonction de ce pour quoi vous souhaitez optimiser soit lors de la création ou de la confirmation d’une [PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-card-request_three_d_secure) ou [SetupIntent](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_options-card-request_three_d_secure), soit lors de la création d’une [Checkout Session](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_three_d_secure). Ce processus est le même pour les paiements uniques ou lors de la mise en place d’un moyen de paiement pour les paiements futurs. Lorsque vous fournissez ce paramètre, Stripe tente d’effectuer 3DS et remplace toute [dynamic 3D Secure Radar rules](https://docs.stripe.com/radar/rules.md) sur PaymentIntent, SetupIntent ou Paiement Session. #### API Payment Intents ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_options[card][request_three_d_secure]=any" ``` #### API Setup Intents ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_options[card][request_three_d_secure]=any" ``` #### API Checkout Session ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[card][request_three_d_secure]=any" ``` Pour savoir quand vous devez fournir ce paramètre, définissez à quel moment votre moteur de fraude détecte le risque. Par exemple, si votre moteur de fraude n’inspecte que les informations de carte, vous savez s’il faut demander ou non une authentification 3DS avant de créer l’objet PaymentIntent ou SetupIntent. Si le moteur de fraude inspecte les informations de carte et de transaction, fournissez le paramètre pendant la confirmation, une fois que vous disposez de davantage d’informations. Transmettez ensuite le PaymentIntent ou le SetupIntent à votre client pour finaliser l’opération. Découvrez comment utiliser le paramètre `request_three_d_secure` pour chaque cas de figure dans la documentation sur l’API : - [Créer un PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-card-request_three_d_secure) - [Confirmer un PaymentIntent](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-card-request_three_d_secure) - [Créer un SetupIntent](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_options-card-request_three_d_secure) - [Confirmer un SetupIntent](https://docs.stripe.com/api/setup_intents/confirm.md#confirm_setup_intent-payment_method_options-card-request_three_d_secure) - [Créer une session Checkout](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_three_d_secure) Définissez `request_three_d_secure` sur `any` pour déclencher manuellement l’authentification 3DS en favorisant un flux de type `frictionless` (simple), ce qui augmentera la probabilité que l’authentification soit effectuée sans solliciter d’informations supplémentaires de la part du client. Définissez `request_three_d_secure` sur `challenge` pour déclencher l’authentification 3DS via un flux de type `challenge` (complexe), qui oblige le client à répondre à une demande d’authentification active. Stripe ne peut pas garantir votre choix, car c’est l’émetteur qui détermine le flux d’authentification final. Pour prendre connaissance du flux d’authentification utilisé, examinez l’attribut `authentication_flow` de la propriété `three_d_secure` de l’objet [Charge](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure-authentication_flow) ou [SetupAttempt](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card-three_d_secure-authentication_flow). Pour en savoir plus sur les flux 3DS, lisez notre [guide](https://stripe.com/guides/3d-secure-2#frictionless-authentication). > Stripe invite votre client à s’authentifier uniquement si l’authentification 3DS est disponible pour sa carte. Si ce n’est pas le cas ou si une erreur se produit lors du processus d’authentification, le paiement se poursuit normalement. Les règles d’authentification obligatoires de Stripe s’exécutent automatiquement, que vous demandiez ou non 3DS manuellement. Toute demande 3DS que vous effectuez s’ajoute à celles requises pour la SCA. ## Afficher le flux 3DS #### Web Lors de l’appel de `confirmCardPayment` et `handleCardAction`, Stripe affiche automatiquement l’interface utilisateur d’authentification dans une fenêtre modale contextuelle. Vous pouvez également choisir de rediriger l’utilisateur vers le site Web de la banque ou d’utiliser une balise iframe. Stripe.js collecte des [informations de base sur l’appareil](https://support.stripe.com/questions/3d-secure-2-device-information) pendant l’authentification 3DS2 et les envoie à la banque émettrice à des fins d’analyse des risques. ### Rediriger l’utilisateur vers le site Web de la banque Pour rediriger votre client vers la page d’authentification 3DS, transmettez l’URL `return_url` à l’objet PaymentIntent lors de la confirmation côté [serveur](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) ou côté [client](https://docs.stripe.com/js/payment_intents/confirm_card_payment). Après la confirmation, si un objet PaymentIntent affiche l’état *requires\_action* (This status appears as "requires_source_action" in API versions before 2019-02-11), vérifiez sa propriété `next_action`. Si elle a pour valeur `redirect_to_url`, cela signifie que l’authentification 3DS est requise. ```js next_action: { type: 'redirect_to_url', redirect_to_url: { url: 'https://hooks.stripe.com/...', return_url: 'https://mysite.com' } } ``` Dans le navigateur, redirigez le client vers l’`url` de la valeur redirect_to_url pour terminer l’authentification. ```javascript var action = intent.next_action; if (action && action.type === 'redirect_to_url') { window.location = action.redirect_to_url.url; } ``` Lorsque le client termine le processus d’authentification, il est redirigé vers la page `return_url` que vous avez spécifiée lors de la création ou de la confirmation du PaymentIntent. La redirection ajoute également les paramètres de requête d’URL `payment_intent` et `payment_intent_client_secret`, que votre application peut utiliser pour identifier le PaymentIntent associé à l’achat. ### Afficher dans un iframe Vous ne pouvez pas personnaliser l’interface utilisateur d’authentification sur le Web pour qu’elle corresponde au design de votre site Web. La banque qui a émis la carte contrôle les polices et les couleurs. Cependant, vous pouvez choisir *comment* et *où* afficher l’interface utilisateur 3DS. La plupart des entreprises l’affichent dans une boîte de dialogue modale au-dessus de leur page de paiement. Si vous disposez de votre propre composant modal, vous pouvez y placer le cadre 3DS. Vous pouvez également afficher le contenu de l’authentification dans votre formulaire de paiement. #### Confirmer le PaymentIntent Lorsque le client est prêt à effectuer son achat, vous *confirmez* (Confirming a PaymentIntent indicates that the customer intends to pay with the current or provided payment method. Upon confirmation, the PaymentIntent attempts to initiate a payment) le PaymentIntent pour commencer le processus d’encaissement du paiement. Si vous souhaitez contrôler l’affichage de 3DS, indiquez une URL `return_url`, vers laquelle `