Produkt via API mit Cover-Bild anlegen?

Aktuell muss ich mich mal intensiver mit der API befassen. Ziel ist es als erstes ein Produkt via API anzulegen. Hier und da gibt es noch Stolperfallen :slight_smile:

Eine davon ist, dem Produkt auch ein Cover-Bild mit zu übergeben. Das Produkt wird ganz normal mit „/api/product“ angelegt. Grundlage dafür dient diese Doku:

Hier wird auch das Objekt „cover“ beschrieben. Wenn ich die Doku soweit richtig verstanden habe, kann ich mit dem Produkt auch gleich das Cover-Bild mit übergeben. Jedoch klappt das noch nicht so richtig. Die URL vom Bild wird zwar übermittelt, aber im Zielshop wird das Bild dann nicht angezeigt. Es ist zwar korrekt mit dem Produkt verbunden, aber eben nicht sichtbar. Als ob also der Zielshop das Bild an sich nicht abgeholt hat.

Für das Cover-Bild sieht mein Test-Code wie folgt aus:

$cover = self::$ProductData['product-media'][0];
$mediaId = self::GetUUID();

$data['cover'] = [ 
  'id' => self::GetUUID(),
  'productId' => self::$ProductData['id'], 
  'mediaId' => $mediaId,
  'position' => $cover['position'],
];

 $data['cover']['media'] = [
  'id' => $mediaId,
  'mediaFolderId' => '019049c7897b70409e0ce99a4ae7972f', // !!!
  'mimeType' => $cover['media']['mimeType'],
  'alt' => $cover['media']['alt'],
  'title' => $cover['media']['title'],
  'fileName' => $cover['media']['fileName'],
  'url' => $cover['media']['url'],
 ];

Habe ich einen Paramter übersehen?

media anlegen und dann dessen UUID als cover eintragen.

Jedoch funktioniert cover ggf. oder media Zuordnung nicht. Dann benötigst du auch noch productMedia

Hm, im Prinzip habe ich mit „Create a new Media“ das selbe Problem wie eingangs schon erwähnt. Ich gebe die URL an, aber das Bild selber wird nicht angelegt. Irgendetwas übersehe ich.

Media

Create

POST
api/media
{„id“:„00000000000000000000000000000000“,„private“:false}

Upload

POST
api/_action/media/00000000000000000000000000000000/upload?extension=svg&fileName=shopware_docs_horizontal_white
{„url“:„https://assets.shopware.com/media/logos/extended/shopware_docs_horizontal_white.svg“}

ProductMedia

Add

api/_action/sync
[{
„key“:„write“,„action“:„upsert“,„entity“:„product“,„payload“:[{
„id“:„00000000000000000000000000000000“,
„coverId“:„00000000000000000000000000000000“,
„media“:[{
„id“:„00000000000000000000000000000000“,
„mediaId“:„00000000000000000000000000000000“,
„position“:0
}]
}]
}]

1 „Gefällt mir“

Ah ich habs verstanden. Aber ganz schön umständlich. Mit der Kirche ums Dorf :slight_smile: