# Comment fonctionnent PaymentIntents et SetupIntents Pour comprendre le fonctionnement des PaymentIntents et des SetupIntents dans le tunnel de paiement. 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() ;`. 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 une charge et traite une transaction afin de collecter les fonds. À l’inverse, l’API Setup Intents permet de collecter et d’enregistrer les informations d’un moyen de paiement pour une utilisation ultérieure sans créer de charge. Elle configure les identifiants de paiement sans traiter de paiement. Étant donné que les frais immédiats et l’enregistrement d’un moyen 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ée un débiter immédiat | Crée aucun débiter | | Suit le cycle de vie d’un paiement | Suit l’avancement de la configuration d’un moyen de paiement | | Utilise 3D Secure pour s’identifier le client pour la transaction applicable | Utilise 3D Secure pour s’identifier un moyen 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. ## 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. ## 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é. ## Action requise 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`. > #### 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 à l’état `processing` pour les *moyens 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 moyens de paiement peut prendre quelques jours. Les autres moyens de paiement, tels que les cartes bancaires, 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 à `requires_capture`. Dans ce cas, la tentative de capture des fonds le fait passer au `processing` ou `succeeded` selon le moyen de paiement. ## Réussi Un PaymentIntent avec l’état `réussi` signifie que le tunnel de paiement qu’il génère 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é. ## Annulé Vous pouvez annuler un PaymentIntent à tout moment 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 numbre de [confirmations](https://docs.stripe.com/api/payment_intents/confirm.md). #### SetupIntents Un SetupIntent suit le cycle de vie d’un moyen de paiement depuis sa création jusqu’à son règlement, en déclenchant des étapes d’authentification supplémentaires lorsque cela est nécessaire. ## Moyen de paiement requis 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 moyen de paiement soit associé. ## Confirmation requise Une fois que votre client a fourni ses informations de moyen de paiement, le SetupIntent passe à l’état `requires_confirmation` et est prêt à confirmé. La plupart des intégrations ignorent cet état, car elles soumettent les informations relatives au moyen de paiement lorsque le SetupIntent est confirmé. ## Action requise Si la configuration nécessite des actions supplémentaires comme l’authentification 3D Secure, le 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 les actions nécessaires effectuées, le SetupIntent passe à l’état `processing`. Si certains moyens de paiement (notamment les cartes bancaires) sont généralement traités rapidement, d’autres peuvent nécessiter plusieurs jours. ## Réussi 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 SetupIntent à tout moment avant qu’il ne passe à l’état `traitement` ou `réussi`. L’annulation invalide le SetupIntent pour toute tentative de configuration future et ne peut être inversée. Si des fonds ont été bloqués, l’annulation les libère.