Traiter les commandes
Découvrez comment traiter les paiements reçus avec l’API Checkout Sessions.
Lorsque vous recevez un paiement avec l’API Checkout Sessions, il se peut que vous deviez déclencher des actions pour fournir à votre client ce pour quoi il a payé. Par exemple, vous devrez peut-être lui accorder l’accès à un service ou lui expédier des biens physiques. Ce processus est connu sous le nom de traitement des commandes, et vous avez deux façons de procéder :
- Manuellement : vous pouvez réaliser manuellement des commandes en utilisant les informations que Stripe met à votre disposition. Par exemple, vous pouvez surveiller le Dashboard, vérifier les e-mails de notification de paiement ou consulter les rapports, puis réaliser les commandes.
- Automatiquement : vous pouvez mettre en place un système d’exécution automatique. Recommended
La première option convient pour les projets expérimentaux ou à faible volume, mais pour la plupart des situations, nous recommandons d’automatiser la réalisation des commandes. La suite de ce guide vous montre comment mettre en place un système d’exécution automatique.
Exécution automatique
Le système d’exécution automatique décrit ci-dessous utilise une combinaison de webhooks et une redirection vers votre site Web pour déclencher la réalisation de la commande. Vous devez utiliser les webhooks pour vous assurer que celle-ci est effectuée pour chaque paiement, et les redirections permettent à vos clients d’accéder aux services ou aux détails du traitement de la commande immédiatement après le paiement.
Créer une fonction de réalisationCôté serveur
Créez une fonction sur votre serveur pour initier le traitement une fois les paiements effectués. Les webhooks en place déclencheront cette fonction, qui sera appelée lorsque les clients seront renvoyés sur votre site Web après avoir effectué le paiement. Ce guide fait référence à cette fonction sous le nom de fulfill_
, mais vous pouvez lui donner un autre nom.
Votre fonction fulfill_
doit :
- Gérer correctement le fait d’être appelée plusieurs fois avec le même identifiant de session Checkout.
- Accepter un ID de Session Checkout comme argument.
- Récupérer la session Checkout depuis l’API avec la propriété line_items étendue.
- Vérifier la propriété payment_status pour déterminer si le traitement doit être déclenché.
- Lancer le traitement des postes de facture.
- Enregistrer l’état du traitement pour la session Checkout fournie.
Utilisez le code ci-dessous comme point de départ pour votre fonction fulfill_
. Les commentaires TODO
indiquent les fonctionnalités que vous devez implémenter.
Remarque
Les extraits de code ci-dessous peuvent nommer la fonction fulfill_
fulfillCheckout
ou FulfillCheckout
selon la le langage sélectionné. Il s’agit bien d’une même fonction.
Remarque
Si une session Checkout comporte de nombreux postes, utilisez la pagination automatique avec l’API pour les postes Checkout pour les récupérer tous.
En fonction des moyens de paiement que vous acceptez et des besoins de votre activité, vous pouvez demander à votre fonction fulfill_
d’effectuer les opérations suivantes :
- Fournir l’accès aux services.
- Déclencher l’envoi des marchandises.
- Enregistrer une copie des détails du paiement et des postes de la commande dans votre base de données.
- Envoyer à votre client un reçu personnalisé par e-mail si vous n’avez pas activé les reçus de Stripe.
- Rapprocher les postes et les quantités achetées si vous autorisez les clients à ajuster les quantités dans Checkout.
- Actualiser les registres d’inventaire ou de stock.
Créer un gestionnaire d'événement de paiementCôté serveur
Pour déclencher le traitement, créez un gestionnaire d’événements webhook pour écouter les événements de paiement et lancer votre fonction fulfill_
.
Lorsqu’un règlement est effectué, un événement checkout.
est créé. Configurez un endpoint sur votre serveur pour accepter, traiter et confirmer la réception de ces événements.
Immediate versus delayed payment methods
Some payment methods aren’t instant, such as ACH direct debit and other bank transfers. This means, funds won’t be immediately available when Checkout completes. Delayed payment methods generate a checkout.session.async_payment_succeeded event when payment succeeds later. The status of the object is in processing until the payment status either succeeds or fails.
Remarque
Le secret du webhook (whsec_
) indiqué dans le code ci-dessous provient soit de la CLI Stripe, soit de votre endpoint de webhook. Vous pouvez utiliser la CLI Stripe pour des tests locaux, et Stripe utilise un endpoint de webhook pour envoyer des événements à votre gestionnaire d’événements lorsqu’il est exécuté sur un serveur. Voir la section suivante pour plus de détails.
Vous pouvez également vouloir écouter et gérer les événements checkout.
. Par exemple, vous pouvez envoyer un e-mail à votre client en cas d’échec d’un paiement différé.
Testez votre gestionnaire d'événements localement
La manière la plus rapide de développer et de tester votre gestionnaire d’événement webhook est d’utiliser le CLI Stripe. Si vous ne l’avez pas, suivez le guide d’installation pour commencer.
Lorsque le CLI Stripe est installé, vous pouvez tester votre gestionnaire d’événements localement. Lancez votre serveur (par exemple, sur localhost:4242
), puis exécutez la commande stripe listen pour que le CLI Stripe transmette les événements à votre serveur local :
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_<REDACTED>' (^C to quit)
Ajoutez le secret du webhook (whsec_
) à votre code de gestion des événements, puis testez le traitement en utilisant Checkout en tant que client.
Lorsque le paiement est terminé, vérifiez les points suivants :
- Sur votre ligne de commande, où
stripe listen
est en cours d’exécution, il montre un événementcheckout.
transmis à votre serveur local.session. completed - Les journaux de votre serveur montrent la sortie attendue de votre fonction
fulfill_
.checkout
Créer un endpoint de webhook
Un fois vos tests effectués en local, lancez votre gestionnaire d’événements webhook sur votre serveur. Ensuite, créez un endpoint de webhook pour envoyer les événements checkout.
à votre serveur, puis testez à nouveau le tunnel de paiement.
Déclencher la réalisation sur votre page d'accueilRecommandé
L’écoute des webhooks est nécessaire pour s’assurer que vous déclenchez toujours le traitement pour chaque paiement, mais les webhooks peuvent parfois être retardés. Pour optimiser votre tunnel de paiement et garantir un traitement immédiat lorsque votre client est présent, déclenchez également le traitement depuis votre page d’accueil. Vous pouvez configurer la page d’accueil en transmettant return_url lors de la création de la session Checkout, ou en transmettant returnUrl à confirm
sur le front-end.
Utilisez l’ID de session Checkout de l’URL que vous avez spécifiée pour effectuer les opérations suivantes :
- Lorsque votre serveur reçoit une requête pour votre page d’accueil de paiement, extrayez l’ID de session Checkout de l’URL.
- Exécutez votre fonction
fulfill_
avec l’identifiant fourni.checkout - Affichez la page une fois la tentative de réalisation terminée.
Lorsque vous affichez votre page d’accueil, vous pouvez présenter les éléments suivants :
- Détails du processus de réalisation de la commande.
- Liens ou informations sur les services auxquels le client a désormais accès.
- Détails relatifs à l’expédition ou à la logistique des biens physiques.
Les webhooks sont nécessaires
Vous ne pouvez pas compter uniquement sur votre page d’accueil de paiement pour déclencher le traitement, car il n’est pas garanti que vos clients visitent cette page. Par exemple, quelqu’un peut effectuer avec succès un paiement, puis perdre sa connexion à Internet avant le chargement de votre page d’accueil.
Configurez un gestionnaire d’événements de webhook pour que Stripe envoie des événements de paiement directement à votre serveur, sans passer par le client. Les webhooks constituent le moyen le plus fiable de confirmer la réception de vos paiements. Si l’envoi d’un événement webhook échoue, Stripe réessaie plusieurs fois.