
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:
HTTP: 401
No Success
Invalid or missing auth
Beim direkten Aufruf über die URL komm ich auch nicht über die Passworteingabe hinaus.
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:
<?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 "<h2>HTTP: $httpCode</h2>"; 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 "<h2>Could not decode json</h2>"; echo "json_last_error: " . $jsonErrors[json_last_error()]; echo "<br>Raw:<br>"; echo "<pre>" . print_r($result, true) . "</pre>"; return; } if (!isset($decodedResult['success'])) { echo "Invalid Response"; return; } if (!$decodedResult['success']) { echo "<h2>No Success</h2>"; echo "<p>" . $decodedResult['message'] . "</p>"; return; } echo "<h2>Success</h2>"; if (isset($decodedResult['data'])) { echo "<pre>" . print_r($decodedResult['data'], true) . "</pre>"; } 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; ?>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.
Comments
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.
$identity = $result->getIdentity();
Das Ganze für mich nun zur engine/Shopware/Components/Auth/Adapter/default.php
Leider blick ich hier nicht wirklich durch.
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
Hatte vorhin erst von SW4.0 auf SW4.0.3 geupdatet.
Evtl. muss ich den Shop mal neu aufziehen...
uWamp hatte bei mir zuletzt auch funktioniert.
naja, berichte mal ob das geholfen hat.
DF verwendet fastcgi.
nun habe ich in die htaccess wie im Tutorial beschrieben diese Zeilen eingefügt: Leider ohne Erfolg.
Verwendet von euch jemand Domainfactory und hat die REST API am Laufen?
ist schon zu spät.
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
Folgendes muss in die .htaccess eingefügt werden.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Dann klappt das auch
Shopware, evtl könnte ihr dies in das Tutorial aufnehmen.
Danke
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é
Die API läuft mit der Shopware-Version 4.2.1 bei d)f auch unter fastcgi einwandfrei.
Danke!!!!!!! :-)
Ich kann selbst nach nochmals 2 Jahren vielen Dank für die Lösung sagen
Hat mich gerade auch gerettet :P
Wünsche vorab alle ein schönes WE!
Liebe Grüße
Kevin
Momentan stehe ich vor demselben Problem.
Wo genau im .htaccess sollte diese Zeile hinzugefügt werden?
Es gibt ja bereits folgendes:
Wenn ich dies mit dem hier besprochenen ersetze, oder oberhalb/unterhalb hinzufüge, klappt es leider immer noch nicht.
Du musst die Zeile im Block "Module mod_rewrite.c" einsetzen.
Fehlt denn die Zeile bei dir? Welche Version nutzt du?