使用 c# RestSharp 访问 Etsy API oauth

本文关键字:API oauth Etsy 访问 RestSharp 使用 | 更新日期: 2023-09-27 18:32:01

我在我们的商店下面设置了一个开发人员帐户,以访问我们的销售收据。我决定使用RestSharp来提出我的请求。 我已经证明它适用于不需要的 Oauth 调用。我已成功收到我的accessToken和accessTokenSecret。 因此,我将它们与customerKey和customerSecret一起使用来进行ForProtectedResource调用,对于oauth请求,如下所示,但始终收到"此方法需要身份验证"。

我希望它只是我错过的简单东西。我想,我只需要打个电话,这四个项目是否正确?一旦我有了这四个项目,我就不必再请求或访问令牌了,对吗?谢谢

        var access_token = "#########################";
        var access_token_secret =  "########";
        var baseUrl = "https://openapi.etsy.com/v2";
        var client = new RestClient(baseUrl);
        client.Authenticator = OAuth1Authenticator.ForProtectedResource(consumerKey,
                                                      consumerSecret,
                                                      access_token,
                                                      access_token_secret);

        var request = new RestRequest("shops/########/receipts");
        request.Method = Method.GET;
        request.AddParameter("api_key", consumerKey);
       client.ExecuteAsync(request, response =>
        {
            var r = response;
        });

使用 c# RestSharp 访问 Etsy API oauth

经过一番反复试验,我终于对OAuth和Etsy的实现方式有了了解。api_key 参数仅在调用不需要 OAuth 的方法时使用。否则,您必须向其发送所有必需的 OAuth 参数。 下面是工作代码。我利用了RestSharp,以及我在这里找到的OAuth基础。 希望这有助于一些可怜的树液盯着蹩脚的代码 3 天(就像你的一样)。

        var restClient = new RestClient(baseUrl);
        OAuthBase oAuth = new OAuthBase();
        string nonce = oAuth.GenerateNonce();
        string timeStamp = oAuth.GenerateTimeStamp();
        string normalizedUrl;
        string normalizedRequestParameters;
        string sig = oAuth.GenerateSignature(new Uri(baseUrl + MethodLocation), consumerKey, consumerSecret, Accesstoken, AccessTokenSecret, "GET", timeStamp, nonce, out normalizedUrl, out normalizedRequestParameters);
       // sig = HttpUtility.UrlEncode(sig);

        var request = new RestRequest(MethodLocation);
        request.Resource = string.Format(MethodLocation);
        request.Method = Method.GET;
       // request.AddParameter("api_key", consumerKey);
        request.AddParameter("oauth_consumer_key", consumerKey);
        request.AddParameter("oauth_token", Accesstoken);
        request.AddParameter("oauth_nonce", nonce);
        request.AddParameter("oauth_timestamp", timeStamp);
        request.AddParameter("oauth_signature_method", "HMAC-SHA1");
        request.AddParameter("oauth_version", "1.0");
        request.AddParameter("oauth_signature", sig);
        restClient.ExecuteAsync(request, response =>
        {
            var r = response;
        });