Обновление списка Etsy через API
Использование DevDefined.OAuth Я пытаюсь обновить существующий список на Etsy. Вот мой код:
_consumerContext = new OAuthConsumerContext
{
ConsumerKey = _apiKey,
ConsumerSecret = _apiSecret,
SignatureMethod = SignatureMethod.HmacSha1
};
_session = new OAuthSession(_consumerContext, "https://openapi.etsy.com/v2/oauth/request_token?scope=transactions_r%20email_r%20listings_r%20transactions_w%20listings_w",
"https://www.etsy.com/oauth/signin",
"https://openapi.etsy.com/v2/oauth/access_token");
_accessToken = new TokenBase();
_accessToken.ConsumerKey = _apiKey;
_accessToken.Token = token;
_accessToken.TokenSecret = tokenSecret;
IConsumerRequest request = _session.Request(_accessToken)
.Put()
.ForUri(new Uri(string.Format("https://openapi.etsy.com/v2/listings/{0}", listing_id)));
request.Context.QueryParameters.Add("listing_id", listing_id.ToString());
request.Context.QueryParameters.Add("title", "New title");
string response = ConsumerRequestExtensions.ReadBody(request);
Но я получаю 403 ответа все время с сообщением "signature_invalid".
Когда я создаю листинг на Etsy, используя тот же способ (кроме метода POST, а не PUT), все работает нормально.
Я что-то пропустил?
2 ответа
Зависит от того, что вы подразумеваете под обновлением... Намного упрощенный ответ ниже, чтобы создать первоначальный листинг по вызову Etsy:
...
request.Resource = "/listing"
request.Method = Method.POST;
...
Затем, чтобы обновить листинг, включающий акции и цены, вы должны убедиться, что у вас есть идентификатор предложения листинга и идентификатор продукта от Etsy, и убедиться, что это установлено в данных запроса.
Чтобы получить идентификатор продукта и идентификатор предложения, сделайте вызов GET:
...
request.Resource = "/listings/my-etsy-listing-id/inventory"
request.Method = Method.GET;
...
Чтобы внести дальнейшие изменения, например, в акции или цены, сделайте следующий звонок:
...
request.Resource = "/listings/my-etsy-listing-id/inventory"
request.Method = Method.PUT;
...
Чтобы обновить название / описание... позвоните
...
request.Resource = "/listing/my-etsy-listing_id"
request.Method = Method.PUT;
...
Как я сказал в начале, это очень сильно упростило. Существует огромное количество данных, которые нужно отправить, чтобы что-то делать в Etsy.
Вы можете использовать метод ETSY API updateInventory, чтобы обновлять списки продуктов на ETSY
$oauth = new OAuth(API KEYSTRING, API SHARED STRING);
$oauth->setToken($oauth_token, $oauth_token_secret);
$data = $oauth->fetch(
"https://openapi.etsy.com/v2/listings/$listing_id/inventory", [
'products' => $product_data
'sku_on_property' => ''
],
OAUTH_HTTP_METHOD_PUT
);
Вы можете передать данные продукта в формате JSON в поля $product_data, чтобы обновить ваши продукты на ETSY