5

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 署名検証ツールに入力すると、署名が一致しません。さらに、ツールによって生成された URL は Etsy で機能しますが、RestSharp によって生成された URL は機能しません。私が間違っていること、またはRestSharpで構成する必要があることはありますか?

注: Nuget パッケージで提供されている RestSharp のバージョンを使用しています。これは、この投稿の時点では 102.5 です。

4

1 に答える 1

7

私はついにOAuthを使用してRestSharpでEtsyAPIに接続することができました。これが私のコードです-それがあなたのために働くことを願っています...

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は、ユーザーのアクセストークンとアクセストークンシークレットです。これらは、ユーザーがアクセスを取り消すまで、ユーザーに対して有効です。

このコードがお役に立てば幸いです。

于 2012-01-25T07:08:43.437 に答える