Probleme mit REST-API nach Update auf Shopware 5.6

Hallo! Wir haben Shopware von 5.5.8 auf 5.6 aktualisiert und nun haben wir Probleme mit der REST-API. Einen Artikel erzeugen klappt. Aber einen Artikel aktualisieren klappt gar nicht mehr.

Erstelle ich bspw. zum Test einen Artikel mit den Namen “Testartikel”, wird er erzeugt. Möchte ich dann mit $client->put() den Artikelnamen ändern in “Artikeltest”, bekomme ich den Fehler “Could not decode json”, “json_last_error: Syntaxerror” zurück. Lasse ich bei $client->put() den Artikelnamen “Testartikel”, gibt es ein ok zurück.

Das Problem bezieht sich aber nicht nur auf Name, sondern auch auf alle anderen Felder, egal ob metaTitle, description oder sonstwas. Sobald sich der zu aktualisierende Wert von dem in der Datenbank unterscheidet, gibt es den oben genannten Error zurück. Bei propertyValues ist es sogar so dass der Error kommt wenn es einfach nur angegeben ist.

Für mich macht das keinen Sinn. Mit Shopware 5.5.8 hat es wunderbar geklappt, am Script für die Aktualisierung der Artikel hat sich nichts geändert. Auch habe ich in der Shopware-Doku geschaut ob sich etwas verändert hat, aber mir ist nichts aufgefallen.

Hat jemand eine Idee oder das gleiche Problem?

Hängt das vielleicht damit zusammen? 

@Moritz Naczenski schrieb:

Hängt das vielleicht damit zusammen? 

https://issues.shopware.com/issues/SW-24428

Nein, ich denke nicht.

Ich habe jetzt vom Shop ein Backup eingespielt, also von 5.6 wieder zurück nach 5.5.8. Dabei habe ich dann herausgefunden dass das Problem nicht mit Shopware 5.6 zu tun hat, sondern mit der PHP-Version.

Stelle ich auch bei SW 5.5.8 die PHP-Version von 7.0 auf 7.2 um und möchte per REST-API einen Artikel aktualisieren, bekomme ich in den meisten Fällen einen Error 500 zurück.

Als Beispiel ein Artikel in der Datenbank mit der Artikelnr. 61610 und dem Namen “Tasche”.

Update-Beispiel 1 (Name ist gleich geblieben) gibt ein 200 zurück:

$artdata = array(
	'name' => 'Tasche'
);
$client->put('articles/61610', $artdata);

Update-Beispiel 2 (Name hat sich geändert) gibt ein 500 zurück mit Hinweis “Could not decode json”:

$artdata = array(
	'name' => 'Tasche neuer Name'
);
$client->put('articles/61610', $artdata);

Update-Beispiel 3 (Name bleibt gleich. Einkaufspreis, Lieferzeit und Mindestbestellwert ändert sich) gibt ein 200 zurück:

$artdata = array(
	'name' => 'Tasche',
	'mainDetail' => array(
		'purchasePrice' => 1.20,
		'shippingTime' => '10 Tage',
		'minPurchase' => 30
	),
);
$client->put('articles/61610', $artdata);

Ich verstehe das nicht :frowning:

Gerade über Console ausprobiert gar keine Probleme:

❯ curl -XPUT -d '{"name": "Tasche"}' -udemo:demo http://shopware.dev.localhost/api/articles/3
{"success":true,"data":{"id":3,"location":"http:\/\/shopware.dev.localhost\/api\/articles\/3"}}⏎ ~/Code
❯ curl -XPUT -d '{"name": "Tasche", "mainDetail": {"purchasePrice": 1.20}}' -udemo:demo http://shopware.dev.localhost/api/articles/3
{"success":true,"data":{"id":3,"location":"http:\/\/shopware.dev.localhost\/api\/articles\/3"}}⏎ ~/Code
❯ curl -XPUT -d '{"name": "Tasche", "mainDetail": {"purchasePrice": 1.20, "shippingTime": "10 Tage", "minPurchase": "30"}}' -udemo:demo http://shopware.dev.localhost/api/articles/3
{"success":true,"data":{"id":3,"location":"http:\/\/shopware.dev.localhost\/api\/articles\/3"}}⏎       

Gib doch mal den Raw Response aus, bevor ein json_decode drauf gemacht wird

Ich habe das Problem gefunden. Es war ein Plugin dass mit IonCube verschlüsselt wurde und nur bis PHP 7.0 kompatibel war. Nachdem ich es deinstalliert und gelöscht habe, klappte es auch wieder mit der REST-API, Shopware 5.6 und PHP 7.2.

@Shyim‍ Vielen Dank für deinen Versuch :slight_smile: