Module 2 · 2.4
Ce que votre boutique affiche publiquement
Module 2: Installation et configuration · Temps de lecture : 10 minutes
Objectif pédagogique : à la fin de cette leçon, vous pouvez expliquer ce que sont la Store API et la REST API de WooCommerce, quelles données doivent être publiques et lesquelles ne doivent pas l’être, et comment utiliser les clés API et les webhooks en toute sécurité.
Notions clés : API, REST API de WordPress, Store API (wc/store/v1), REST API de WooCommerce (wc/v3), JSON, public et protégé, clé API, droits de lecture et d’écriture, moindres privilèges, webhook, clé secrète d’un webhook, X-WP-Total
Une boutique avec deux portes
Un visiteur voit votre boutique sous forme de pages web. Mais votre boutique a aussi des « portes » pour les programmes : des adresses où un programme peut demander ou envoyer des données, sans la mise en page d’une page. Une telle porte s’appelle une API (application programming interface). WordPress en possède une sous /wp-json/, la REST API. La formation WordPress a montré dans la leçon 7.3 qu’il est possible d’y obtenir, par exemple, les noms d’utilisateur si vous ne protégez rien.
WooCommerce ajoute deux API qui lui sont propres, avec des objectifs très différents :
| Store API | REST API de WooCommerce | |
|---|---|---|
| Adresse | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Pour qui | Le navigateur d’un visiteur (les blocs du panier et de la validation de commande, leçon 2.2) | D’autres programmes : comptabilité, gestion des stocks, une application, une connexion avec une place de marché |
| Clé nécessaire | Non, publique | Oui, une clé API d’un administrateur (ou un utilisateur connecté disposant des droits) |
| Contenu | Produits, prix, état du stock, catégories, avis ; le panier et la commande du visiteur lui-même | Tout : les commandes de tout le monde, les clients, les codes promo, les réglages, les rapports |
La Store API est donc l’entrée de la vitrine : ce qui figure sur une page produit de votre boutique s’y trouve aussi, simplement sous forme de données. La REST API de WooCommerce est la porte arrière de l’entrepôt : elle doit rester fermée à clé.
La Store API : ce qu’un visiteur (et tout le monde) peut consulter
Ouvrez dans votre navigateur :
https://shop.example.com/wp-json/wc/store/v1/productsVous obtenez une liste en JSON, un format texte pour les données. Pour chaque produit, vous voyez entre autres le nom, le slug, le type (simple, variable), l’adresse de la page produit (permalink), l’UGS, les prix, les images, les catégories, si le produit est en stock et s’il peut être acheté. Les en-têtes de la réponse contiennent X-WP-Total : le nombre de produits que la boutique montre aux visiteurs.
Quelques points à connaître :
- Les prix sont exprimés en centimes. Une théière à 34,95 € y figure sous la forme
"price": "3495"avec"currency_minor_unit": 2. Vous divisez par 100. Que ce prix soit TTC ou HT dépend de votre réglage « Afficher les prix dans la boutique » (leçon 4.1). Nous utiliserons cette propriété dans l’exercice de la leçon 4.1. - Uniquement ce qui est visible. Les produits en brouillon, privés ou masqués dans le catalogue ne sont pas comptés par la Store API. C’est pourquoi
X-WP-Totalpeut être inférieur au nombre affiché dans votre administration. - Tout le monde peut lire, mais pas écrire librement. Ajouter un article au panier ou valider une commande via la Store API n’est possible qu’avec un code à usage unique (nonce) issu de la page, et uniquement pour le propre panier de ce visiteur.
Est-ce grave que ces données soient publiques ? Non : ce sont les mêmes données que celles de vos pages produit. Un concurrent qui veut suivre vos prix peut aussi le faire avec les pages ordinaires. Gardez toutefois à l’esprit que tout ce que vous saisissez dans un champ produit peut se retrouver dans la Store API. Ne mettez jamais de prix d’achat, de noms de fournisseurs ou de notes internes dans la description courte ou longue « parce que le thème n’affiche de toute façon pas ce champ ».
Ne fermez pas non plus la Store API. Les blocs du panier et de la validation de commande en ont besoin (leçon 2.2). Les extensions de sécurité qui « désactivent la REST API pour les visiteurs » cassent ainsi parfois la validation de commande. Si vous voulez restreindre la REST API, faites une exception pour la Store API.
Les abus de la Store API existent bien, mais du côté de l’écriture : des attaquants qui tentent des milliers de petites commandes avec des numéros de carte volés. On parle de card testing ; c’est le sujet de la leçon 6.3.
La REST API de WooCommerce : toujours derrière une clé
Ouvrez maintenant, sans être connecté :
https://shop.example.com/wp-json/wc/v3/ordersLa bonne réponse est un message d’erreur avec le statut 401 (non connecté) et un code comme woocommerce_rest_cannot_view. Votre boutique vous dit : « vous n’êtes pas autorisé à voir ceci ». C’est normal. Si vous obtenez ici une liste de commandes, il y a un problème grave : une extension qui ouvre des droits, du code personnalisé dans le thème, ou une clé présente dans une adresse publique. Vous êtes alors face à une possible violation de données (formation WordPress, leçon 7.5, et base de connaissances 6749).
Les programmes qui doivent accéder à vos commandes reçoivent une clé API. Vous la créez dans WooCommerce > Réglages > Avancé > API REST (Advanced > REST API). Une clé se compose de deux parties (une consumer key et un consumer secret) et est liée à un utilisateur WordPress. Vous choisissez les droits :
- Lecture : le programme peut consulter des données ;
- Écriture : le programme peut créer et modifier des données ;
- Lecture/Écriture : les deux.
Les règles à toujours respecter :
- Moindres privilèges. Une connexion comptable qui ne fait que récupérer les commandes reçoit uniquement la lecture. Une connexion de gestion des stocks qui met à jour le stock a besoin de l’écriture, mais un outil de reporting, non.
- Une clé par connexion, avec une description claire (« Comptabilité, lecture seule, 2026 »). Si une connexion s’arrête, vous révoquez uniquement cette clé.
- Liez la clé à un utilisateur disposant des droits adaptés. Une clé d’administrateur peut faire tout ce qu’un administrateur peut faire. Créez plutôt un utilisateur distinct avec le rôle Gestionnaire de boutique (leçon 6.2).
- Conservez la partie secrète en lieu sûr. Vous ne la voyez qu’une seule fois, lors de la création. Elle doit être enregistrée dans les réglages du programme ou dans un gestionnaire de mots de passe, pas dans un e-mail, un document partagé ou un dépôt de code public.
- Faites le ménage. Dans API REST, vous voyez pour chaque clé quand elle a été utilisée pour la dernière fois. Une clé inutilisée depuis des mois doit être révoquée.
Les webhooks : votre boutique appelle un autre programme
Une API attend qu’on l’interroge. Un webhook fonctionne dans l’autre sens : lors d’un événement dans votre boutique (une nouvelle commande, un produit modifié), WooCommerce envoie lui-même un message à une adresse que vous indiquez. Votre logiciel d’expédition apprend ainsi immédiatement qu’une commande a été passée, sans devoir interroger la boutique chaque minute. Vous les configurez dans WooCommerce > Réglages > Avancé > Crochets Web.
Trois points d’attention :
- Le message contient des données personnelles. Un webhook déclenché par une nouvelle commande transmet le nom, l’adresse et les produits commandés. Envoyez-le uniquement vers une adresse en https et à un destinataire mentionné dans votre politique de confidentialité et votre registre des traitements (leçon 5.5).
- La clé secrète. Pour un webhook, vous saisissez une clé secrète. Elle permet au programme destinataire de vérifier que le message provient réellement de votre boutique et non de quelqu’un qui a deviné l’adresse. Ne la laissez pas vide et ne la partagez qu’avec le destinataire.
- Échec de livraison. Si l’adresse de destination est injoignable pendant un certain temps, WooCommerce peut désactiver le webhook après des erreurs répétées. Après une panne, vérifiez dans Crochets Web s’ils sont toujours actifs.
Ne confondez pas cela avec le webhook de votre prestataire de paiement (leçon 4.4). Celui-ci fonctionne dans l’autre sens : le prestataire informe votre boutique qu’un paiement a réussi.
En pratique : voici à quoi cela ressemble dans WooCommerce
Chez d’autres hébergeurs, cela fonctionne de la même façon ; il s’agit d’éléments de WooCommerce lui-même.
- Ouvrez dans une fenêtre de navigation privée
/wp-json/wc/store/v1/productssur votre boutique (de test). Recherchez un produit et convertissez son prix. - Ouvrez dans la même fenêtre de navigation privée
/wp-json/wc/v3/orders. Vous devez voir le statut 401. - Allez dans WooCommerce > Réglages > Avancé > API REST. Regardez quelles clés existent, pour quel utilisateur et avec quels droits. Révoquez les clés que vous ne connaissez pas (ou plus).
- Regardez dans Crochets Web quels webhooks existent et vers quelle adresse ils sont envoyés.
- Si vous utilisez une extension de sécurité qui restreint la REST API, vérifiez que la Store API fait l’objet d’une exception.
Résumé
- La Store API (
wc/store/v1) est publique et contient ce qui figure aussi sur vos pages produit ; les blocs du panier et de la validation de commande en ont besoin. - Ne mettez pas de données internes dans les champs produit : elles peuvent devenir visibles via la Store API.
- Sans clé, la REST API de WooCommerce (
wc/v3) doit renvoyer une erreur 401 ; une liste de commandes sans clé est une possible violation de données. - Clés API : moindres privilèges, une par connexion, liée à un utilisateur adapté, conservée secrète, révoquée si elle n’est plus utilisée.
- Les webhooks envoient des données personnelles à un autre programme : uniquement en https, avec une clé secrète, vers un destinataire figurant dans votre registre des traitements.
Quiz
Exercice
Exercice A2.4 : Qu’est-ce que votre boutique affiche publiquement ? Saisissez l’adresse de votre boutique (de test) et le nombre de produits visibles dans votre boutique. Le programme effectue trois requêtes, sans cookies et sans clé, en lecture seule :
/wp-json/wc/store/v1/products?per_page=1(la Store API, via l’adresse REST indiquée par votre site lui-même) ;/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Correct : la Store API répond avec le statut 200 et une liste JSON ; l’en-tête X-WP-Total correspond au nombre que vous avez saisi ; orders et customers renvoient 401, 403 ou 404.
Orange : X-WP-Total diffère (les produits en brouillon, privés ou masqués ne sont pas comptés) ; la Store API renvoie 401 ou 403, généralement à cause d’une extension de sécurité, ce qui empêche les blocs de validation de commande de fonctionner.
Rouge : la Store API est inaccessible alors que votre site utilise WooCommerce ; ou orders ou customers renvoient une liste. Ce dernier cas est grave : fermez l’accès immédiatement, vérifiez vos clés API et vos extensions, et évaluez si vous devez notifier une violation de données. Dans ce cas, le programme n’enregistre que le code de statut, jamais le contenu.
Vérifiez ensuite vous-même dans API REST et Crochets Web : quelles clés et quels webhooks existent, et savez-vous à quoi sert chacun d’eux ?
Pour aller plus loin
- Formation WordPress gratuite 7.3: Connexion : mots de passe, authentification à deux facteurs et brute force
- Formation WordPress gratuite 7.5: Piraté : reconnaître, réparer et prévenir
- WordPress : l'accès à xmlrpc.php ne fonctionne pas
- S'agit-il d'une fuite de données et dois-je la signaler ?
- La Store API (developer.woocommerce.com, en anglais) : https://developer.woocommerce.com/docs/apis/store-api/
- Limitation du débit (rate limiting) pour la Store API (developer.woocommerce.com, en anglais) : https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
