Lagerbestand per REST-API

ich versuche eine Schnittstelle zwischen unserer WaWi und Shopware aufzubauen. Aus der WaWi erhalte ich auch den aktuellen Lagerbestand, aber dieser lässt sich nicht per REST-Schnittstelle übertragen… Ich hatte den Beispiel-Code aus der Doku genommen: $updateInStock = array( 'mainDetail' =\> array( 'inStock' =\> 66 ) ); $client-\>call('articles/3', ApiClient::METHODE\_PUT, $updateInStock); $updateVariantInStock = array( 'variants' =\> array( array( // update per primary key 'id' =\> 726, 'inStock' =\> 99, ), array( // update per ordernumber key 'number' =\> 'SW10204.5', 'inStock' =\> 999, ), ) ); $client-\>call('articles/205', ApiClient::METHODE\_PUT, $updateVariantInStock); was mache ich falsch?

Was bekommst du für eine Fehlermeldung zurück?

ich erhalte leider keine Fehlermeldung zurück

Den Auth/Client (Kopf) übergibst du aber schon immer mit?

wird immer übergeben. Das Abrufen der Artikel mit Variationen hatte per API funktioniert. public function \_\_construct($apiUrl, $username, $apiKey,$debug=false) { $this-\>apiUrl = rtrim($apiUrl, '/') . '/'; $this-\>debug=$debug; //Initializes the cURL instance $this-\>cURL = curl\_init(); curl\_setopt($this-\>cURL, CURLOPT\_RETURNTRANSFER, true); curl\_setopt($this-\>cURL, CURLOPT\_FOLLOWLOCATION, false); 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(), $params = array()) { if (!in\_array($method, $this-\>validMethods)) { throw new Exception('Invalid HTTP-Methode: ' . $method); } $queryString = ''; if (!empty($params)) { $queryString = http\_build\_query($params); } $url = rtrim($url, '?') . '?'; $url = $this-\>apiUrl . $url . $queryString; $dataString = json\_encode($data); curl\_setopt($this-\>cURL, CURLOPT\_URL, $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); } public function put($url, $data = array(), $params = array()) { return $this-\>call($url, self::METHODE\_PUT, $data, $params); }

Hmm, wenn das Skript ausgeführt wird und irgentwas falsch ist sollte die API dir zumindest einen Fehler z. B. „Invalid JSON string“ etc. zurückgeben. Was sagt den der Server-Log? Und weils mir gerade einfällt, einen HTTP-Verzeichnisschutz hast du nicht auf deinem Shop?

zurück erhalte ich ein Success, aber der Lagerbestand wurde nicht geändert. Shopware liegt nicht auf einen Server, wo ich Zugriff habe auf Server-Log etc…

Hmm… Dann ist das Skript zu 99,99% richtig. Worauf läuft dein Shop? Windows, MAC oder Linux-System?

Linux-Server mit Apache

mhm… Dann kann ichs mir nicht erklären… Höchsten das ein vermeindliches Pflichtfeld fehlt. Ich übergebe Lagerbestände so: sieht n bisschen anders aus ist aber ansich das gleiche {"name":"Oliven gr�n mit Paprika-Paste Karton= 6 Gl�ser a. 936 ml","mainDetail":{"number":"KOSK0002","inStock":26,}} Füg mal den Artikelnamen und die Order-No mit ein und berichte vom Ergebniss. Grüße

Grr… :quite: Kuck mal hier: http://wiki.shopware.com/REST-API-Artik … 1_919.html Name ist Pflichtfeld und in den mainDetails die Order-No. Dann dürfte das Problem behoben sein. Dafür spuckt die API leider keine Fehlermeldung aus…

folgendes habe ich jetzt übertragen, aber es passiert nichts hier das übergebene Array array(2) { ["name"]=\> string(11) "Produktname" ["mainDetail"]=\> array(2) { ["inStock"]=\> int(0) ["number"]=\> string(3) "XYZ" } } der Aufruf selbst war ApiClient::getInstance()-\>put('articles/'.$articlenr, $updateInStock);

Gibt dir die API immernoch ein „Sucess“ zurück? Sollte jetzt nicht mehr der Fall sein. Ich meine, nun stimmt dein Code nicht mehr durch die „“ und „{}“ Du sollst schon deinen Code verwenden (nur erweitern), meiner sieht nur anders aus, weil ich die API über HTTP beliefere, da meine Warenwirtschaft kein php-Script erstellen und ausführen kann. Gruß

1 „Gefällt mir“

kommt jetzt ein PHP-Fehler vom Shop HTTP: 200 Could not decode json json_last_error: Syntaxfehler hier frage ich beim Shopbetreiber an, ob es “eigene” Pflichtfelder gibt und ob die API auch entsprechend der Doku ist. Der PDO-Fehler könnte auf ein eigenes Feld hinweisen. Danke erstmal