Guide · WooCommerce

Tracker les ventes WooCommerce sans extension

Votre boutique sait ce qu'elle a vendu. Elle ne sait pas quelle newsletter, quelle story ou quelle publication l'a vendu. Le crochet existe déjà dans WooCommerce : il ne manque que l'appel.

Les deux routes, et celle qui ne marche pas

Le webhook natif

  • Réglages → Avancé → Webhooks : rien à coder
  • Aucun en-tête personnalisé possible
  • Signe avec X-WC-Webhook-Signature, et rien d'autre
  • Ne peut donc pas joindre l'API de Subtraq
  • Utile uniquement pour prévenir un intermédiaire

Douze lignes de PHP

  • Le crochet woocommerce_payment_complete
  • wp_remote_post pose l'en-tête Authorization
  • Aucune extension, aucun abonnement de plus
  • Le numéro de commande sert de clé d'idempotence
  • Et l'identifiant de clic peut voyager

Le webhook natif de WooCommerce n'accepte aucun en-tête personnalisé : il ne peut pas porter la clé serveur que Subtraq exige. Ce n'est pas un manque de Subtraq, c'est une borne de WooCommerce — et la contourner tient en un appel HTTP, pas en une extension.

Les sept étapes, une par une

Si vous ne touchez pas au PHP

La route sans une ligne de code existe, et elle est honnête

Elle coûte un abonnement et un endroit de plus où ça peut casser. En échange, personne ne touche au site, et une mise à jour de WordPress ne peut rien effacer.

Un détail qui a son importance : WooCommerce n'a pas de sujet order.paid. Ses sujets natifs sont la création et la mise à jour de commande. C'est donc à l'intermédiaire de reconnaître qu'une commande vient de passer en « terminée » ou en « en cours », selon votre façon de travailler.

Source : la documentation des webhooks WooCommerce, relevée le 12 septembre 2026.

Le guide Make, pas à pas

Deux maillons au lieu d'un

Le webhook natif prévient l'intermédiaire

WooCommerce envoie order.updated à Zapier, Make ou n8n, et l'intermédiaire appelle Subtraq avec l'en-tête d'autorisation. Filtrez sur le statut de la commande : sans filtre, chaque changement d'état partirait.

La route PHP, 7 étapes

Du crochet de paiement à la vente attribuée

Aucune extension à installer, aucun réglage à trouver : le crochet fait partie de WooCommerce depuis toujours, et l'appel HTTP fait partie de WordPress.

1

Dans Subtraq, créez une clé serveur

Installation → Clés d'API. Elle commence par stq_sk_, porte le droit events:write, et ne s'affiche qu'une fois. Relevez aussi le slug de l'espace client.

2

Rangez la clé hors du code

Une constante dans wp-config.php, ou le gestionnaire de secrets de votre hébergeur. Jamais dans un fichier du thème : un thème se partage, se copie et finit parfois dans un dépôt public.

3

Accrochez-vous à woocommerce_payment_complete

C'est le crochet déclenché quand un paiement aboutit, appelé par la méthode payment_complete de la commande. C'est le seul qui dise vraiment « il y a un chiffre à enregistrer » — la création d'une commande, elle, ne le dit pas.

4

Composez le corps et envoyez-le

wp_remote_post fait l'appel, avec l'en-tête Authorization réglé sur Bearer suivi de la clé. Cinq champs : space, amount en centimes, currency, invoiceId, email. Le total de la commande s'obtient par get_total, l'adresse par get_billing_email.

5

Multipliez le montant par cent, et arrondissez

Subtraq compte en centimes et refuse les nombres à virgule. Un total de 43,90 € doit partir en 4390. Servez-vous d'un arrondi explicite : les flottants de PHP savent transformer 43,90 en 4389 si on les laisse faire.

6

Mettez le numéro de commande dans invoiceId

get_order_number donne une valeur stable. Une commande dont le statut repasse par « en cours » puis « terminée » renvoie le même identifiant : Subtraq reconnaît le doublon, répond 200 et n'ajoute rien.

7

Placez le code au bon endroit

Dans un petit module de site (mu-plugin) ou dans le functions.php d'un thème enfant. Jamais dans le functions.php du thème parent : la prochaine mise à jour du thème effacerait tout, en silence.

Noms de crochets et de méthodes relevés dans la documentation WooCommerce le 12 septembre 2026 — l'interface des moyens de paiement et les méthodes de métadonnées. Une interface change : si ce que vous voyez ne correspond plus, la source fait foi.

Le point délicat

