У меня есть 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"
Что мне не хватает? Файл не загружен, и выше ошибка получена.
Вы пытались использовать их 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 для выполнения аутентифицированных вызовов).
Других решений пока нет …