【问题标题】:Update Etsy listing via API通过 API 更新 Etsy 列表
【发布时间】:2017-09-26 13:22:36
【问题描述】:

使用 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);

但我一直收到带有消息“signature_invalid”的 403 响应。

当我使用相同的方式在 Etsy 上创建列表时(除了方法是 POST,而不是 PUT),一切正常。

我错过了什么吗?

【问题讨论】:

  • UPD:我已经从 DevDefined 迁移到 RestSharp,现在一切正常。

标签: c# oauth etsy devdefined-oauth


【解决方案1】:

这取决于你所说的更新是什么意思......下面的非常简化的响应,以在 Etsy 调用中创建初始列表:

...
request.Resource = "/listing"
request.Method = Method.POST;
...

然后,要更新包含库存和价格的列表,您必须确保您拥有来自 Etsy 的列表的产品 ID 和产品标识符,并确保在请求数据中设置了这一点。

要获取 product_identifier 和产品 ID,请进行 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 中执行操作。

【讨论】:

    【解决方案2】:

    您可以使用 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
     );
    

    您可以在 $product_data 字段中将产品数据作为 JSON 传递,以在 ETSY 上更新您的产品

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 2014-10-26
      • 2012-08-22
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多