Comment afficher les erreurs du webservice Prestashop ?

Maxime

Modifié le : Mar, 23 Avr., 2024 à 9:32 H

Version de Prestashop concernées : 1.4, 1.5, 1.6 jusqu'à 1.6.1.11 inclus et 1.7.x




S'il y a des anomalies de mises à jour de Prestashop par e-connecteur, le webservice Prestashop retourne ce type d'erreur sur les sites en production :

"This call to PrestaShop Web Services failed and returned an HTTP status of xxx. That means: Bad Request. Internal error. To see this error please display the PHP errors."

C'est généralement lié à un problème de qualité de données (exemple : code barre EAN13 à 15 chiffres au lieu de 13, prix négatif, etc ...), plus rarement, cela est dû à un bug Prestashop. Le problème est que tant que Prestashop ne donne que cette vague explication, il ne vous est pas possible de corriger les données incorrectes dans votre gestion commerciale.


Fort logiquement, si quand vous saisissez une erreur dans le back-office de Prestashop, il vous dit votre erreur. Via le webservice non !


La solution est d'afficher les erreurs php. À ce moment-là, Prestashop donnera la raison de son refus.

Sur un site en production, pour des raisons de sécurité, il est déconseillé d'afficher les erreurs php. La solution est donc de les afficher uniquement sur le webservice. Cela ne peut être fait que par un développeur php.
Plusieurs solutions existent, voici celle que l'on préconise.


NB : à l'intention de non-développeur,non-webmaster; L'affichage peut également être activé depuis le back-office
https://www.prestatoolbox.fr/content/24-messages-erreurs-prestashop


Prestashop 1.4


Il faut pour cela afficher les erreurs php. Cela se passe dans le fichier config/config.inc.php où il faut remplacer

  • @ini_set('display_errors', 'off');

Par

  • @ini_set('display_errors', 'on');


Il n'est cependant pas recommandé, pour des raisons de sécurité, de laisser les erreurs php s'afficher. Aussi, je préconise la modification suivante :

Remplacez :

@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);

Par :

if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/api')
{
@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', false);
}
else
{
@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);
}


Cela vous permet de ne pas afficher les erreurs php sur Prestashop tout en les affichant sélectivement sur les messages d'anomalies du webservice Prestashop.
Cela est valable pour Prestashop 1.4.



Sur Prestashop 1.5, dans le fichier config/defines.inc.php

Remplacez :

define('_PS_MODE_DEV_', false);


Par :

if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/api')
define('_PS_MODE_DEV_', true);
define('_PS_MODE_DEV_', false);



À partir de Prestashop 1.5.5 (la portion à rajouter est en gras, dans le fichier define.inc.php) :


if (_PS_MODE_DEV_ OR substr($_SERVER['REQUEST_URI'], 0, 4) == '/api')
{
@ini_set('display_errors', 'on');
@error_reporting(E_ALL | E_STRICT);
define('_PS_DEBUG_SQL_', true);
/* Compatibility warning */
define('_PS_DISPLAY_COMPATIBILITY_WARNING_', true);
}
else
{
@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);
/* Compatibility warning */
define('_PS_DISPLAY_COMPATIBILITY_WARNING_', false);
}



Pour toute autre version, veuillez consulter la documentation Prestashop concernée (notamment http://doc.prestashop.com/display/PS16/Setting+Up+Your+Local+Development+Environment#SettingUpYourLocalDevelopmentEnvironment-Displayingerrormessages)


Avec les versions 1.6 et 1.7 vous pouvez également surcharger (en créant un override Prestashop) la méthode setError de la classe WebserviceRequest de la manière suivante :

public function setError($status, $label, $code)
   {
     global $display_errors;
     if (!isset($display_errors))
       $display_errors = strtolower(ini_get('display_errors')) != 'off';
     if (isset($this->objOutput))
       $this->objOutput->setStatus($status);
     //$this->errors[] = $display_errors ? array($code, $label) : 'Internal error. To see this error please display the PHP errors.'; //Ligne commentée
     $this->errors[] = array($code, $label); // Ligne ajoutée, permettant l'affichage permanent des erreurs et exceptions php
   }


Enfin, notez que pour Prestashop 1.7 un pull request  a été fait par notre équipe sur GitHub à l'attention de l'équipe Prestashop. Vous trouverez ce patch ici : https://github.com/PrestaShop/PrestaShop/pull/7269.

Vous pouvez inciter et encourager Prestashop à corriger ce point dans leur logiciel en votant pour sa résolution ici : http://forge.prestashop.com/browse/PSCSX-8165

Cet article a-t-il été utile ?

C'est super !

Merci pour votre commentaire

Désolé ! Nous n'avons pas pu vous être utile

Merci pour votre commentaire

Dites-nous comment nous pouvons améliorer cet article !

Sélectionner au moins l'une des raisons

Commentaires envoyés

Nous apprécions vos efforts et nous allons corriger l'article