Relier la commande au clic, et pas seulement à l'email

L'enchaînement est celui-là : à l'arrivée du visiteur, rangez st_id quelque part qui survive à sa navigation ; à la création de la commande, écrivez-le en métadonnée ; au paiement, envoyez-le dans le champ clickId. C'est quelques lignes de plus, et l'attribution devient exacte plutôt que probable.

Sans cela, la voie reste l'adresse email : Subtraq cherche la personne dans la fenêtre d'attribution de l'espace, trente jours par défaut. Ça marche bien, à deux conditions — que l'adresse soit la même des deux côtés, et que le clic soit encore dans la fenêtre.

Les deux peuvent voyager ensemble : la route accepte email, externalId et clickId dans la même requête, et un seul des trois lui suffit.

Ce qu'on appelle l'attribution

Ce que WooCommerce sait garder

Une métadonnée sur la commande

Un objet commande WooCommerce lit et écrit des métadonnées par get_meta, update_meta_data et save. Un lien Subtraq transmet à sa destination un paramètre nommé st_id, de la forme clk_ suivi de vingt-quatre caractères.

Les cas pénibles, traités franchement

Une boutique WordPress vit au milieu d'extensions et de mises à jour. Voici ce qui casse, et ce qui ne casse pas.

Et un tunnel de vente Elementor devant la boutique ?

Ce n'est pas le même geste, et il est plus simple : un formulaire Elementor a une action Redirect, et il suffit d'y coller un lien Subtraq pour que chaque envoi devienne un prospect attribué — sans clé, sans PHP, sans requête. Le guide WordPress et Elementor donne le chemin exact. Gardez le crochet de paiement pour la vente, et la redirection pour le prospect.

Une commande est remboursée.

WooCommerce déclenche bien woocommerce_order_refunded, mais la route de Subtraq n'accepte que des montants positifs ou nuls, et il n'existe pas d'appel qui annule une vente écrite. Le remboursement ne se soustrait donc pas tout seul : gardez-en la trace par un événement à montant nul, et corrigez le rapport à la main. Mieux vaut cette phrase-là qu'un total faux découvert devant le client.

La commande passe par plusieurs statuts. Combien de ventes ?

Une seule, parce que le crochet choisi est celui du paiement, pas celui du changement de statut. Et si votre configuration le déclenche deux fois, le numéro de commande dans invoiceId fait que le second passage répond 200 sans rien ajouter.

Un paiement hors ligne, virement ou chèque ?

Le crochet de paiement ne se déclenche pas tant que la commande n'est pas marquée payée. Quand vous la passez à la main en « terminée », c'est ce moment-là qu'il faut accrocher — et ce jour-là, la fenêtre d'attribution devient le vrai sujet : allongez-la si vos paiements prennent des semaines.

Questions fréquentes

Faut-il vraiment aucune extension ?

Aucune. Le crochet de paiement et l'appel HTTP font partie de WooCommerce et de WordPress. Et si vous ne voulez pas toucher au PHP, la route par intermédiaire n'installe rien non plus sur le site.

Où mettre le code pour qu'il survive aux mises à jour ?

Dans un petit module de site, ou dans le functions.php d'un thème enfant. Le functions.php d'un thème parent est écrasé à chaque mise à jour du thème, sans avertissement.

Faut-il un pixel sur la boutique ?

Non. Rien n'est ajouté au rendu des pages pour la vente : c'est le serveur qui parle au serveur. Le mouchard de page n'est utile que pour les prospects et les événements, et il n'accepte jamais de montant.

La clé serveur peut-elle fuiter ?

Elle ne doit jamais atteindre un navigateur. Rangée dans une constante de configuration, elle reste côté serveur. C'est aussi la raison pour laquelle les montants ne passent jamais par le navigateur : un chiffre écrit depuis une page ne vaut rien.

Et si Subtraq est indisponible au moment de la commande ?

La commande existe chez vous quoi qu'il arrive. Consignez l'échec de l'appel et renvoyez-le plus tard avec le même numéro de commande : l'identifiant de facture garantit qu'il ne comptera pas deux fois.

Vos paiements passent par Stripe ?

Alors ne passez pas par WooCommerce : l'intégration Stripe enregistre chaque paiement toute seule, avec une signature obligatoire et rien à coder.

Le guide Stripe

La prochaine commande payée peut dire d'où elle vient

Créez le compte, prenez une clé serveur, accrochez le crochet de paiement. Douze lignes, et la boutique répond à la question.

Créer un compte gratuit