Traiter des commandes avec Checkout
Suite à votre intégration de Stripe Checkout ou votre création d’un lien de paiement Stripe pour diriger vos clients vers un formulaire de paiement, vous devez recevoir une notification que vous pouvez traiter leur commande après le paiement.
Dans ce guide, vous apprendrez à :
- recevoir une notification d’événement lorsqu’un client vous paie ;
- gérer l’événement ;
- utiliser l’interface de ligne de commande Stripe pour tester rapidement votre nouveau gestionnaire d’événements ;
- gérer éventuellement d’autres moyens de paiement ;
- activer votre gestionnaire d’événements en mode production.
Installer l'interface de ligne de commande Stripe
Le moyen le plus rapide de développer et de tester des webhooks localement est d’utiliser l’interface de ligne de commande Stripe.
Dans un premier temps, suivez le guide d’installation de l’interface de ligne de commande Stripe.
Une fois que vous avez installé l’interface de ligne de commande Stripe et que vous avez terminé le processus de connexion, vous pouvez passer à l’étape suivante.
Créer votre gestionnaire d'événementsCôté serveur
Dans cette section, vous allez créer un petit gestionnaire d’événements afin que Stripe puisse vous envoyer un événement checkout.session.completed
lorsque qu’un client effectue le règlement.
Tout d’abord, créez un nouveau routage pour votre gestionnaire d’événements. Commencez par imprimer l’événement que vous recevez. Vous vérifierez que la livraison fonctionne dans l’étape suivante :
Tests
Lancez votre serveur (par exemple, sur localhost:4242
). Ensuite, configurez l’interface de ligne de commande Stripe pour qu’elle transmette les événements à votre serveur local afin que vous puissiez tester votre gestionnaire d’événements localement :
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_<REDACTED>' (^C to quit)
Ensuite, utilisez Checkout en tant que client :
- Cliquez sur votre bouton de règlement (vous avez dû le configurer dans le guide Accepter un paiement)
- Remplissez votre formulaire de paiement avec des données de test
- Saisissez
4242 4242 4242 4242
comme numéro de carte bancaire - Saisissez n’importe quelle date future comme date d’expiration
- Saisissez n’importe quel code CVC à 3 chiffres
- Saisissez un code postal pour la facturation (
90210
)
- Saisissez
- Cliquez sur le bouton Payer
Vous devriez voir :
- un
checkout.session.completed
à la sortie dustripe listen
- un relevé imprimé des journaux d’événements de votre serveur comprenant l’événement
checkout.session.completed
.
Maintenant que vous avez vérifié la réception de l’événement, vous pouvez renforcer la sécurité pour vous assurer que les événements proviennent uniquement de Stripe.
Vérifier que les événements proviennent de Stripe
N’importe qui peut PUBLIER des données sur votre gestionnaire d’événements. Avant de traiter un événement, vérifiez toujours qu’il provient bien de Stripe avant de lui faire confiance. La bibliothèque officielle Stripe propose une assistance intégrée pour vérifier les événements webhook, avec laquelle vous pourrez actualiser votre gestionnaire d’événements :
Tests
Examinez le flux de test de l’étape précédente. Vous devriez encore voir l’événement checkout.session.completed
s’imprimer avec succès.
Essayez maintenant de transmettre une requête non signée à votre endpoint :
curl -X POST \ -H "Content-Type: application/json" \ --data '{ "fake": "unsigned request" }' \ -is http://localhost:4242/webhook HTTP/1.1 400 Bad Request ... more headers
Vous devriez obtenir une erreur 400 Bad Request
parce que vous avez essayé d’envoyer une requête non signée à votre endpoint.
Maintenant que les bases du gestionnaire d’événements sont établies, vous pouvez passer au traitement de la commande.
Traiter la commandeCôté serveur
Pour traiter la commande, gérez l’événement checkout.session.completed
. En fonction des moyens de paiement que vous acceptez (par exemple, carte bancaire, porte-monnaie électronique), il se peut que vous ayez d’autres événements à gérer. Cet événement inclut l’objet Checkout Session, qui contient des informations sur votre client et son paiement. Lorsque vous gérez cet événement, vous pouvez également prendre en compte les éléments suivants :
- sauvegarder une copie de la commande dans votre propre base de données ;
- envoyer un reçu par e-mail au client ;
- rapprocher les postes et les quantités achetées par le client si vous utilisez
line_item.adjustable_quantity
. Si la session Checkout comporte de nombreux postes de facture, vous pouvez les parcourir à l’aide de la propriété line_items.
Gérer le comportement de redirection
Vous pouvez configurer Checkout de façon à rediriger vos clients après avoir reçu des événements webhook. Checkout gère ces redirections déclenchées par le webhook de manière légèrement différente selon que vous utilisez le formulaire intégré ou une page hébergée par Stripe.
Page hébergée par Stripe | Votre endpoint de webhook redirige votre client vers l’URL success_url après que vous confirmez avoir reçu l’événement. Si votre endpoint est hors service ou si l’événement n’est pas confirmé correctement, votre gestionnaire redirige le client vers l’URL success_url 10 secondes après la finalisation du paiement. |
Formulaire intégré | Votre endpoint de webhook redirige immédiatement votre client vers la page return_url . Vous n’avez pas besoin d’accuser réception de l’événement. |
Tests
Vérifiez que stripe listen
est toujours en cours d’exécution. Testez Checkout en tant qu’utilisateur comme dans les étapes précédentes. Votre gestionnaire d’événements devrait recevoir un événement checkout.session.completed
et vous devriez l’avoir géré avec succès.
Gérer les moyens de paiement à notification différéeCôté serveur
Mise en garde
Cette étape n’est nécessaire que si vous prévoyez d’utiliser l’un des moyens de paiement suivants : prélèvement automatique Bacs, virement bancaire, Boleto, prélèvement automatique canadien, Konbini, OXXO, prélèvement automatique SEPA, SOFORT ou prélèvement automatique ACH.
Lorsque vous recevez des paiements avec un moyen de paiement à notification différée, les fonds ne sont pas immédiatement disponibles. Le traitement des fonds peut prendre plusieurs jours. Vous devez donc retarder le traitement de la commande jusqu’à ce que les fonds soient disponibles sur votre compte. Une fois le paiement effectué, l’état du PaymentIntent sous-jacent passe de processing
à succeeded
.
Vous devrez gérer les événements Checkout suivants :
Nom de l’événement | Description | Étapes suivantes |
---|---|---|
checkout.session.completed | Le client a autorisé le paiement par prélèvement en envoyant le formulaire Checkout. | Attendez que le paiement aboutisse ou échoue. |
checkout.session.async_payment_succeeded | Le paiement du client a abouti. | Traitez la commande de biens ou de services. |
checkout.session.async_payment_failed | Le paiement a été refusé, ou il a échoué pour une autre raison. | Contactez votre client par e-mail et demandez-lui de passer une nouvelle commande. |
Ces événements contiennent tous l’objet Checkout Session.
Actualisez votre gestionnaire d’événements pour traiter la commande :
Test
Vérifiez que stripe listen
est toujours en cours d’exécution. Testez Checkout en tant qu’utilisateur, comme vous l’avez fait dans les étapes précédentes. Votre gestionnaire d’événements devrait recevoir un événement checkout.session.completed
et vous devriez l’avoir géré avec succès.
Maintenant que vous avez suivi ces étapes, vous pouvez passer en mode production quand bon vous semble.
Passer en mode production
Une fois que vous avez déployé votre endpoint de gestionnaire d’événements en mode production, vous devez enregistrer votre URL de production auprès de Stripe. Suivez le guide pour enregistrer un webhook.