使用RestSharp为Etsy的API获取signature_invalid调用oauth / request_token

我正在尝试使用RestSharp来访问Etsy的API。 以下是我尝试获取OAuth访问令牌的代码:

var authenticator = OAuth1Authenticator.ForRequestToken( ConfigurationManager.AppSettings["ApiKey"], ConfigurationManager.AppSettings["ApiSecret"]); // same result with or without this next line: // authenticator.ParameterHandling = OAuthParameterHandling.UrlOrPostParameters; this.Client.Authenticator = authenticator; var request = new RestRequest("oauth/request_token") .AddParameter("scope", "listings_r"); var response = this.Client.Execute(request); 

Etsy告诉我签名无效。 有趣的是,当我将请求生成的时间戳和现时值输入到此OAuth签名validation工具中时 ,签名不匹配。 此外,该工具生成的URL与Etsy一起使用,其中RestSharp生成的URL不支持。 有什么我做错了或我需要用RestSharp配置的其他东西?

注意:我正在使用他们的Nuget包提供的RestSharp版本,该版本在发布时为102.5。

我终于能够使用OAuth与RestSharp连接到Etsy API。 这是我的代码 – 我希望它适合你…

 RestClient mRestClient = new RestClient(); //mRestClient.BaseUrl = API_PRODUCTION_URL; mRestClient.BaseUrl = API_SANDBOX_URL; mRestClient.Authenticator = OAuth1Authenticator.ForRequestToken(API_KEY, API_SHAREDSECRET, "oob"); RestRequest request = new RestRequest("oauth/request_token", Method.POST); request.AddParameter("scope", "shops_rw transactions_r transactions_w listings_r listings_w listings_d"); RestResponse response = mRestClient.Execute(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) return false; NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(response.Content); string oauth_token_secret = queryString["oauth_token_secret"]; string oauth_token = queryString["oauth_token"]; string url = queryString["login_url"]; System.Diagnostics.Process.Start(url); // BREAKPOINT HERE string oauth_token_verifier = String.Empty; // get from URL request = new RestRequest("oauth/access_token"); mRestClient.Authenticator = OAuth1Authenticator.ForAccessToken(API_KEY, API_SHAREDSECRET, oauth_token, oauth_token_secret, oauth_token_verifier); response = mRestClient.Execute(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) return false; queryString = System.Web.HttpUtility.ParseQueryString(response.Content); string user_oauth_token = queryString["oauth_token"]; string user_oauth_token_secret = queryString["oauth_token_secret"]; 

user_oauth_token和user_oauth_token_secret是用户的访问令牌和访问令牌秘密 – 这些对用户有效,直到用户撤消访问权限。

我希望这段代码有帮助!