POST product "415 Unsupported Media Type"

hi, ich habe mir einen API-Client gebaut. Der funktioniert grundsätzlich auch. Jetzt wollte ich darüber ein Produkt anlegen. Leider bekomme ich daraufhin einen „415 Unsupported Media Type“.

Mein Payload sieht wie folgt aus:

$payload = [
    'data' => [
        'type' => 'product',
        'attributes' =>[
            'active' => true,
            'stock' => 99,
            'manufacturerId' => '0af13c438aa44f7cad0c32b4fb477003',
            'taxId' => '7102914a77684e4581490e6689227a1f',
            'price' => [
                'currencyId' => 'b7d2554b0ce847cd82f3ac9bd1c0dfca',
                'net' => 83.19,
                'linked' => true,
                'gross' => 99
            ],
            'productNumber' => 'SW999999',
            'purchasePrice' => 78,
            'deliveryTimeId' => 'fa8dee50ccfb4ea7ba7d460e7de74ba7',
            'name' => 'TESTPRODUCT-2',
            'description' => 'Test desc 2',
            'categories' => [
                'id' => '8eedce188296453381e607fa80cd78a6'
            ],
            'visibilities' => [
                'productId' => 'e0996814f6d6410a8f750dabbb4d7241',
                'salesChannelId' => '75020e8cba7d46b094c36e24072c8a13',
                'visibility' => 30,
                'id' => '1674275d8579482689e287a9639610ab'
            ]
        ]
    ]
];

ich bin der Meinung das müsste so passen. Hat jemand einen Tipp für mich? Beim erstellen des Clients habe ich mich hauptsächlich an dieses Beispiel gehalten.

Danke.

Das passiert eigentlich immer wenn kein ‘Content-Type’ => ‘application/json’ gesetzt ist

1 „Gefällt mir“

@Shyim schrieb:

Das passiert eigentlich immer wenn kein ‚Content-Type‘ => ‚application/json‘ gesetzt ist

oh, danke für die schnelle Antwort. jetzt gibt es einen

"status":"400","detail":"This value should not be blank.","tem (truncated...) 

 

Hat vielleicht mal jemand einen funktionierenden json-string mit dem man ein neues produkt anlegen kann? den obigen habe ich aus der Browser-Console kopiert und sollte eigentlich passen. leider bekomme ich obige fehlermeldung dass ein Feld nicht leer sein darf – welches wrd mir leider getruncated ;-/

 

ich vermute die produkt id fehlt also das feld „id“ auf produkt ebene.

@Shaimole schrieb:

ich vermute die produkt id fehlt also das feld „id“ auf produkt ebene.

danke für deine Antwort. Wo bekomme ich denn die Produkt id her wenn es das Produkt noch gar nicht gibt? 

Hi hbee,
folgender JSON-String sollte beim POST auf den Produkt-Endpunkt funktionieren. Generell kann man sich die Struktur in den Definition-Files des DAL anschauen und sich daran halten.
 

{
   "manufacturerId":"e96a6acab1a54d00a4d4276b7a6bcc70",
   "taxId":"7c60c110e163472d83f613c64f42de2c",
   "price":[
      {
         "currencyId":"b7d2554b0ce847cd82f3ac9bd1c0dfca",
         "gross":35.7,
         "net":30.0,
         "linked":true
      }
   ],
   "prices":[

   ],
   "stock":666,
   "weight":19.0,
   "productNumber":"SW-100003",
   "name":"Produkt Standard",
   "description":"Standard",
   "metaTitle":"Meta-Standard-Title",
   "metaDescription":"Meta-Standard-Description",
   "active":true,
   "minPurchase":5,
   "maxPurchase":9,
   "properties":[
      {
         "id":"7a9fd005d0f146b799a0cb66fc045f3f"
      },
      {
         "id":"4588194e94944caf8005673aaa79e299"
      },
      {
         "id":"2c86c940c26b4112a8677bedcd97eb89"
      }
   ],
   "visibilities":[
      {
         "id":"ea34e69de1694a6bb49b291cf9237bad",
         "productId":"d98841148ecb44d0a88cb5723a84b0ca",
         "salesChannelId":"259e614f90fe44e488cfef2d23303f6a",
         "visibility":30
      },
      {
         "id":"432476101aba42fc93bb14172678df21",
         "productId":"d98841148ecb44d0a88cb5723a84b0ca",
         "salesChannelId":"7fbbc60ca5ce423b8b38fc22c25ddf06",
         "visibility":30
      }
   ],
   "categories":[
      {
         "id":"98d572b4db8f48b79205cb219321e230"
      },
      {
         "id":"b45f33bd87b842fca39419b718f3ee79"
      },
      {
         "id":"e3cdc7ace7914dbab86b98eb179dd8c9"
      },
      {
         "id":"3a83be6cdc1c49c58717a4324ba62605"
      }
   ]
}

Kannst natürlich auch solche JSON-String über Postman oder ähnliches ausprobieren, dann bekommst du die ganze Meldung angezeigt (oder passt deinen Quellcode an, sodass die ganze Fehlermeldung ausgegeben wird).

Gruß

Krispin

1 „Gefällt mir“

@Krispin schrieb:

Kannst natürlich auch solche JSON-String über Postman oder ähnliches ausprobieren, dann bekommst du die ganze Meldung angezeigt (oder passt deinen Quellcode an, sodass die ganze Fehlermeldung ausgegeben wird).

Gruß

Krispin

Danke, ich habe das jetzt über Postman gemacht. Swagger ist bei mir leider ziemlich lahm. Dein json hat mir soweit geholfen. Leider wird mir die Kategorie mehrfach angelegt wenn ich nur den Namen und nicht die ID übergebe.  Gibt es hier einen Trick?
hier mal mein aktueller json-string:

{
  "manufacturerId": "0af13c438aa44f7cad0c32b4fb477003",
  "taxId": "7102914a77684e4581490e6689227a1f",
  "price": [
    {
      "currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca",
      "gross": 35.7,
      "net": 30.0,
      "linked": true
    }
  ],
  "prices": [
  ],
  "stock": 666,
  "weight": 19.0,
  "productNumber": "SW-100003",
  "name": "Produkt Standard",
  "description": "Standard",
  "metaTitle": "Meta-Standard-Title",
  "metaDescription": "Meta-Standard-Description",
  "active": true,
  "minPurchase": 5,
  "maxPurchase": 9,
  "properties": [
  ],
  "visibilities": [
    {
      "id": "1674275d8579482689e287a9639610ab",
      "productId": "e0996814f6d6410a8f750dabbb4d7241",
      "salesChannelId": "75020e8cba7d46b094c36e24072c8a13",
      "visibility": 30
    }
  ],
  "categories": [
    {
      "name": "Test-Cat99",
      "parentId": "433bd7fdff6142958ff82a32172d73d1"
    }
  ]
}

 

Falls es noch für jemanden relevant wird:
Die IDs kann man auch selbst generieren. im Falle der Kategorie würde sich Beispielsweise der Hash (md5, sha-1, sha-2) des Namens der Kategorie anbieten. Steht auch in der Doku bei writing entities

$payload[] = [
  'id' => md5($product->getUniqueIdentifier());
]

Shopware6 überprüft die uuids nicht auf Format, es spielt also keine Rolle ob die ID wirklich eine UUIDv4 ist oder kürzer oder länger. Hauptsache einzigartig!