Le Forum

Base de Connaissances : Ce regroupement de forums constitue une source d’informations en rapport avec l’utilisation des solutions SIMAX. Ici, classés par thématique, nous vous proposons un ensemble de réponses, procédures, savoir-faire pour vous aider dans votre utilisation journalière. Si vous ne trouvez pas une réponse à votre recherche, utilisez le groupe ‘Q&R Procédure et Dépannage’ pour poser votre question. Bonne découverte, l’équipe NOUT.

Accès au Webservice...
 
Partager:
Notifications
Retirer tout

Accès au Webservice refusé

1 Messages
1 Utilisateurs
0 Likes
5,703 Vu
(@nsimax34170)
Messages: 264
Reputable Member Admin
Début du sujet
 

Description :
- Le serveur est bien configuré (mode réécriture d'url activé)
- La clé a été générée et est active
=> impossible de passer l'authentification, le serveur redemande systématiquement la clé

Solution :
Bug de prestashop quand PHP est fourni pas FastCGI
____________________________________________________
A . Commencer par vérifier que l'api PHP est bien FastCGI
---------------------------------------------------------------------
1. Il faut copier sur le serveur à un endroit public un fichier phpinfo.php qui contient <? phpinfo();
2. Afficher la page, et rechercher dans le premier tableau la ligne "Serveur API"
B. C'est bien FastCGI
-------------------------
deux options possible :
- ce n'est pas un serveur mutualisé, demandé à ce que PHP soit fourni par le module apache
- contourner le problème
C. Contournement
----------------------
Contourner implique de modifier un fichier qui est généré automatiquement lors de certaine configuration du site via le backoffice ; ce n'est donc pas une solution pérène.
Ce qui suit provient d'un forum (voir lien plus bas)
****************************************
Les variables d'authentification sont rendues vides avec FCGI.
Donc dispatcher.php n'a rien à se mettre sous la dent et redemande donc ad libitum.
Il faut donc faire une petite pirouette pour récupérer ces variables (nous avons besoin seulement de l'identifiant, pas du mot de passe).
Il faut pour cela combiner (ou autre solution ?) deux règles de réécriture (.htaccess à la racine du site) :
1/ une qui place HTTP Authorization dans $_SERVER['REMOTE_USER']
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
il faut ensuite modifier dispatcher.php pour parser la variable REMOTE_USER au lieu d'aller chercher l'id dans $_SERVER['PHP_AUTH_USER'] (ou dans $_GET['ws_key'] ?)
2/ celle de Prestashop qui redirige l'appel www.monsite.com/api/?requete vers le sous-répertoire contenant le script d'aiguillage, cette règle est la suivante :
RewriteRule ^api/?(.*)$ /webservice/dispatcher.php?url=$1 [QSA,L]
Contournement dans le ticket ouvert chez l'éditeur de prestashop
*****************************************************
If PHP is running in CGI mode and not as apache module, the authentification isn't working anymore as there is no authentification system in CGI mode.
One could use the ws_key parameter in the url when calling the web service or making these little changes:
in .htaccess generated with web services enabled, add RewriteRule .* - [E=HTTP_AUTHORIZATION:% {HTTP:Authorization} ]
in webservice/dispatcher.php, add thoses lines
if(strpos(@php_sapi_name(), 'CGI')){
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
};
With OVH, on most server, PHP is running as CGI so I had to implement that in order to use correctly web services.
références :
https://www.prestashop.com/forums/topic/135457-webservice-401-unauthorized/
http://forge.prestashop.com/browse/PSCFV-7266

 
Posté : 21/11/2019 12:56
Étiquettes du sujet
Partager: