REST API PUT Articles Cannot unset string offsets in bei

Hi, ich wollte einen Artikel mit rudimentären Daten Aktualisieren. 1. Schritt: POST für die ANlage: Erfolgreich, ID wurde zurück geliefert: {“success”:true,“data”:{“id”:9636,“location”:“http://niexxxxxxxxxxxop.de/api/articles/9636”}} 2. Schritt: active=true und Lagerbestand sollten übergeben werden. PUT-String: {“name”:“Kugelmulde 70 ltr CNS nahtlos tiefgezogen, fahrbare Ausfhrung”,“active”:true,“taxId”:1,“mainDetail”:{“number”:“AMME0004”,“inStock”:0}} Antwort der API:
Fatal error : Cannot unset string offsets in /home/niederbe/public_html/engine/Shopware/Components/Api/Resource/Article.php on line 993
503 Service Unavailable Was will mir die API damit sagen? Gibt es generell eine Möglichkeit eien API-Fehler detaillierter erklärt zu bekommen? Beispiel: Auf PUT {“name”:“Regal Alu 93x43x180 cm 4 Ablagen stufenlos h”henverstellbar”,“active”:true,“taxId”:1,“mainDetail”:{“number”:“AMRE0001”,“inStock”:2,“prices”:{{“customerGroupKey”:“LISTE”,“from”:1,“price”:175}}}} bekomme ich {“success”:false,“message”:“Invalid method or invalid json string.”} Ja, das ist mit Sicherheit auch richtig, aber so eine Fehlermeldung macht es einem Shopware-Neuling unglaublich schwierig den Einstieg zu finden. Klammern falsch gesetzt? Tippfehler? Formatierungsfehler? Muss LISTE erst angelegt werden bevor es benutzt werden kann? Die API weis ja warum sie ihre Vorgang abbricht. Es wäre supertoll wenn Sie den Grund auch zurück liefern würde oder Ihn zumindest in ein Log schreibt. Vielleicht macht Sie das ja? Wo?

Hallo, der betroffene Code-Teil: /\*\* \* @param array $data \* @param \Shopware\Models\Article\Article $article \* @throws \Shopware\Components\Api\Exception\CustomValidationException \* @return array \*/ protected function prepareArticleAssociatedData($data, ArticleModel $article) { //check if a tax id is passed and load the tax model or set the tax parameter to null. if (!empty($data['taxId'])) { $data['tax'] = $this-\>getManager()-\>find('Shopware\Models\Tax\Tax', $data['taxId']); if (empty($data['tax'])) { throw new ApiException\CustomValidationException(sprintf("Tax by id %s not found", $data['taxId'])); } } elseif (!empty($data['tax'])) { $tax = $this-\>getManager()-\>getRepository('Shopware\Models\Tax\Tax')-\>findOneBy(array('tax' =\> $data['tax'])); if (!$tax) { throw new ApiException\CustomValidationException(sprintf("Tax by taxrate %s not found", $data['tax'])); } $data['tax'] = $tax; } else { unset($data['tax']); }

Hi, inzwischen habe ich auch schon ausprobiert statt taxID einfach nur tax zu verwenden (laut dem Code sucht die Api dann nach dem Steuersatz statt nach der ID), und unset (taxId) statt unset (tax) im Quellcode, aber das Verhalten ändert sich überhaubt nicht. Ist 503 Service Unavailable vielleicht das wichtiger? Aber was will mir das sagen?

Konntest du das Problem lösen? Ich habe es auch teilweise bei einigen Artikel welche ich update. Aber andere Artikel funktionieren wieder. Vergleicht man das Array der funktionierenden Artikel mit den anderen gibt es aber keinen Unterschied. Die Ursache ist das unset der $data[tax] https://github.com/shopware/shopware/bl … rticle.php Zeile 1025. Das ist kein Array und kann deshalb nicht mit unset gelöscht werden. Aber wie dies zustande kommt ist mir unklar.

niemand eine Idee?

Konnte mittlerweile jemand das Problem lösen?

Immer noch keine Lösung oder Erklärung bei diesem Problem ?

Sitze leider seit Ewigkeiten am selben Problem und kann es einfach nicht lösen. Habt ihr mittlerweile eine Lösung gefunden?

Bei uns lag das Problem daran, dass wir versehentlich PUT statt POST verwendet haben.

Dadurch dachte Shopware, das der Artikel bereits existiert und versucht auf die nicht existierende TaxId zuzugreifen.

 

Bei mir lag es an einer falschen Zeichenkodierung bzw an einem einzigen Falsch kodierten Zeichen im „description“ feld.