Как я могу получить медиафайлы продуктов в Shopware 6 с помощью Rest API?

#symfony4 #shopware

#symfony4 #shopware

Вопрос:

Я новичок в программном обеспечении и большую часть времени следую документации. Согласно документации для REST API https://docs.shopware.com/en/shopware-platform-dev-en/how-to/working-with-the-api-and-an-http-client

Я могу получить данные о продукте, вызвав request функцию

 $this->restService->request('GET', 'product');
 

По сути, он выполняет следующий запрос, который возвращает мне данные о продукте.

 private function createShopwareApiRequest(string $method, string $uri, ?string $body = null): RequestInterface
{
    return new Request(
        $method,
        getenv('APP_URL') . '/api/v3/' . $uri,
        [
            'Authorization' => 'Bearer ' . $this->accessToken,
            'Accept' => '*/*'
        ],
        $body
    );
}
 

Я не смог найти медиафайлы, связанные с продуктом. Кто-нибудь может мне помочь, как я могу извлекать продукты вместе с изображениями?

Ответ №1:

Вам нужно добавить association параметр в свой запрос. В случае запроса GET product это должно выглядеть так /api/v3/product?associations[media][]

Когда вы сделали это в ответе продукта, вы получите такие объекты:

 "media": {
            "data": [
                {
                    "type": "product_media",
                    "id": "41e9b70e1df84b999bbf08ce7bf3fb77"
                }
            ],
            "links": {
                "related": "http://localhost:8000/api/v3/product/a1d20f10d019491fbf889ad5651aab23/media"
            }
        },
 

по идентификатору носителя продукта вы можете найти полный объект в included объекте вашего ответа и реальный медиафайл внутри. Затем выполните поиск медиа-объекта в included by MediaID.

 {
        "id": "41e9b70e1df84b999bbf08ce7bf3fb77",
        "type": "product_media",
        "attributes": {
            "versionId": "0fa91ce3e96a4bc2be4bd9ce752c3425",
            "productId": "a1d20f10d019491fbf889ad5651aab23",
            "productVersionId": "0fa91ce3e96a4bc2be4bd9ce752c3425",
            "mediaId": "1bf12b4bae5e4d288ce049aacfd2cc24",
            "position": 1,
            "customFields": null,
            "createdAt": "2020-05-22T13:10:37.255 00:00",
            "updatedAt": null,
            "apiAlias": null
        }
},
{
        "id": "1bf12b4bae5e4d288ce049aacfd2cc24",
        "type": "media",
        "attributes": {
            "userId": null,
            "mediaFolderId": "fd22d1ef41994f6ea05f9b4cb01d85d3",
            "mimeType": "image/jpeg",
            "fileExtension": "jpg",
            "uploadedAt": "2020-05-22T13:10:37.227 00:00",
            "fileName": "10062415_1",
            "fileSize": 74503,
            "metaData": {
                "type": 2,
                "width": 1500,
                "height": 1000
            },
            "mediaType": {
                "name": "IMAGE",
                "flags": [],
                "extensions": []
            }
}
 

Комментарии:

1. Привет @Valerii, спасибо за помощь. Я получил аналогичный объект. Но какой из них является изображением? И, извините, что вы подразумеваете под идентификатором носителя, вы можете найти полный объект во включенном объекте вашего ответа. ?

2. Я имел в виду все атрибуты медиа-объекта. Добавлен пример к ответу, чтобы понять, изображение это или нет, вы можете проверить mediaType.name