Получение signature_invalid вызова oauth/request_token для API Etsy с использованием RestSharp
Я пытаюсь использовать RestSharp для доступа к API Etsy. Вот код, который я использую, пытаясь получить токен доступа 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 - нет. Есть ли что-то, что я делаю не так или что-то еще, что мне нужно настроить с помощью RestSharp?
Примечание: я использую версию RestSharp, предоставляемую их пакетом Nuget, которая на момент публикации была 102,5.
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 являются токеном доступа пользователя и секретом токена доступа - они действительны для пользователя, пока пользователь не аннулирует доступ.
Надеюсь, этот код поможет!