Pour savoir si un paiement vient d’être validé, deux stratégies existent : interroger le service de paiement toutes les minutes en espérant tomber au bon moment, ou lui demander de prévenir directement dès que l’événement survient. Le webhook, c’est cette deuxième approche : le service tiers envoie de lui-même une requête HTTP (généralement POST) vers une URL définie à l’avance, dès qu’un événement précis se produit chez lui.
Webhooks côté WordPress
WooCommerce expose un système de webhooks natif (réglages « WooCommerce > Réglages > Avancé > Webhooks ») qui peut notifier une URL externe à chaque commande créée, payée ou remboursée. Dans l’autre sens, un thème ou une extension crée une route dédiée pour recevoir les webhooks d’un service externe (Stripe, un CRM) via register_rest_route() ou une simple action liée à init qui écoute une URL spécifique.
Exemple
POST /wp-json/mon-app/v1/webhook-stripe HTTP/1.1
Content-Type: application/json
{"type":"payment_intent.succeeded","data":{...}}
Pièges fréquents
- Ne pas vérifier la signature du webhook (souvent fournie dans un en-tête dédié) : sans cette vérification, n’importe qui connaissant l’URL peut envoyer de fausses notifications.
- Traiter un webhook de façon trop lente : la plupart des services annulent l’appel après quelques secondes sans réponse et considèrent l’envoi en échec, provoquant des doublons de tentative.
- Confondre webhook et API classique : un webhook est initié par le service distant, pas par le site qui le reçoit, ce qui inverse le sens habituel de l’appel.