Correggere l'errore Bad auth key per le API di Prestashop

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Sviluppando un piccolo software per la sincronizzazione di prodotti da un e-commerce ho utilizzato la libreria PSWebServiceLibrary per comunicare con le API di PrestaShop.

Nell'ambiente di sviluppo locale funzionava tutto correttamente ma una volta caricato il sistema online ricevevo un errore "Unauthorized.Bad auth key".
Questo è un esempio del codice di errore completo:

HTTP REQUEST HEADER
GET /api/products?display=full HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxx
Host: www.xxxxxxxxxx.it
Accept: */*

HTTP RESPONSE HEADER
HTTP/1.1 401 Unauthorized
Date: Sat, 21 Nov 2015 21:17:08 GMT
Server: Apache
WWW-Authenticate: Basic realm="Welcome to PrestaShop Webservice, please enter the authentication key as the login. No password required."
Set-Cookie: PrestaShop-xxxxxxxxxxx; expires=Fri, 11-Dec-2015 21:17:08 GMT; Max-Age=1728000; path=/; domain=www.xxxxxxxxxx.it; httponly
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
RETURN HTTP BODY
401 Unauthorized

This call to PrestaShop Web Services failed and returned an HTTP status of 401. That means: Unauthorized.Bad auth key

Dopo aver ricontrollato il codice e la chiave API impostata ho iniziato a cercare online qualche soluzione e ne ho trovata finalmente una funzionante.

L'unica modifica da fare è nel file .htaccess, basta infatti inserire all'inizio del file questa riga:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Attenzione: inserire il codice all'esterno dei delimitatori impostati da PrestaShop, altrimenti al prossimo aggiornamento verrà sovrascritto:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution

 

Nei commenti del post che ho trovato indicano anche di inserire questo codice nel file webservice/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))); 
};

ma nel mio caso è bastata la modifica al file .htaccess.

 

Credit: http://forge.prestashop.com/browse/PSCFV-7266

Condividi questo post


Commenti