Ошибка загрузки изображения API Etsy

У меня есть соединение oauth - он хорошо работает со всеми остальными запросами, кроме одного: загрузить изображение для объявлений. Вот код:

$connection = $this->getEtsyConnection();

$imageApiUrl = 'https://openapi.etsy.com/v2/listings/'.$listingId.'/images';
$mimeType = mime_content_type($source_file);
$filesize = filesize($source_file);

$params = ['@image' => ''.$source_file.';type='.$mimeType, 'rank'=>1, 'overwrite'=>true, 'listing_id'=>intval($listingId) ];
$header = [
            'Content-Type' => 'multipart/form-data',
          ];
try {
    if ( file_exists( $source_file ) ) {                                      
        $connection->fetch($imageApiUrl, $params, OAUTH_HTTP_METHOD_POST, $header);
        $json = $connection->getLastResponse();
        print_r( json_decode($json, true) );
    }                            
} catch (\OAuthException $e) {
    $json = $connection->getLastResponse();
    print_r( $json );
    print_r( $params );
    print_r( $header );
    print_r( $connection->debugInfo );
    print_r( $e->getMessage() );
}

Но ответ такой:

"headers_recv" => """
    HTTP/1.1 400 Bad Request\r\n
    Server: Apache\r\n
    Set-Cookie: uaid=uaid%3D02SXR92A2MZuWR1R4gUobQcxhvYR%26_now%3D1520781833%26_slt%3D2KFBr_F0%26_kid%3D1%26_ver%3D1%26_mac%3Dym0kPXlXkm33j2_65CRxbmbOVWQ5Cb7aM1aSZIWzihw.; expires=Thu, 11-Apr-2019 07:42:13 GMT; Max-Age=34186700; path=/; domain=.etsy.com; secure; HttpOnly\r\n
    X-Etsy-Request-Uuid: EurHmFgGFL9b1gGn4HleCGHmwRd3\r\n
    X-Error-Detail: The request body is too large\r\n
    Cache-Control: private\r\n
    Set-Cookie: zuaid=uaid%3D02SXR92A2MZuWR1R4gUobQcxhvYR%26_now%3D1520781833%26_slt%3DIpYGzeIk%26_kid%3D1%26_ver%3D1%26_mac%3DwMLVY4w5yOPNJ9uLZMSaJIbmYA1rbvw7eOoS25FRu30.; expires=Tue, 10-Apr-2018 15:23:53 GMT; Max-Age=2592000; path=/; domain=.etsy.com; secure; HttpOnly\r\n
    Set-Cookie: user_prefs=kJV1qV14EKx95Oq3MxB4K75uceRjZACCqKVenDA6Oq80J0eHZCKWAQA.; expires=Mon, 11-Mar-2019 15:23:53 GMT; Max-Age=31536000; path=/; domain=.etsy.com\r\n
    Content-Type: text/plain;charset=UTF-8\r\n
    Content-Length: 29\r\n
    Accept-Ranges: bytes\r\n
    Date: Sun, 11 Mar 2018 15:23:53 GMT\r\n
    Via: 1.1 varnish\r\n
    Connection: close\r\n
    X-Served-By: cache-hhn1532-HHN\r\n
    X-Cache: MISS\r\n
    X-Cache-Hits: 0\r\n
    X-Timer: S1520781834.592519,VS0,VE351
    "
"body_recv" => "The request body is too large"

Что мне не хватает? Файл не загружен, и получена ошибка, указанная выше.

Привет, @Zoli, у тебя это уже работает или нет? Пожалуйста, поделитесь правильным ответом, если он сработал для вас. Спасибо

Akshit Arora 31.01.2019 10:10

С тех пор ничего нового.

Zoli 31.01.2019 10:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
948
2

Ответы 2

Вы пробовали использовать их скрипт PHP:

// You must define the constants OAUTH_CONSUMER_KEY and OAUTH_CONSUMER_SECRET
// You must also assign values to the variables $access_token, $access_token_secret,
// $listing_id and $filename, and $mimetype.
// Your image file is assumed to be in the same directory as this code.

$oauth = new OAuth(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);

$oauth->enableDebug();
$oauth->setToken($access_token, $access_token_secret);

try {
    $source_file = dirname(realpath(__FILE__)) ."/$filename";

    $url = "https://openapi.etsy.com/v2/listings/".$listing_id."/images";
    $params = array('@image' => '@'.$source_file.';type='.$mimetype);

    $oauth->fetch($url, $params, OAUTH_HTTP_METHOD_POST);

    $json = $oauth->getLastResponse();
    print_r(json_decode($json, true));

} catch (OAuthException $e) {
    // You may want to recover gracefully here...
    print $oauth->getLastResponse()."\n";
    print_r($oauth->debugInfo);
    die($e->getMessage());
}

Я не знаком с PHP и получаю то же сообщение об ошибке, но с C#.

Я спрашиваю, потому что, если вы получите такой же ответ, используя их PHP-скрипт (но с вашими значениями, очевидно), вы можете отправить запрос в службу поддержки (Etsy Developer Support) и указать, что «это не работает». Служба поддержки Etsy должна затем попробовать запрос со своей стороны, и если он сработает, вы знаете, что делаете что-то не так (вернемся к исходному пункту, который я знаю, но, по крайней мере, вы знаете, что он должен работать ...). Но если они вернутся с «Ах, сломано» ...

Моя проблема в том, что раньше он работал, и у меня есть пример ответа на вызов, но теперь это не так (я использую RestSharp для выполнения аутентифицированных вызовов).

Я уже связывался с ними, и они не знают, в чем проблема ... :(

Zoli 07.06.2018 15:20

Спасибо @Zoli. Итак, они признали проблему, но не знают, в чем ее причина? Хммм, интересно, проблемы начались после того, как отключили поддержку TLS 1.0? Если вы получаете сообщение об ошибке с точки зрения PHP, а я получаю то же самое, но с C# ...

err1 07.06.2018 17:32

Получил ответ от службы поддержки Etsy: «Недавние обновления сделали это так, что теперь этими списками можно управлять через API. Однако все данные должны быть отправлены через тело сообщения. Вы можете увидеть пример здесь: etsy.com/developers/documentation/getting_started/…» Я не уверен, что это означает, но может ли кто-нибудь еще расшифровать их ответ и обеспечить столь необходимую ясность ??

err1 19.09.2018 12:37

После многих попыток я нашел обходной путь с помощью curl. Я подумал, что должен поделиться им, чтобы любой, у кого возникла такая же проблема, мог им пользоваться.

$oauth = new OAuth($api_key, $api_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($access_token, $access_token_secret);

$url = "https://openapi.etsy.com/v2/listings/864452611/images";
$method = "POST";
$image_path = "/path/to/image.jpg";

$file = new \CURLFile($image_path, mime_content_type($image_path), basename($image_path));

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => $file));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'method' => $method,
    'header' => 'Content-Type: multipart/form-data; boundary=' . microtime(true),
    'header' => 'Authorization: ' . $oauth->getRequestHeader($method, $url)
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($ch);
print_r(json_decode($server_output, true));

curl_close ($ch); 

Другие вопросы по теме