Comment fonctionnent PaymentIntents et SetupIntents
Pour comprendre le fonctionnement des PaymentIntents et des SetupIntents dans le tunnel de paiement.
La principale différence entre l’API Payment Intents et l’API Setup Intents réside dans leur objectif. L’API Payment Intents sert à collecter le paiement et à débiter immédiatement le client. Elle crée une transaction et traite l’opération afin de collecter les fonds. L’API Setup Intents, quant à elle, sert à collecter et à enregistrer les informations relatives au moyen de paiement en vue d’une utilisation future, sans créer de transaction. Elle configure les informations d’identification de paiement sans traiter le paiement.
Étant donné que les frais immédiats et l’enregistrement d’un moyen de paiement peuvent nécessiter des étapes asynchrones de la part du client, ces API utilisent le même modèle d’état-machine.
API Payment Intent
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
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 est défini sur requires_payment_method jusqu’à ce que vous y associiez un moyen de paiement. 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, le PaymentIntent affiche l’état requires_action.
Modifications de l’API
Les versions de l’API antérieures au 11/02/2019 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, 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 des fonds séparément, votre PaymentIntent peut passer à l’état requires_capture. Dans ce cas, toute tentative de capture de fonds le fera passer à processing.
Réussi
Un PaymentIntent avec l’état succeeded 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. Si la tentative de paiement échoue (par exemple en raison d’un refus), l’état du PaymentIntent revient à requires_payment_method afin que le paiement puisse être réessayé.
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, ACSS, AU BECS, BACS, NZ BECS ou SEPA. 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.