[Gelöst] REST Api: Kategorie zu Artikel hinzufügen

Hallo,

Um einen langsamen manuellen Prozess zu automatisieren habe ich ein Skript geschrieben, dass alle Artikel automatisch zu bestimmten Kategorien hinzufügen soll.

Mal angenommen ich hole einen Artikel von https://shop.de/api/articles/1 , füge dem “categories” array einen Eintrag hinzu und sende das ganze via ‘PUT’ zurück an die selbe URL (ausgenommen dem standard “data” “success” wrapper), sollte der Artikel dann nicht einer Kategorie hinzugefügt worden sein?

Ich habe das bereits probiert, allerdings ist der Artikel dabei aus allen Kategorien in denen er bereits war entfernt worden und der Server hat 400 (Bad Request) zurückgeliefert. Der Json String den ich sende ist richtig formatiert, daran liegt es also nicht.

 

Hat jemand hier so etwas vielleicht schon einmal versucht?

Vielen Dank im Vorraus,

Moritz Bust

Mache das oft.  Es funktioniert wie es soll. 

Muss man vielleicht den aktualisierten Artikel an https://shop.de/api/articles (ohne id) senden?

Ansonsten könnte ich es mir nicht anders erklären.

Hallo,

es funktioniert auch mit mir und mit Artikel Id in Url.

Können Sie Ihr Code schreiben, damit kann man was passiert dort sehen

Viele Grüße

Ahmad

Ich habe einige kleinere Fehler behoben. Zum einen waren die Json Daten die ich an den server zu schicken versuche nicht richtig formatiert, zum anderen hat meinen Json Library (GSON) alle zahlen als floats behandelt.

Das scheint allerdings nicht der grund gewesen zu sein, da das Ergebnis das selbe wie vorher ist.

Dies ist in etwa was ich vom server bekomme (ohne Informationen die gleich bleiben):

{
  "data":{
    "id":1,
    "name": "Beispiel",
    "categories":[
      {
        "id":11,
        "name":"Kategorie"
      },
      {
        "id":12,
        "name":"Andere Kategorie"
      }
    ],
  },
  "success":true
}

Und das ist was ich zurück sende (inkl. der unveränderten Daten):

{
  "id":1,
  "name": "Beispiel",
  "categories":[
    {
      "id":11,
      "name":"Kategorie"
    },
    {
      "id":12,
      "name":"Andere Kategorie"
    },
    {
      "id":132,
      "name":"Hinzugefügte Kategorie"
  ],
}

 

Da es mir aus unbekanntem Grund nicht möglich ist im PUT einen inputstream zu öffnen habe ich einmal mit wireshark reingeschaut.

Dabei ist mir aufgefallen, dass die response folgenden fehlercode enthält:

{"success":false,"message":"\\Shopware\\Models\\Article\\Price by id 29202 not found"}

Kann ich es vielleicht lösen indem ich die ID’s bei den “prices” arrays einfach entferne?

Das ist ein Beispiel aus der Doku:

$minimalTestArticle = array(
    'name' => 'Sport Shoes',
    'active' => true,
    'tax' => 19,
    'supplier' => 'Sport Shoes Inc.',
    'categories' => array(
        array('id' => 15),
    ),
    'mainDetail' => array(
        'number' => 'turn',
        'prices' => array(
            array(
                'customerGroupKey' => 'EK',
                'price' => 999,
            ),
        )
    ),
);

$client->post('articles', $minimalTestArticle);

Mach es doch so.

Es geht. Es lag daran, dass die ID’s in den “prices” arrays vorhanden waren.

Siehe: https://forum.shopware.com/discussion/30138/rest-api-update-artikel-price-by-id-not-found