Получение signal_invalid при вызове oauth/request_token для API Etsy с использованием RestSharp

Я пытаюсь использовать 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 пишет, что подпись недействительна. Интересно, что когда я ввожу значения timestamp и nonce, сгенерированные запросом, в этот инструмент проверки подписи OAuth, подписи не совпадают. Более того, URL-адрес, сгенерированный инструментом, работает с Etsy, а URL-адрес, сгенерированный RestSharp, — нет. Я что-то делаю неправильно или что-то еще нужно настроить с помощью RestSharp?

Примечание. Я использую версию RestSharp, предоставленную их пакетом Nuget, которая на момент публикации была 102.5.


person Daniel Schaffer    schedule 30.11.2011    source источник
comment
может также захотеть разместить сообщение на groups.google.com/group/restsharp.   -  person John Sheehan    schedule 30.11.2011


Ответы (1)


Наконец-то я смог подключиться к Etsy API с помощью RestSharp, используя OAuth. Вот мой код - надеюсь, он сработает для вас...

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 — это токен доступа пользователя и секрет токена доступа — они действительны для пользователя до тех пор, пока пользователь не отзовет доступ.

Я надеюсь, что этот код поможет!

person kris    schedule 25.01.2012
comment
@ Даниэль Шаффер, решение Криса сработало для вас? Я спрашиваю, потому что, когда я пробую это с моим потребительским ключом и секретом (но публикую на openapi.etsy.com/v2), я получаю Несанкционировано / Недействительная подпись. Это сводит меня с ума. - person err1; 07.07.2017
comment
В основном этот код работал для меня, чтобы получить постоянные токены, но у меня возникла проблема с «недействительной подписью» при использовании этих значений с OAuth1Authenticator.ForProtectedResource(appKey, appSecret, accessKey, accessSecret); - person drzaus; 09.10.2018