Problem mit Verbindung zur Rest-Api

Hi, vielleicht kann mir jemand helfen, ich hab mal versucht das Rest-Api Tutorial nachzuvollziehen, leider henge ich schon bei der Authentifizierung, die aber laut meinem Server-Admin alle Voraussetzungen hat. Mein Skript: [code]<?php if (isset($_SERVER[‚Authorization‘])) {
auth = preg_split('/\s+/', trim(_SERVER[‚Authorization‘]));
if (strtolower($auth[0]) == ‚basic‘ && count($auth) >= 2) { $data = explode(":", base64_decode($auth[1])); if (count(data) \>= 2) { _SERVER[‚PHP_AUTH_USER‘] = array_shift(data); _SERVER[‚PHP_AUTH_PW‘] = join(’:’, $data); } } } class ApiClient { const METHODE_GET = ‚GET‘; const METHODE_PUT = ‚PUT‘; const METHODE_POST = ‚POST‘; const METHODE_DELETE = ‚DELETE‘; protected $validMethods = array( self::METHODE_GET, self::METHODE_PUT, self::METHODE_POST, self::METHODE_DELETE ); protected $apiUrl; protected $cURL; public function __construct($apiUrl, $username, $apiKey) { $this->apiUrl = substr($apiUrl, -1) != ‚/‘ ? $apiUrl . ‚/‘ : $apiUrl; //Initializes the cURL instance $this->cURL = curl_init(); curl_setopt($this->cURL, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->cURL, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_setopt($this->cURL, CURLOPT_USERPWD, $username . ‚:‘ . $apiKey); curl_setopt($this->cURL, CURLOPT_HTTPHEADER, array( ‚Content-Type: application/json; charset=utf-8‘, )); } public function call($url, $method = self::METHODE_GET, $data = array()) { if (!in_array($method, $this->validMethods)) { throw new Exception('Invalid HTTP-Methode: ’ . $method); } $dataString = json_encode($data); curl_setopt($this->cURL, CURLOPT_URL, $this->apiUrl . $url); curl_setopt($this->cURL, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($this->cURL, CURLOPT_POSTFIELDS, $dataString); $result = curl_exec($this->cURL); $httpCode = curl_getinfo($this->cURL, CURLINFO_HTTP_CODE); return $this->prepareResponse($result, $httpCode); } protected function prepareResponse($result, $httpCode) { echo "

HTTP: $httpCode

"; if (null === $decodedResult = json_decode($result, true)) { $jsonErrors = array( JSON_ERROR_NONE => ‚Es ist kein Fehler aufgetreten‘, JSON_ERROR_DEPTH => ‚Die maximale Stacktiefe wurde erreicht‘, JSON_ERROR_CTRL_CHAR => ‚Steuerzeichenfehler, möglicherweise fehlerhaft kodiert‘, JSON_ERROR_SYNTAX => ‚Syntaxfehler‘, ); echo "

Could not decode json

"; echo "json_last_error: " . $jsonErrors[json_last_error()]; echo "
Raw:
"; echo "

" . print\_r($result, true) . "

"; return; } if (!isset($decodedResult[‚success‘])) { echo „Invalid Response“; return; } if (!$decodedResult[‚success‘]) { echo "

No Success

"; echo "

" . $decodedResult[‚message‘] . "

"; return; } echo "

Success

"; if (isset($decodedResult[‚data‘])) { echo "

" . print\_r($decodedResult['data'], true) . "

"; } return $decodedResult; } } $client = new ApiClient( //URL des Shopware Rest Servers ‚http://www.webshop-programmierung.at/api‘, //Benutzername ‚ds‘, //API-Key des Benutzers ‚xxxxxxxxxxxxxxxxxxxxx‘ ); $client->call(‚articles/3‘, ApiClient::METHODE_GET); echo $client; ?> [/code] und hier die Fehlermeldung: HTTP: 401 No Success Invalid or missing auth Beim direkten Aufruf über die URL komm ich auch nicht über die Passworteingabe hinaus.

Habe nun das gleiche Problem. Konntest du es zu deiner Zeit lösen?

funktioniert bei mir ohne probleme in 403. $client = new ApiClient( //URL des Shopware Rest Servers 'http://bui-shopware-dev.de/WEB/shopware/4/api/', //Benutzername 'admin', //API-Key des Benutzers '3xcLdu1ul5Eplybm2Kv3m8JP7mgJJke2uSw85adz' ); print\_r ($client-\>call('articles/2', ApiClient::METHODE\_GET)) allerdings habe ich das if (isset($\_SERVER['Authorization'])) ... weggelassen.

Muss bei mir an der Shopware-Installation liegen. Selbst http://www.meineDomain.de/api funktioniert nicht. Es kommt die Authentifizierung ich gebe den im Backend angelegten API User und Key ein, aber der Benutzer wird nicht angenommen.

ist der evntl. nicht in der gruppe local_admins ?

Doch ist er. Habe auch extra noch einen neuen Benutzer angelegt.

dann debugge doch mal ein bisschen in engine/Shopware/Plugins/Default/Core/RestApi/Bootstrap.php::onFrontPreDispatch()

Also hier habe ich das Problem: $identity = $result->getIdentity(); Das Ganze für mich nun zur engine/Shopware/Components/Auth/Adapter/default.php Leider blick ich hier nicht wirklich durch.

der benutzer muss übrigens auch aktiviert sein… ich blick’ da bei dieser massigen vererbung und $this->_adapter auch nicht durch, zumal es bei mir ja auch funktioniert. evntl. liegts an der php/mysql version? hier: PHP 5.4.6/5.5.28 jeweils ubuntu x64

Server ist DF und MYSQL 5.1.60 Hatte vorhin erst von SW4.0 auf SW4.0.3 geupdatet. Evtl. muss ich den Shop mal neu aufziehen… :frowning: uWamp hatte bei mir zuletzt auch funktioniert.

[quote=“ottscho”] Evtl. muss ich den Shop mal neu aufziehen… :frowning: [/quote] das kann gut sein. ich selbst habe noch keine updates vorgenommen, sondern immer den shop neu installiert. aber ich bin ja auch kein shop-betreiber sondern “nur” programmierer :slight_smile: naja, berichte mal ob das geholfen hat.

so, jetzt weiß ich das es am Server liegt. DF verwendet fastcgi. nun habe ich in die htaccess wie im Tutorial beschrieben diese Zeilen eingefügt: <ifmodule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization </ifmodule> Leider ohne Erfolg. Verwendet von euch jemand Domainfactory und hat die REST API am Laufen?

doch kein FastCGI, so langsam blick ich es nicht mehr… ist schon zu spät.

Moin, ich habe nun den ganzen Shop komplett neu aufgesetzt. Leider ohne Erfolg. Mein Problem bleibt bestehen… Hat jemand eine Idee? Gibt es auf User, welcher bei DF sind und können dies mal testen? Danke

Problem ist gelöst danke DF Support. Folgendes muss in die .htaccess eingefügt werden. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] Dann klappt das auch :slight_smile: Shopware, evtl könnte ihr dies in das Tutorial aufnehmen. Danke

1 Like

Aber nur wenn PHP über CGI eingebunden ist. :wink:

Hallo Ottscho, hattest Du später noch einmal Probleme mit d)f? Nutzt Du php 5.49 fastcgi bei d)f (im Admin-Panel kann die Version und Standard, fastcgi etc. gewählt werden)? Mit Standard geht es bei mir, mit fastcgi nicht. Danke André

Nein, ich hatte keine Probleme mehr. Aber nutze es auch nicht ständig.

1 Like

Der Vollständigkeit halber: Die API läuft mit der Shopware-Version 4.2.1 bei d)f auch unter fastcgi einwandfrei.

[quote=“ottscho”] RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] [/quote] DANKE!!! Auch wenn der Post schon einige Zeit her ist. Dank Google bin ich darauf gestoßen und es war die richtige Lösung! Danke!!! :slight_smile: