Получите доступ к Etsy API с помощью C# RestSharp
Я настроил действие разработчика в нашем магазине, чтобы получить доступ к нашим продажам. Я решил использовать RestSharp, чтобы сделать свои запросы. Я доказал, что это работает ни для одного Oauth необходимых звонков. Я успешно получил свои accessToken и accessTokenSecret. Поэтому я использую их вместе с customerKey и customerSecret, чтобы сделать вызов ForProtectedResource для запроса oauth, как указано ниже, но всегда получаю "Этот метод требует аутентификации".
Я надеюсь, что это что-то простое, что я скучаю. Я подумала, все, что мне нужно, чтобы сделать какой-либо звонок, это четыре правильных пункта? Как только у меня появятся эти четыре предмета, мне больше не придется запрашивать токен или получать к нему доступ, верно? Спасибо
var access_token = "#########################";
var access_token_secret = "########";
var baseUrl = "https://openapi.etsy.com/v2";
var client = new RestClient(baseUrl);
client.Authenticator = OAuth1Authenticator.ForProtectedResource(consumerKey,
consumerSecret,
access_token,
access_token_secret);
var request = new RestRequest("shops/########/receipts");
request.Method = Method.GET;
request.AddParameter("api_key", consumerKey);
client.ExecuteAsync(request, response =>
{
var r = response;
});
1 ответ
После некоторых проб и ошибок я наконец обернул голову вокруг OAuth и способа, которым Etsy реализует его. Параметр api_key используется только при вызове метода, не требующего OAuth. В противном случае вы должны отправить все необходимые параметры OAuth. Ниже рабочий код. Я использовал RestSharp, а также эту базу OAuth, которую нашел здесь. Надеюсь, что это поможет бедному соку пялиться на дерьмовый код в течение 3 дней (как, впрочем, и ваш)
var restClient = new RestClient(baseUrl);
OAuthBase oAuth = new OAuthBase();
string nonce = oAuth.GenerateNonce();
string timeStamp = oAuth.GenerateTimeStamp();
string normalizedUrl;
string normalizedRequestParameters;
string sig = oAuth.GenerateSignature(new Uri(baseUrl + MethodLocation), consumerKey, consumerSecret, Accesstoken, AccessTokenSecret, "GET", timeStamp, nonce, out normalizedUrl, out normalizedRequestParameters);
// sig = HttpUtility.UrlEncode(sig);
var request = new RestRequest(MethodLocation);
request.Resource = string.Format(MethodLocation);
request.Method = Method.GET;
// request.AddParameter("api_key", consumerKey);
request.AddParameter("oauth_consumer_key", consumerKey);
request.AddParameter("oauth_token", Accesstoken);
request.AddParameter("oauth_nonce", nonce);
request.AddParameter("oauth_timestamp", timeStamp);
request.AddParameter("oauth_signature_method", "HMAC-SHA1");
request.AddParameter("oauth_version", "1.0");
request.AddParameter("oauth_signature", sig);
restClient.ExecuteAsync(request, response =>
{
var r = response;
});