Aller au contenu
WooRescueHQ

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 :

Bash
$ 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 :

Apache.htaccess
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_page modé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_page au 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.

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.

$ décrivez le problème

Un problème avec WooCommerce ?Demandez un diagnostic.

Dites-nous ce qui ne fonctionne pas, ce qui a changé récemment et l'impact sur votre activité. Nous examinons chaque demande et vous recommandons la marche à suivre.

Demander un diagnostic Voir les services et les tarifs

N'envoyez jamais de mots de passe, de clés API ni de données de carte via le formulaire.

Diagnostic à partir de299 €

Demander un diagnostic