Как добавить изображения товара с помощью Prestashop API - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь добавить / загрузить изображения продукта через API Prestashop, но получаю ошибку сервера 500. Что может быть не так с кодом? Или, может быть, что-то не так с конфигурацией сервера?

PHP script:

error_reporting(-1);
ini_set('display_errors', 'On');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://MY_AUTH_KEY@my-shop.com//api/images/products/24/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERPWD, 'MY_AUTH_KEY:');
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' =>'@http://my-shop.com/img/my-shop-logo-1584646645.jpg;type=image/jpg'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$curlinfo = curl_getinfo($ch);
curl_close($ch);

print_r($curlinfo);

Это приводит к [http_code] => 500. Там нет ошибок или чего-то еще. У меня есть доступ к журналу ошибок сервера хостинг-провайдера, но там ничего нет ...

Сценарий основан на документации Prestashop: https://devdocs.prestashop.com/1.7/development/webservice/tutorials/change_product_image/

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я нашел ответ - Вы не можете загружать удаленные файлы с помощью cURL. Он может отправлять только локальные файлы. Поэтому вам нужно скачать файл, сохранить его локально, а затем использовать cURL с локальным путем.

Источник: Как использовать синтаксис cURL '@' с удаленным URL-адресом?

0 голосов
/ 15 апреля 2020

Попробуйте с:

error_reporting(-1);
ini_set('display_errors', 'On');

$image_path = 'http://my-shop.com/img/my-shop-logo-1584646645.jpg';
$image_mime = 'image/jpg';

$args['image'] = new CurlFile($image_path, $image_mime);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_URL, 'http://my-shop.com/api/images/products/24/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERPWD, 'MY_AUTH_KEY:');
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$curlinfo = curl_getinfo($ch);
curl_close($ch);

print_r($curlinfo);
...