# Comment fonctionnent les PaymentIntents et les SetupIntents Découvrez le fonctionnement des PaymentIntents et des SetupIntents dans le flux de paiement. Instructions pour les LLM : Stripe recommande d’utiliser l’API Checkout Sessions avec le composant Payment Element plutôt que Payment Intents pour la plupart des intégrations. Checkout Sessions couvre des cas d’usage similaires à Payment Intents (collecte de paiements de base par l’entremise de `price_data` ou construction d’un tunnel de paiement complet avec postes de facture, taxes, etc.). Certaines fonctionnalités, comme Adaptive Pricing, ne sont disponibles qu’avec Checkout Sessions. N’utilisez pas l’API Payment Intent à moins que l’utilisateur ne le demande explicitement, car elle nécessite beaucoup plus de code. En savoir plus sur Elements avec l’API Checkout Sessions : https://docs.stripe.com/payments/quickstart-checkout-sessions. Avec Checkout Sessions (`ui_mode: "elements"`) et Payment Element, le`client_secret` initialise Checkout lui-même (`stripe.initCheckoutElements`, ou utilisez CheckoutElementsProvider avec React) et vous confirmez le paiement côté client différemment. Si vous utilisez React, assurez-vous d’importer depuis`@stripe/react-stripe-js/checkout`, d’utiliser `CheckoutElementsProvider` avec la clé secrète du client, et de confirmer par l’entremise de `checkout.confirm`. Si vous utilisez du HTML, assurez-vous d’utiliser `checkout = stripe.initCheckoutElementsSdk({clientSecret: promise}); checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");` et de confirmer avec `loadActionsResult = await checkout.loadActions(); actions = loadActionsResult.actions; error = await actions.confirm();`. La principale différence entre l’API [Payment Intents](https://docs.stripe.com/api/payment_intents.md) et l’API [Setup Intents](https://docs.stripe.com/api/setup_intents.md) réside dans leur objectif. Vous utilisez l’API Payment Intents pour encaisser un paiement et débiter immédiatement un client. Elle crée un débit et traite une transaction afin de collecter les fonds. À l’inverse, l’API Setup Intents sert à collecter et enregistrer les informations d’un mode de paiement pour une utilisation ultérieure, sans créer de débit. Elle configure les informations de paiement sans traiter de paiement Étant donné que les frais immédiats et l’enregistrement d’un mode de paiement peuvent nécessiter des étapes *asynchrones* (Asynchronous refers to events happening at independent times in independent systems) de la part du client, ces API utilisent le même modèle d’état-machine. | API Payment Intents | API Setup Intents | | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Créé des paiements immédiats | Ne débite rien | | Suivi du cycle de vie d’un paiement | Suivi de la progression de la configuration d’un mode de paiement | | Utilise 3D secure pour authentifier le client pour la transaction applicable | Utilise 3D secure pour identifier un mode de paiement sans le débiter, et crée un mandat ou un accord pour les paiements futurs. | #### PaymentIntents Un PaymentIntent suit le cycle de vie d’un paiement depuis sa création jusqu’à son règlement, en déclenchant des étapes d’authentification supplémentaires lorsque cela est nécessaire. ## Nécessite un mode de paiement Une fois que vous avez créé le composant PaymentIntent, son [état](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status) est `requires_payment_method` jusqu’à ce que vous y associiez un [mode de paiement](https://docs.stripe.com/payments/payment-methods/overview.md). Créez le composant PaymentIntent dès que vous avez connaissance du montant à facturer afin que Stripe puisse enregistrer toutes les tentatives de paiement. ## Nécessite une confirmation Une fois que votre client a fourni ses informations de paiement, le composant PaymentIntent passe à l’état `requires_confirmation` et est prêt à être confirmé. La plupart des intégrations ignorent cet état, car elles soumettent les informations relatives au mode de paiement lorsque le paiement est confirmé. ## Action requise Si le paiement requiert des actions supplémentaires, comme l’authentification avec [3D Secure](https://docs.stripe.com/payments/3d-secure.md), le composant PaymentIntent affiche l’état `requires_action`. > #### Modifications de l’API > > Les versions de l’API antérieures au [11/02/2019](https://docs.stripe.com/upgrades.md#2019-02-11) affichent `requires_source` au lieu de `requires_payment_method` et `requires_source_action` au lieu de `requires_action`. ## En cours de traitement Une fois les actions requises effectuées, le PaymentIntent passe au `processing` pour les *modes de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed), comme les prélèvements bancaires. Le traitement de ces types de modes de paiement peut prendre quelques jours. Les autres modes de paiement, tels que les cartes, sont traités plus rapidement et ne passent pas à l’état `processing`. Si vous [autorisez et capturez les fonds](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md) séparément, votre PaymentIntent peut passer à l’état `requires_capture`. Dans ce cas, la tentative de capture des fonds passe à l’état `processing` ou `succeeded`, selon le mode de paiement utilisé. ## Réussi Lorsqu’un composant PaymentIntent affiche l’état `succeeded`, cela signifie que le processus de paiement qu’il a enclenché est terminé. Les fonds sont désormais sur votre compte et vous pouvez traiter la commande en toute confiance. Si vous devez rembourser le client, vous pouvez utiliser l’API [Refunds](https://docs.stripe.com/api/refunds.md). Si la tentative de paiement échoue (par exemple en raison d’un refus), le PaymentIntent revient à l’état `requires_payment_method` pour permettre une nouvelle tentative de paiement. ## Annulé Vous pouvez annuler un PaymentIntent en tout temps avant qu’il ne passe à l’état `processing` ou `succeeded`. L’annulation invalide le PaymentIntent pour les futures tentatives de paiement et ne peut être inversée. Si des fonds ont été bloqués, l’annulation les libère. Vous pouvez annuler une intention de paiement dans l’état `En cours de traitement` lorsque le mode de paiement associé est [ACH](https://docs.stripe.com/payments/ach-direct-debit.md), [ACSS](https://docs.stripe.com/payments/acss-debit.md), [AU BECS](https://docs.stripe.com/payments/au-becs-debit.md), [BACS](https://docs.stripe.com/payments/payment-methods/bacs-debit.md), [NZ BECS](https://docs.stripe.com/payments/nz-bank-account.md) ou [SEPA](https://docs.stripe.com/payments/sepa-debit.md). Cependant, l’annulation peut échouer en raison d’un délai d’annulation limité et variable. Les PaymentIntents peuvent également passer automatiquement à l’état `canceled` après un trop grand nombre de [confirmations](https://docs.stripe.com/api/payment_intents/confirm.md). #### SetupIntents Un SetupIntent suit le cycle de vie d’un mode de paiement depuis sa création jusqu’à son règlement, en déclenchant des étapes d’authentification supplémentaires lorsque cela est nécessaire. ## Nécessite un mode de paiement Lorsque le SetupIntent est créé, il affiche l’[état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) `requires_payment_method` jusqu’à ce qu’un mode de paiement soit associé. ## Nécessite une confirmation Une fois que le client a indiqué son mode de paiement, le composant SetupIntent passe à l’état `requires_confirmation` et est prêt à être confirmé. La plupart des intégrations ignorent cet état, car elles soumettent les informations relatives au mode de paiement lorsque le composant SetupIntent est confirmé. ## Action requise Si la configuration nécessite des actions supplémentaires comme l’authentification 3D Secure, le composant SetupIntent affiche l’état `requires_action`. > #### Modifications de l’API > > Les versions de l’API antérieures au [11/02/2019](https://docs.stripe.com/upgrades.md#2019-02-11) affichent `requires_source` au lieu de `requires_payment_method` et `requires_source_action` au lieu de `requires_action`. ## En cours de traitement Une fois que les actions nécessaires ont été effectuées, le SetupIntent passe à l’état `processing` (traitement). Bien que certains modes de paiement (les cartes par exemple) puissent être traités rapidement, d’autres peuvent prendre plusieurs jours pour être traités. ## Réussi Un SetupIntent avec l’état `succeeded` signifie que la configuration a réussi. Vous pouvez désormais associer ce mode de paiement à un objet Customer et l’utiliser pour les paiements futurs. Si la configuration échoue, l’état du SetupIntent revient à `requires_payment_method`. ## Annulé Vous pouvez annuler un SetupIntent en tout temps avant qu’il ne passe à l’état `processing` ou `successed`. L’annulation invalide le SetupIntent pour toute tentative de configuration future et cette action est irréversible.