Jump to content

Difficultés avec PS 1.7 et Webservice chez OVH


Recommended Posts

Bonjour

Je tente d'activer le webservice sur ma boutique sous Prestashop 1.7.6.

J'ai créé une clé d'API (pour la mise à jour automatique des taux de change), avec toutes les permissions pour la ressource "currencies" (GET, PUT, POST, DELETE et HEAD)

Malheureusement j'ai le message d'alerte suivant sur la page Paramètres avancés > Webservice

Quote

Vous devez activer le module Apache 'mod_auth_basic' afin de permettre l'authentification au service web.

Lorsque je tente d'atteindre la page https://mondomaine/API/ le dialogue d'autorisation me demande la clé d'API, mais ne l'accepte pas et réaffiche le dialogue sans arrêt

La boutique est hébergée chez OVH sur un contrat mutualisé (offre perf2014x2), et je pense que le module Apache mod_auth_basic est activé (d'ailleurs comment le vérifier ?) car c'est assez commun.

Sauriez-vous me metre sur la piste ?

Merci :)

Edited by Dissitou
titre modifié pour précisions (see edit history)
Link to comment
Share on other sites

lorsque l'hébergement est moisi tu peux utiliser la méthode alternative - enfin en 1.5 à 1.6 c'est sûr:

https://<ton-domaine>/api/...?ws_key=<ta-cle-api>

 

ATTENTION: si non https, il y a une énorme faille de sécurité

Link to comment
Share on other sites

Merci doekia

Effectivement, par l'url je parviens à consulter le fichier xml

https://www.mondomaine.com/api/currencies/2/?ws_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

mais pas avec la méthode recommandée par la documentation

https://[email protected]/api/currencies/2/

ni directement sur l'adresse mondomaine.com/api/. Dans ces deux derniers cas, le dialogue d'authentification tourne en boucle

Est-on certain que l'hébergement est en cause ?

(je pose cette question non pas pour te mettre en doute, mais parce que j'ai vu plusieurs sujets sur des forums par des utilisateurs qui ont le même souci que moi et avec d'autres hébergeurs)

Je vais interroger OVH pour déterminer si l'hébergement est en cause, et si on peut corriger le problème.

Link to comment
Share on other sites

Oui c'est l'hébergement qui ne passe pas l'authentification au php

Soit parce que fastcgi qui requiert une méthode spéciale

Soit parce que fpm car il faut aussi déclarer un dispositif dpecifique

Soit car le couche mod_authz est géré par le frontal du cluster mais par par les éléments de la ferme

Ou un mélange de tout cela

Link to comment
Share on other sites

Server API 	FPM/FastCGI
Loaded Configuration File 	/images/stable/usr/local/php-config/7.2/php-fpm.ini 

Je trouve ça au début du phpinfo(), ce qui semble confirmer tes soupçons...

Je reste en attente du support d'OVH. Ça me ferait quand même mal si leur hébergement web n''était pas compatible avec Prestashop.

Merci encore.

Link to comment
Share on other sites

J'ai précisé le titre en y ajoutant le nom de l'hébergeur, j'espère que la modération le permet.

Un détail de plus : après recherches, j'ai vu plusieurs fois la même solution (répétée telle quelle d'un blog à l'autre...), que j'ai tentée sans succès :

1) mettre dans le répertoire webservice un fichier .htaccess avec cette directive

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

2) ajouter dans ce même répertoire les lignes suivantes au fichier dispatcher.php

if (strpos(@php_sapi_name(), 'CGI')) {
    list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}

Mais le .htaccess empêche tout accès et redirige vers la page 404 de Prestashop.

Si quelqu'un a une autre idée ?

J'attends toujours une réponse au ticket ouvert chez l'hébergeur.

Link to comment
Share on other sites

  • 3 weeks later...

Je reviens pour compléter et terminer ce sujet. Après de nombreux échanges où le support d'OVH affirmait que leur infrastructure était totalement compatible avec le webservice,  j'ai fini par obtenir une réponse bien différente d'un administrateur :

Quote

La nouvelle fonctionnalité de Prestashop ne fonctionne pas sur nos hébergements mutualisés.

Vous devez basculer sur une offre VPS pour installer ce type de service

Je laisse ça là, pour ceux qui auraient eu le même souci et se poseraient la question...

Pour ma part, je ne me risquerai pas à tenter l'expérience avec leur VPS, échaudé par la qualité de leur support (3 semaines pour finir par avouer que leur hébergement est en cause), et je déménage chez Gandi ;)

Link to comment
Share on other sites

La nouvelle fonctionnalité date de 7ans. (1.5.0.17)

Il n'est pas garanti que cela fonctionne mieux chez un autre mutus.

Mais pourquoi ne pas utiliser l'option ?ws_key= qui a été justement désigné pour palier a des effets parasite sur les configs système? C'est pas parce que la documentation à omis de donner un exemple avec ce mode d'utilisation qu'il n'est pas officiellement supporté. Il l'est comme précisé quelques lignes plus haut de cette même documentation

Edited by doekia (see edit history)
Link to comment
Share on other sites

3 hours ago, doekia said:

Il n'est pas garanti que cela fonctionne mieux chez un autre mutus.

C'est un VPS, avec un accès SSH et moins de limitations qu'un mutualisé, et le webservice en PS 1.7.6 y fonctionne bien pour moi

Pour l'option ?ws_key que j'avais aussi vue dans la doc, je n'ai pas trouvé comment l'utiliser avec la mise à jour auto des taux de change et une tâche cron, qui était mon principal besoin.

Link to comment
Share on other sites

Le 8/5/2019 à 1:06 PM, doekia a dit :

lorsque l'hébergement est moisi tu peux utiliser la méthode alternative - enfin en 1.5 à 1.6 c'est sûr:

https://<ton-domaine>/api/...?ws_key=<ta-cle-api>

 

ATTENTION: si non https, il y a une énorme faille de sécurité

Il suffit d'ajouter le ?ws_key= dans n'importe quel appel en lieu et place <key>@

ou si tu utilise la librairie https://github.com/PrestaShop/PrestaShop-webservice-lib/blob/master/PSWebServiceLibrary.php
remplacer

protected function executeRequest($url, $curl_params = array())
	{
		$defaultParams = array(
			CURLOPT_HEADER => TRUE,
			CURLOPT_RETURNTRANSFER => TRUE,
			CURLINFO_HEADER_OUT => TRUE,
			CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
			CURLOPT_USERPWD => $this->key.':',
			CURLOPT_HTTPHEADER => array( 'Expect:' )
		);
		$session = curl_init($url);

par

protected function executeRequest($url, $curl_params = array())
	{
		$defaultParams = array(
			CURLOPT_HEADER => TRUE,
			CURLOPT_RETURNTRANSFER => TRUE,
			CURLINFO_HEADER_OUT => TRUE,
			//CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
			//CURLOPT_USERPWD => $this->key.':',
			CURLOPT_HTTPHEADER => array( 'Expect:' )
		);
		$session = curl_init($url.'?ws_key='.$this->key);

 

  • Thanks 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...