Recevoir des événements Stripe dans votre endpoint de webhook
Écoutez les événements de votre compte Stripe sur votre endpoint de webhook pour que votre intégration déclenche automatiquement les réactions appropriées.
Envoyer des événements à votre compte AWS
Vous pouvez désormais envoyer des événements directement à Amazon EventBridge en tant que destination d’événement.
Lors de la création d’intégrations Stripe, il est possible que vous souhaitiez que vos applications reçoivent les événements au fur et à mesure qu’ils se déclenchent dans vos comptes Stripe, afin que vos systèmes back-end exécutent des actions en conséquence.
Créez une destination d’événement pour recevoir des événements à un endpoint de webhook HTTPS. Une fois que vous avez enregistré l’endpoint de webhook, Stripe peut transmettre des données d’événement en temps réel à l’endpoint de webhook de votre application lorsque des événements surviennent sur votre compte Stripe. Stripe utilise HTTPS pour envoyer des événements de webhook à votre application en tant que charge utile JSON qui inclut un objet Event.
La réception d’événements webhook est particulièrement utile pour écouter des événements asynchrones tels que la confirmation d’un paiement par la banque d’un client, la contestation d’un paiement par un client, l’aboutissement d’un paiement récurrent ou l’encaissement des paiements d’un abonnement.
Vous pouvez également recevoir des événements dans Amazon EventBridge avec des destinations d’événements.
Démarrer
Pour recevoir des événements webhook dans votre application :
- Créez un gestionnaire de endpoints de webhook pour recevoir des requêtes POST de données d’événement.
- Testez votre gestionnaire de endpoints de webhook à l’aide de la CLI Stripe.
- Créez une nouvelle destination d’événement pour votre endpoint de webhook.
- Sécurisez votre endpoint de webhook.
Vous pouvez enregistrer et créer un endpoint pour gérer plusieurs types d’événements en même temps, ou configurer des endpoints individuels pour des événements spécifiques.
Créer un gestionnaire
Configurez une fonction endpoint HTTP ou HTTPS pouvant accepter des requêtes de webhook avec une méthode POST. Si votre fonction endpoint est toujours en développement sur votre machine locale, elle peut utiliser le protocole HTTP. Une fois rendue publique, elle devra utiliser le protocole HTTPS.
Configurez votre fonction endpoint de façon à ce qu’elle :
- Gère les requêtes POST avec une charge utile JSON composée d’un objet Event.
- Renvoie rapidement un code d’état réussi (
2xx
) avant le déclenchement de toute logique complexe qui pourrait provoquer une expiration du délai imparti. Par exemple, vous devez renvoyer une réponse200
avant de mettre à jour la facture d’un client comme étant payée dans votre système comptable.
Remarque
Vous pouvez également créer une fonction endpoint de webhook dans votre langage de programmation à l’aide de notre créateur interactif d’endpoint de webhook.
Exemple de endpoint
Cet extrait de code est une fonction webhook configurée pour vérifier que le type d’événement a été reçu, pour gérer l’événement et pour renvoyer une réponse 200.
Tester votre gestionnaire
Avant de mettre en production votre fonction endpoint de webhook, nous vous recommandons de tester l’intégration de votre application. Pour ce faire, configurez un écouteur local pour envoyer des événements à votre ordinateur local, puis envoyez des événements de test. Vous devez utiliser la CLI pour effectuer le test.
Transmettre des événements à un endpoint local
Pour transférer des événements vers votre endpoint local, exécutez la commande suivante avec l’interface de ligne de commande afin de configurer un écouteur local. L’indicateur --forward-to
envoie tous les événements Stripe en mode test à votre endpoint de webhook local.
stripe listen --forward-to localhost:4242/webhook
Remarque
Vous pouvez également exécuter la commande stripe listen sur le Shell Stripe pour voir les événements via le terminal shell Stripe, même si vous ne serez pas en mesure de transférer les événements du shell vers votre endpoint local.
Voici quelques exemples de configurations utiles pour vous aider à effectuer vos tests avec votre écouteur local :
- Pour désactiver la vérification des certificats HTTPS, utilisez le flag facultatif
--skip-verify
. - Pour ne transférer que des événements spécifiques, utilisez le flag facultatif
--events
et transmettez une liste d’événements séparés par des virgules.
stripe listen --events payment_intent.created,customer.created,payment_intent.succeeded,checkout.session.completed,payment_intent.payment_failed \ --forward-to localhost:4242/webhook
- Pour transférer des événements vers votre endpoint de webhook local à partir du endpoint de webhook public que vous avez déjà enregistré sur Stripe, utilisez le flag facultatif
--load-from-webhooks-api
. Il charge votre endpoint enregistré, analyse le chemin d’accès et ses événements enregistrés, puis ajoute le chemin d’accès à votre endpoint de webhook local à--forward-to path
.
stripe listen --load-from-webhooks-api --forward-to localhost:4242/webhook
- Pour vérifier les signatures de webhook, utilisez le paramètre
{{WEBHOOK_
dans la sortie initiale de la commande listen.SIGNING_ SECRET}}
Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Déclencher des événements test
Pour envoyer des événements de test, déclenchez un type d’événement auquel votre webhook est abonné en créant manuellement un objet dans le Dashboard Stripe. Vous pouvez également utiliser la commande suivante dans le Shell Stripe ou dans l’interface de ligne de commande Stripe.
Cet exemple déclenche un événement payment_
:
stripe trigger payment_intent.succeeded Running fixture for: payment_intent Trigger succeeded! Check dashboard for event details.
Découvrez comment déclencher des événements avec Stripe pour VS Code.
Enregistrer votre endpoint
Après avoir testé la fonction de votre endpoint de webhook, utilisez l’ API ou l’onglet Webhooks de Workbench pour enregistrer l’URL accessible de votre endpoint de webhook afin que Stripe sache où envoyer les événements. Vous pouvez enregistrer jusqu’à 16 endpoints de webhook avec Stripe. Les endpoints de webhook enregistrés doivent être des URL HTTPS accessibles publiquement.
Format d’URL de webhook
Le endpoint de webhook doit être enregistré avec le format d’URL suivant :
https://<your-website>/<your-webhook-endpoint>
Par exemple, si votre domaine est https://mycompanysite.
et que le chemin vers votre endpoint de webhook est @app.
, spécifiez https://mycompanysite.
comme URL d’endpoint.
Créer une destination d’événement pour votre endpoint de webhook
Créez une destination d’événement à l’aide de Workbench dans le Dashboard ou par programmation avec l’API. Vous pouvez enregistrer jusqu’à 16 destinations d’événements sur chaque compte Stripe.
Remarque
Workbench remplace le Dashboard des développeurs existant. Si vous utilisez encore le Dashboard des développeurs, découvrez comment créer un nouvel endpoint de webhook.
Sécuriser votre endpoint
Vous devez sécuriser votre intégration en vous assurant que votre gestionnaire vérifie que toutes les requêtes webhook sont générées par Stripe. Vous pouvez vérifier les signatures de webhook à l’aide de nos bibliothèques officielles ou les vérifier manuellement.
Déboguer des intégrations de webhooks
Plusieurs types de problèmes peuvent survenir lors de la remise d’événements à votre endpoint de webhook :
- Il est possible que Stripe ne parvienne pas à remettre un événement à votre endpoint de webhook.
- Votre endpoint de webhook comporte peut-être une erreur SSL.
- Votre connexion réseau est intermittente.
- Votre endpoint de webhook ne reçoit pas les événements attendus.
Afficher les remises d’événements
Pour afficher les remises d’événements, sélectionnez l’endpoint de webhook dans l’onglet Webhooks, puis sélectionnez l’onglet Événements.
L’onglet Événements fournit une liste d’événements et indique leur état : Delivered
, Pending
ou Failed
. Cliquez sur un événement pour afficher Delivery attempts
, qui inclut le code d’état HTTP des précédentes tentatives de remise et l’heure des remises à venir en attente.

Pour visualiser les tentatives de remise d’événements, ouvrez l’onglet Événements d’un endpoint de webhooks.
Corriger les codes d’état HTTP
Lorsqu’un événement affiche un code d’état 200
, cela indique qu’il a bien été remis au endpoint de webhook. Vous pouvez aussi recevoir un code d’état autre que 200
. La liste ci-après détaille les codes d’état fréquents pour le protocole HTTPS, ainsi que les solutions préconisées.
État des webhooks en attente | Description | Rectifier |
---|---|---|
ERR (connexion impossible) | Nous ne parvenons pas à établir une connexion avec le serveur de destination. | Assurez-vous que votre domaine d’hébergement est accessible publiquement sur internet. |
(302 ) ERR (ou autre état 3xx ) | Le serveur de destination a tenté de rediriger la requête vers un autre emplacement. Nous considérons les réponses de redirection aux requêtes de webhook comme des échecs. | Définissez la destination de votre endpoint de webhook vers l’URL déterminée par la redirection. |
ERR (400 ) (ou autre état 4xx ) | Le serveur de destination ne parvient pas à traiter ou rejette la requête. Cela peut se produire si le serveur détecte une erreur (400 ), si l’URL de destination présente des restrictions d’accès (401 , 403 ) ou si l’URL de destination n’existe pas (404 ). |
|
(500 ) ERR (ou autre état 5xx ) | Le serveur de destination a rencontré une erreur lors du traitement de la requête. | Vérifiez les logs de votre application pour comprendre pourquoi vous recevez une erreur 500 . |
ERR (erreur TLS) | Nous n’avons pas pu établir de connexion sécurisée avec le serveur de destination. Un problème avec le certificat SSL/TLS ou un certificat intermédiaire dans la chaîne de certificats du serveur de destination est généralement à l’origine de ces erreurs. La version de TLS requise par Stripe est la version v1.2 ou ultérieure. | Pour identifier d’éventuels problèmes pouvant engendrer cette erreur, effectuez un test du serveur SSL. |
ERR (expiré) | Le serveur de destination a mis trop de temps à répondre à la requête de webhook. | Veillez à reporter la logique complexe et à renvoyer immédiatement une réponse positive dans votre code de gestion des webhooks. |
Comportements de remise d’événements
Cette section vous aide à comprendre les différents comportements auxquels vous pouvez vous attendre concernant la manière dont Stripe envoie des événements à votre endpoint de webhook.
Retentatives automatiques
Stripe tente de livrer des événements à votre destination pendant un maximum de trois jours avec un recul exponentiel en mode production. Le cas échéant, vous pouvez voir quand la prochaine tentative aura lieu dans l’onglet Événements envoyés de votre destination d’événement. Les livraisons d’événements créées dans un environnement de test sont relancées trois fois en l’espace de quelques heures. Si votre destination a été désactivée ou supprimée lorsque nous effectuons une nouvelle tentative de remise, nous annulons toute relance ultérieure de cet événement. Toutefois, si vous désactivez puis réactivez la destination de l’événement avant que nous ne puissions effectuer la relance, les tentatives ultérieures seront toujours visibles.
Retentatives manuelles
There are two ways to manually retry events:
- In the Stripe Dashboard, click Resend when looking at a specific event. This works for up to 15 days after the event creation.
- With the Stripe CLI, run the
stripe events resend <event_
command. This works for up to 30 days after the event creation.id> --webhook-endpoint=<endpoint_ id>
Ordre des événements
Stripe ne garantit pas la remise des événements dans l’ordre dans lequel ils ont été générés. Par exemple, la création d’un abonnement peut générer les événements suivants :
customer.
subscription. created invoice.
created invoice.
paid charge.
(si un paiement a lieu)created
Assurez-vous que la destination de votre événement ne dépend pas de la réception des événements dans un ordre spécifique. Soyez prêt à gérer correctement leur livraison. Vous pouvez également utiliser l’API pour récupérer les éventuels objets manquants. Par exemple, vous pouvez récupérer les objets invoice, charge et subscription avec les informations de invoice.
si vous recevez cet événement en premier.
Gestion des versions de l’API
La version de l’API dans les paramètres de votre compte au moment de l’événement détermine sa version, et détermine ainsi la structure d’un Event envoyé à votre destination. Par exemple, si votre compte est défini sur une ancienne version d’API telle que celle du 16-02-2015 et que vous modifiez la version d’API pour une demande spécifique avec la gestion des versions, l’objet Event généré et envoyé à votre destination est toujours basé sur la version d’API du 16-02-2015. Vous ne pouvez pas modifier les objets Event après leur création. Par exemple, si vous mettez à jour un paiement, l’événement de paiement d’origine reste inchangé. Par conséquent, les mises à jour ultérieures de la version de l’API de votre compte ne modifient pas rétroactivement les objets Event existants. La récupération d’un ancien Event en appelant /v1/events
à l’aide d’une version plus récente de l’API n’a pas non plus d’impact sur la structure de l’événement reçu. Vous pouvez définir les destinations des événements de test en fonction de votre version d’API par défaut ou de la dernière version d’API. L’objet Event envoyé à la destination est structuré en fonction de la version spécifiée pour la destination de l’événement.
Bonnes pratiques pour l’utilisation des webhooks
Passez en revue ces bonnes pratiques pour vous assurer que vos webhooks restent sécurisés et fonctionnent bien avec votre intégration.
Gérer les événements en double
Les endpoints de webhook peuvent parfois recevoir plusieurs fois le même événement. Vous pouvez vous prémunir contre ce phénomène en enregistrant l’ID des événements que vous avez traités, puis ignorer les événements déjà enregistrés.
Dans certains cas, deux objets Event distincts sont générés et envoyés. Pour identifier ces doublons, utilisez l’ID de l’objet dans data.
ainsi que le type d’événement (event.
).
Écouter uniquement les types d’événements requis par votre intégration
Configurez vos endpoints de webhook de sorte à ne recevoir que les types d’événements requis par votre intégration. L’écoute d’événements supplémentaires (ou de tous les événements) alourdit inutilement la charge de votre serveur, c’est pourquoi nous vous déconseillons cette pratique.
Vous pouvez modifier les événements qu’un endpoint de webhook reçoit dans le Dashboard ou à l’aide de l’API.
Gérer les événements de manière asynchrone
Configurez votre gestionnaire de façon à traiter les événements entrants avec une file d’attente asynchrone. Si vous choisissez de traiter les événements de manière synchrone, vous risquez de rencontrer des problèmes d’évolutivité. Une hausse importante des remises de webhooks (en début de mois par exemple, lors du renouvellement des abonnements) peut submerger vos hôtes de endpoints.
Les files d’attente asynchrones vous permettent de traiter les événements simultanés à un rythme que votre système adapté à votre système.
Exempter la route des webhooks de la protection CSRF
Si vous utilisez Rails, Django ou une autre infrastructure Web, il est possible que votre site vérifie automatiquement que chaque requête POST contient un token CSRF. Il s’agit d’une fonctionnalité de sécurité importante qui vous protège, vous et vos utilisateurs, contre les tentatives de falsification de requêtes intersites. Cependant, cette mesure de sécurité peut également empêcher votre site de traiter des événements légitimes. Dans ce cas, vous devrez peut-être retirer la protection CSRF du chemin des webhooks.
Recevoir des événements sur un serveur HTTPS
Si vous utilisez une URL HTTPS pour votre endpoint de webhook (obligatoire en mode production), Stripe vérifie que la connexion à votre serveur est sécurisée avant d’envoyer les données de votre webhook. Pour que ce processus fonctionne, votre serveur doit être configuré de sorte à prendre en charge le protocole HTTPS et disposer d’un certificat valide. Les webhooks de Stripe prennent uniquement en charge les versions de TLS v1.2 et v1.3.
Invalider régulièrement les clés secrètes de signature des endpoints
La clé secrète utilisée pour vérifier que les événements proviennent de Stripe peut être modifiée dans la section Webhooks de Workbench. Pour assurer leur sécurité, nous vous recommandons d’invalider (changer) les clés secrètes à intervalles réguliers ou lorsque vous soupçonnez que l’une d’entre elles est compromise.
Pour invalider une clé secrète :
- Dans l’onglet Webhooks de Workbench, cliquez sur chaque endpoint dont vous souhaitez invalider la clé secrète.
- Accédez au menu déroulant () et cliquez sur Invalider la clé secrète. Vous pouvez choisir de faire expirer immédiatement la clé secrète actuelle ou de retarder son expiration de 24 heures (maximum) pour vous laisser le temps de mettre à jour le code de vérification sur votre serveur. Dans l’intervalle, plusieurs clés secrètes seront actives pour le endpoint concerné. Stripe génère une signature par clé secrète jusqu’à son expiration.
Vérifier que les événements sont envoyés par Stripe
Stripe envoie des événements webhook à partir d’une liste définie d’adresses IP. Ne faites confiance qu’aux événements provenant de ces adresses IP.
Vérifiez également les signatures de webhook pour vous assurer que les événements reçus sont bien envoyés par Stripe. Stripe signe les événements webhook envoyés vers vos endpoints en incluant une signature dans l’en-tête Stripe-Signature
de chaque événement. Cela vous permet de vérifier que les événements ont été envoyés par Stripe et non par un tiers. Vous pouvez vérifier les signatures à l’aide de nos bibliothèques officielles ou manuellement en utilisant votre propre solution.
La section suivante décrit comment vérifier les signatures de webhook :
- Récupérez la clé secrète de votre endpoint.
- Vérifiez la signature.
Récupérer la clé secrète de votre endpoint
Utilisez Workbench et accédez à l’onglet Webhooks pour afficher tous vos endpoints. Sélectionnez un endpoint pour lequel vous souhaitez obtenir la clé secrète, puis cliquez sur Cliquer pour révéler.
Stripe génère une clé secrète unique pour chaque endpoint. Si vous utilisez le même endpoint pour les clés API de test et de production, la clé secrète est différente pour chacune d’elles. En outre, si vous utilisez plusieurs endpoints, vous devez obtenir une clé secrète pour chacun de ceux dont vous souhaitez vérifier les signatures. Une fois cette configuration terminée, Stripe commence à signer chaque webhook qu’il envoie à l’endpoint.
Prévenir les attaques par rejeu
Une attaque par rejeu se produit lorsqu’un attaquant intercepte une charge utile valide et sa signature, puis les retransmet. Pour limiter ce type d’attaques, Stripe inclut un horodatage dans l’en-tête Stripe-Signature
. Comme cet horodatage fait partie de la charge utile signée, il est également vérifié par la signature. Un attaquant ne peut donc pas modifier l’horodatage sans invalider la signature. Si la signature est valide mais que l’horodatage est trop ancien, votre application peut refuser la charge utile.
Nos bibliothèques ont une tolérance par défaut de 5 minutes entre l’horodatage et l’heure actuelle. Vous pouvez modifier cette tolérance en fournissant un paramètre supplémentaire lors de la vérification des signatures. Utilisez le protocole Network Time Protocol (NTP) pour vous assurer que l’heure de votre serveur est correcte et synchronisée avec celle des serveurs de Stripe.
Erreur fréquente
N’utilisez pas une valeur de tolérance de 0
, sous peine de désactiver entièrement le contrôle de récence.
Stripe génère l’horodatage et la signature chaque fois que nous envoyons un événement à votre endpoint. Si Stripe tente à nouveau de transmettre un événement (par exemple, si votre endpoint a précédemment répondu avec un code d’état autre que 2xx
), nous générons une nouvelle signature et un nouvel horodatage pour la nouvelle tentative de remise.
Renvoyer rapidement une réponse 2xx
Votre endpoint doit renvoyer rapidement un code d’état réussi (2xx
) avant le déclenchement de toute logique complexe qui pourrait provoquer une expiration du délai imparti. Par exemple, vous devez renvoyer une réponse 200
avant de mettre à jour la facture d’un client comme payée dans votre système comptable.