Обновите листинг 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), все работает нормально.

Я что-то упускаю?


person Eugene Rozhkov    schedule 26.09.2017    source источник
comment
UPD: я перешел с DevDefined на RestSharp, и теперь все работает нормально.   -  person Eugene Rozhkov    schedule 06.04.2018


Ответы (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.

person err1    schedule 05.04.2018

Вы можете использовать метод API ETSY 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.

person CedCommerce    schedule 20.11.2017