WooCommerce / Intégrations
Erreurs de l’API REST WooCommerce : comment les diagnostiquer
Réponse courte
Lisez le statut HTTP et le champ code de la réponse JSON. Une 401 avec woocommerce_rest_cannot_view ou une erreur d’authentification signifie que la requête n’a pas été authentifiée ou que la clé n’a pas la permission. Une 404 rest_no_route signifie que l’URL ou la version de l’API est fausse, ou que l’API REST n’est pas joignable sur /wp-json/. Une 403 sans code d’erreur WooCommerce vient généralement d’une extension de sécurité, d’un WAF ou de l’hébergeur. Une 500 est une erreur PHP sur la boutique. Testez le même appel avec curl pour séparer le client de la boutique.
Symptômes
- Une intégration (ERP, CRM, application mobile, connecteur de marketplace) reçoit des réponses 401, 403, 404 ou 500.
- Elle fonctionnait avant un changement d’hébergement, une migration HTTPS, une mise à jour de l’extension de sécurité ou un changement de permaliens.
- Certains points d’accès fonctionnent et d’autres échouent.
- Les requêtes sont lentes ou expirent sur les grandes collections.
- Les données renvoyées par l’API sont périmées.
Causes les plus fréquentes
| Réponse | Cause typique |
|---|---|
401 woocommerce_rest_cannot_view |
Non authentifiée, ou l’utilisateur ou la permission de la clé ne peut pas lire la ressource |
401 woocommerce_rest_authentication_error |
Consumer key invalide, signature invalide (OAuth sur HTTP) ou horodatage erroné |
401 avec des clés valides qui fonctionnent ailleurs |
Le serveur supprime l’en-tête Authorization avant que PHP ne le voie |
403 sans code WooCommerce |
Extension de sécurité, WAF, ModSecurity ou hébergeur qui bloque la requête |
404 rest_no_route |
Chemin, version ou méthode erronés ; API REST non joignable sur /wp-json/ |
500 |
Erreur fatale PHP pendant la construction de la réponse |
| Timeouts | per_page très élevé, extensions lourdes qui ajoutent des données, requêtes lentes |
Diagnostic
1. Reproduisez avec curl
Sortez le client de l’équation. Avec une clé en lecture seule, sur une préproduction si possible :
$ curl -s -i -u ck_your_key:cs_your_secret "https://example.com/wp-json/wc/v3/orders?per_page=1"Si curl fonctionne et pas l’intégration, le problème est côté client : URL, méthode, en-têtes ou façon d’envoyer les clés. Si curl échoue de la même manière, le problème est côté boutique.
2. Lisez le statut et le code d’erreur
Le corps JSON contient un code et un message. Un code WooCommerce ou WordPress (woocommerce_rest_…, rest_…) signifie que la requête a atteint WordPress. Une 403 ou une page d’erreur HTML sans un tel code signifie que quelque chose placé devant WordPress a répondu.
3. Vérifiez la clé
Dans WooCommerce → Réglages → Avancé → API REST : la clé existe-t-elle, a-t-elle la bonne permission (Lecture, Écriture ou Lecture/Écriture), à quel utilisateur appartient-elle et quand a-t-elle été utilisée pour la dernière fois ? Une clé dont l’utilisateur a été supprimé ou a perdu son rôle échouera.
4. Vérifiez que l’en-tête Authorization atteint PHP
Sur certaines configurations Apache avec CGI/FastCGI, l’en-tête Authorization n’est pas transmis à PHP, et l’authentification Basic échoue en silence. La règle .htaccess que WordPress inclut normalement le fait passer :
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]5. Vérifiez ce qui se trouve devant WordPress
Les extensions de sécurité, le WAF de l’hébergeur, ModSecurity et les CDN peuvent bloquer les requêtes vers /wp-json/, certaines méthodes (PUT, DELETE) ou des user agents inconnus. Leurs journaux montrent les requêtes bloquées avec le motif.
Journaux et vérifications techniques
- La réponse HTTP complète : statut, en-têtes et corps.
- Clés d’API REST WooCommerce : permission, utilisateur, dernier accès.
- WooCommerce → État → Journaux (
fatal-errors) et le journal d’erreurs PHP pour les réponses 500. - Journaux de l’extension de sécurité, du WAF et de la CDN pour les réponses 403.
- Réglages → Permaliens : les permaliens simples désactivent les URL
/wp-json/. - Règles de cache :
/wp-json/ne doit pas être mis en cache pour les requêtes authentifiées.
Solutions
- Utilisez HTTPS avec l’authentification Basic, des clés avec la permission minimale nécessaire et une clé par intégration pour pouvoir les révoquer séparément.
- Transmettez l’en-tête Authorization à PHP quand le serveur le supprime.
- Autorisez l’API dans les couches de sécurité pour les routes et méthodes précises dont l’intégration a besoin, au lieu de désactiver la protection.
- Utilisez la bonne route et la bonne version (
/wp-json/wc/v3/…), et?rest_route=uniquement là où les permaliens lisibles ne sont pas disponibles. - Paginez raisonnablement : des valeurs de
per_pagemodérées, et un filtrage des champs quand le client le permet. - Corrigez les erreurs PHP derrière les réponses 500 ; elles viennent souvent d’extensions qui ajoutent des données aux réponses de l’API.
- Excluez
/wp-json/du cache de pages et de la CDN pour les requêtes authentifiées.
Ce qu’il ne faut pas faire
- Ne donnez pas aux intégrations des clés administrateur en lecture/écriture quand la lecture suffit.
- Ne placez pas de clés dans du JavaScript côté client et ne partagez pas une même clé entre systèmes.
- Ne désactivez pas complètement l’extension de sécurité pour faire fonctionner une intégration.
- Ne poussez pas
per_pageau maximum pour « aller plus vite » ; les grosses réponses sont plus lentes et expirent plus souvent.
Quand faire appel à un expert
Faites appel à un ingénieur quand l’intégration fait transiter des commandes, du stock ou des paiements et que les échecs créent des incohérences de données, quand le problème se situe entre l’hébergement, les couches de sécurité et le client, ou quand l’intégration doit être repensée avec reprises, journalisation et webhooks.
Problèmes liés
- WooCommerce / Intégrations Webhooks WooCommerce en échec : comment les diagnostiquer Journaux de livraison, codes de réponse, signatures, et pourquoi WooCommerce désactive un webhook après plusieurs livraisons échouées d’affilée.
- WooCommerce / Erreurs Erreur fatale WooCommerce : guide de dépannage pratique Lisez correctement l’erreur fatale (fichier, ligne, trace) et rattachez-la au changement qui l’a déclenchée.
- WooCommerce / Performance Problèmes d’Action Scheduler dans WooCommerce Actions planifiées en retard, échouées et bloquées : comment la file fonctionne, pourquoi elle s’arrête et comment la réparer sans perdre de travail en attente.
Questions fréquentes
Pourquoi l’API REST WooCommerce renvoie-t-elle 401 woocommerce_rest_cannot_view ?
La requête n’a pas été authentifiée en tant qu’utilisateur autorisé à lire cette ressource. Vérifiez les clés, leur permission de lecture ou d’écriture, l’utilisateur auquel elles appartiennent et si l’en-tête Authorization atteint PHP.
Que signifie rest_no_route ?
Aucune route REST ne correspond à l’URL et à la méthode. Vérifiez la version de l’API dans le chemin (comme /wp-json/wc/v3/), la méthode HTTP et que l’API REST est joignable : avec les permaliens simples, /wp-json/ ne fonctionne pas et il faut utiliser ?rest_route=.
Faut-il envoyer les clés d’API dans l’URL ?
Utilisez l’authentification HTTP Basic sur HTTPS autant que possible. Les clés dans l’URL finissent dans les journaux du serveur, les proxies et les outils d’analyse. La méthode par paramètres d’URL existe pour les serveurs qui suppriment l’en-tête Authorization.
Pourquoi les réponses de l’API semblent-elles périmées ?
Une couche de cache (une CDN ou un cache de pages) met peut-être en cache les réponses de /wp-json/. Les réponses de l’API aux requêtes authentifiées ne doivent jamais être mises en cache.