2011-11-30 51 views
4

我试图使用RestSharp来访问Etsy的API。下面是我使用的是试图获取OAuth访问令牌代码:使用RestSharp获取signature_invalid为Etsy的API调用oauth/request_token

 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 signature validation tool时,签名不匹配。而且,该工具生成的URL与Etsy一起使用,其中RestSharp生成的URL不会。有什么我做错了或我需要用RestSharp配置的其他东西吗?

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

+0

可能还想发布到http://groups.google.com/group/restsharp –

+0

会不会,谢谢! –

回答

7

我终于可以使用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是用户的访问令牌和访问令牌的秘密 - 这些都是有效的用户,直到用户撤销访问。

我希望这段代码有帮助!

+0

@Daniel Schaffer,Kris的解决方案能为你工作吗?我问,因为当我用我的消费者密钥和秘密(但发布到https://openapi.etsy.com/v2/)尝试它时,我得到未经授权/签名无效。这让我发疯。 – err1