Доступ к Etsy API oauth с помощью С# 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;
        });

person benSharper    schedule 18.09.2013    source источник


Ответы (1)


После некоторых проб и ошибок я, наконец, окунулся в OAuth и то, как его реализует Etsy. Параметр api_key следует использовать только при вызове метода, не требующего OAuth. В противном случае вы должны отправить ему все необходимые параметры OAuth. Ниже приведен рабочий код. Я использовал RestSharp, а также эту базу OAuth, которую нашел здесь. Надеюсь, это поможет какой-нибудь бедняге, которая три дня смотрела на дрянной код (как и ваш покорный слуга).

        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;
        });
person benSharper    schedule 20.09.2013
comment
Можете ли вы сделать пример asp.net (веб-страницы). У Etsy api нет примеров для OAuth, кроме некоторых базовых PHP. - person Frank; 26.09.2014
comment
Могу ли я использовать его в приложении Windows Form? - person Volatil3; 09.05.2015
comment
Я не знаю, как это использовать. С Etsy мне дали только secret и Secret. Как получить AccessToken и AccessSecret? - person Volatil3; 09.05.2015
comment
как вы определили «MethodLocation»? - person Collateral.dmg; 17.06.2016