shop.product.images.add
Добрый день!
Возникла проблема при попытке добавить новую картинку: shop.product.images.add. Дело в том, что непонятно что передавать в параметр "file" (POST-параметр) - массив байт (саму картинку) или ссылку на нее или путь к файлу на локальном ПК?
Также при обращении к серверу выдается ошибку 400, т.е. неверно сформирован сам запрос, а не параметры.
Также я выявил следующий момент:
в справке по ссылке: http://www.webasyst.ru/developers/docs/api/explorer/shop/shop.product.images.add/ сказано, что product_id - обязательный GET-параметр, а в файле: http://www.webasyst.com/wa-data/public/site/downloads/SS5-Stickies-APIs-2013June24-RU.pdf (6 страница) есть строка:
shop.product.images.add ( $product_id, $url / $file ) // POST
которая говорит о том, что оба параметры POST.
Возможно, я что-то неправильно понял и хотелось бы внести ясность в этот вопрос - какого источника придерживаться? Схожая проблема присутствует в описании метода обновления артикула.
Заранее благодарю!
Возникла проблема при попытке добавить новую картинку: shop.product.images.add. Дело в том, что непонятно что передавать в параметр "file" (POST-параметр) - массив байт (саму картинку) или ссылку на нее или путь к файлу на локальном ПК?
Также при обращении к серверу выдается ошибку 400, т.е. неверно сформирован сам запрос, а не параметры.
Также я выявил следующий момент:
в справке по ссылке: http://www.webasyst.ru/developers/docs/api/explorer/shop/shop.product.images.add/ сказано, что product_id - обязательный GET-параметр, а в файле: http://www.webasyst.com/wa-data/public/site/downloads/SS5-Stickies-APIs-2013June24-RU.pdf (6 страница) есть строка:
shop.product.images.add ( $product_id, $url / $file ) // POST
которая говорит о том, что оба параметры POST.
Возможно, я что-то неправильно понял и хотелось бы внести ясность в этот вопрос - какого источника придерживаться? Схожая проблема присутствует в описании метода обновления артикула.
Заранее благодарю!
7 ответов
2. В качестве аргумента метода $file нужно передавать один или несколько файлов изображений с помощью элемента веб-формы с атрибутом enctype="multipart/form-data" и значением атрибута name="file" для элемента выбора файлов input type="file".
1. Если запрос можно разделить на GET (url-запрос) и POST (параметры) часть, то GET запрос:
https://denisov.host.webasyst.com/api.php/shop.product.images.add?access_token=<мой_токен>&format=xml&product_id=<ID_существующего_товара>
является валидным?
2. Можно ли с помощью HTTP-запроса средствами .NET передать параметр "file"? Я пробовал передавать:
"file=<изображение_в_string.base64>", но результат отрицательный. Есть ли какие-то ограничения на запросы из .NET-приложений?
3. Ошибка "Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера." может быть из-за GET-параметров, POST-параметров или из-за обоих?
4. Можно ли передать в кач-ве параметра url картинки, находящейся в альбоме (созданной командой photos.photo.add)?
Заранее благодарю за ответы!
2. Должно быть можно: см. http://www.ietf.org/rfc/rfc2388.txt и https://www.google.com/search?q="multipart%2Fform-data"+".NET"
3. Скорее всего, из-за того, что неправильно был передан файл.
4. Нет, нужно передавать только сам файл — ссылки не поддерживаются.
Перепробывал всякие варианты, но видимо что-то упускаю:
1. В POST-параметрах я передаю следующее:
-----------------------------635399891495224587
Content-Disposition: form-data; name=file; filename=137062-big-file.jpg
Content-Type: image/jpeg
<Содержимое_файла-картинки одной строкой>
-----------------------------635399891495224587--
Но сервер упорно возвращает ошибку 500.
Не могли бы Вы написать пример POST-параметров (я пробовал указать такие же параметры как при загрузке картинки через action:image-upload (method: product), но все тщетно).
2. Также я ознакомился с классом: shopProductImagesAddMethod, и я предположил, что неверно передается массив $_FILES[], по которому инициализируется (waRequest::file). Есть ли у Вас какие-либо примеры заполнения этого массива через POST-парметры? Любые примеры, подсказки или ссылки будут полезны!
Заранее благодарю!
Посмотрите в логах веб-сервера, что именно обозначает эта ошибка 500 — думаю, эта информация поможет понять, что вы делаете не так.
Ранее Вы писали:
2. В качестве аргумента метода $file нужно передавать один или несколько файлов изображений с помощью элемента веб-формы с атрибутом enctype="multipart/form-data" и значением атрибута name="file" для элемента выбора файлов input type="file".
Дело в том, что мой пример также не работает с той же ошибкой:
<form enctype="multipart/form-data" method="POST"
action="https://<мой_аккаунт>/api.php/shop.product.images.add?access_token=<токен>&format=xml&product_id=1111">
<INPUT type="file" name="file"/>
<INPUT TYPE="SUBMIT" VALUE ="Отправить"/>
</form>
Поэтому обращаюсь к Вам с просьбой привести корректный пример (на HTML) - главное чтобы он работал и добавлял фото, поскольку у меня возвращает:
<response><error>server_error</error><error_description>CSRF Protection</error_description></response>
Буду очень признателен за пример!
1. Производится ли проверка по "CSRF" при api-запросах? дело в том, что ранее я вызывал другие методы без этого параметра (поскольку он не был описан в документации к api) и они выполнялись как надо? Нужен ли этот параметр в методе добавления картинки?
2. Если у Вас есть какой-либо пример (без формы, не HTML) использования метода product.image.add(php/js/jquery), то не могли бы Вы предоставить его для ознакомления. Это могло бы помочь мне. Заранее благодарю!
"Если у Вас есть какой-либо пример (без формы, не HTML) использования метода product.image.add(php/js/jquery), то не могли бы Вы предоставить его для ознакомления. Это могло бы помочь мне. Заранее благодарю!".
Если разработчиками будет признано наличие ошибки, то после исправления будет выпущено обновление для Shop-Script 5 или фреймворка — в этом случае в описании к обновлению вы увидите нужную информацию.
"Если у Вас есть какой-либо пример (без формы, не HTML) использования метода product.image.add(php/js/jquery), то не могли бы Вы предоставить его для ознакомления. Это могло бы помочь мне. Заранее благодарю!"
Если кому-то будет нужен пример, то файл загружается в .Net таким образом:
using (var client = new WebClient())
{
client.UploadFile($@"https://site.ru/api.php/shop.product.images.add?product_id={id}&access_token={Token}", @"C:\Users\Name\Desktop\test\file.jpg");
}