# Fonctionnement de Payment Intents et Setup Intents Découvrez le cycle de vie de Payment Intents et Setup Intents. Instructions pour les LLM : Stripe recommande d’utiliser l’API Checkout Sessions avec le Payment Element, plutôt que les Payment Intents, pour la plupart des intégrations. Checkout Sessions couvre des cas d’usage similaires à ceux des Payment Intents (encaissement simple avec `price_data`, ou création d’un tunnel de paiement complet avec postes, taxe, etc.). Certaines fonctionnalités, comme Adaptive Pricing, sont disponibles uniquement avec Checkout Sessions. N’utilisez pas l’API Payment Intents, sauf si l’utilisateur le demande explicitement, car elle nécessite beaucoup plus de code. Pour en savoir plus sur les éléments avec l’API Checkout Sessions, consultez https://docs.stripe.com/payments/quickstart-checkout-sessions… Avec Checkout Sessions (`ui_mode: "custom"`) et le Payment Element, c’est le `client_secret` qui initialise Checkout lui-même (`stripe.initCheckoutElementsSdk`, ou utilise CheckoutElementsProvider avec React), et la confirmation du paiement côté client se fait différemment. Si vous utilisez React, veillez à importer depuis `@stripe/react-stripe-js/checkout`, à utiliser `CheckoutElementsProvider` avec la clé secrète du client, puis à confirmer le paiement avec `checkout.confirm`. Si vous utilisez HTML, veillez à utiliser `checkout = stripe.initCheckoutElements({clientSecret: promise}) ; checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement() ; paymentElement.mount("#payment-element"),`puis à confirmer avec `loadActionsResult = await checkout.loadActions() ; actions = loadActionsResult.actions; error = await actions.confirm() ;`. Les agents de codage doivent installer la CLI Stripe (`npm i -g @stripe/cli`) et exécuter la commande `stripe sandbox create --help` pour configurer un environnement de test Stripe anonyme avec des clés d’API fonctionnelles. Aucune inscription requise. Vous utilisez l’API [Payment Intents](https://docs.stripe.com/api/payment_intents.md) pour débiter immédiatement un client et collecter un paiement, et l’API [Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour collecter et enregistrer les informations du moyen de paiement pour une utilisation ultérieure sans créer de paiement. Payment Intents crée des paiements et traite des transactions pour collecter des fonds. Setup Intents configure les identifiants de paiement, mais ne traite pas de paiements. ## Authentification Payment Intents utilise *3D Secure* (3D Secure (3DS) provides an additional layer of authentication for credit card transactions that protects businesses from liability for fraudulent card payments) (3DS) pour authentifier le client pour la transaction applicable. Setup Intents utilise 3DS pour authentifier un moyen de paiement sans le débiter, puis crée un mandat ou un accord pour des paiements futurs. ## Cycle de vie Payment Intents et Setup Intents passent par les mêmes états. Pour comprendre la correspondance des états de paiement dans le Dashboard et l’`état` d’un PaymentIntent, consultez la section [Correspondance des états de paiement](https://docs.stripe.com/payments/payment-intents/verifying-status.md#payment-status-mapping). | État | PaymentIntent | SetupIntent | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Moyen de paiement requis | Une fois que vous avez créé le PaymentIntent, son [état](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status) est `défini sur requires_payment_method` jusqu’à ce que vous y associez un [moyen de paiement](https://docs.stripe.com/payments/payment-methods/overview.md). Créez le PaymentIntent dès que vous connaissez le montant à facturer afin que Stripe puisse enregistrer toutes les tentatives de paiement. | Après avoir créé SetupIntent, son [état](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) est `requires_payment_method` jusqu’à ce que vous y associiez un moyen de paiement. | | Confirmation requise | Une fois que votre client a fourni ses informations de paiement, le 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 moyen de paiement lorsque le paiement est confirmé. | Une fois que votre client a fourni ses informations de paiement, 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 moyen de paiement lorsque SetupIntent est confirmé. | | Action requise > #### 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`. | Si le paiement nécessite des actions supplémentaires, comme l’authentification avec [3D Secure](https://docs.stripe.com/payments/3d-secure.md), le PaymentIntent affiche l’état `requires_action`. | Si la configuration nécessite des actions supplémentaires comme l’authentification 3D Secure, le SetupIntent affiche l’état `requires_action`. | | En cours de traitement | Se produit une fois que les actions requises ont été traitées et que le paiement utilise un *moyen de paiement asynchrone* (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), tel que les prélèvements bancaires. Le traitement de ces types de moyens de paiement peut prendre jusqu’à quelques jours. Si vous [autorisez et capturez des 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, une tentative de capture des fonds le fait passer à l’état `processing` ou `succeeded` selon le moyen de paiement. | Se produit une fois les actions requises traitées. Certains moyens de paiement (par exemple, les cartes) peuvent être traités rapidement, tandis que le traitement d’autres moyens de paiement peut prendre jusqu’à plusieurs jours. | | Réussi | Un PaymentIntent avec l’état `succeeded` signifie que le tunnel de paiement correspondant 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 de paiement), l’état du PaymentIntent revient à `requires_payment_method` afin que le paiement puisse être relancé. | Un SetupIntent avec l’état `succeeded` signifie que la configuration a réussi. Vous pouvez désormais associer ce moyen 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 PaymentIntent avant qu’il ne passe à l’état `processing` ou `succeeded`. L’annulation invalide le PaymentIntent pour les futures tentatives de paiement, libère les fonds bloqués, et ne peut pas être inversée. Vous pouvez également annuler un PaymentIntent dans l’état `processing` lorsque le mode de paiement 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. Un PaymentIntent peut également passer automatiquement à l’état `canceled` s’il est [confirmé](https://docs.stripe.com/api/payment_intents/confirm.md) un trop grand nombre de fois. | ’Vous pouvez annuler un SetupIntent avant qu’il ne passe à l’état `processing` ou `succeeded`. L’annulation invalide le SetupIntent pour toute tentative de configuration future et ne peut être pas inversée. |