1

販売領収書にアクセスするために、ショップの下に開発者アカウントを設定しました。RestSharp を使用してリクエストを行うことにしました。Oauth を必要としない呼び出しで機能することを証明しました。accessToken と accessTokenSecret を正常に受信しました。したがって、これらを customerKey および customerSecret と共に使用して、次のように oauth リクエストに対して ForProtectedResource 呼び出しを行いますが、常に「このメソッドには認証が必要です」を受け取ります。

私が見逃している単純なものであることを願っています。この 4 つの項目が正しければ、電話をかける必要があるのではないかと思いました。これらの 4 つのアイテムを取得したら、トークンを要求したり、トークンにアクセスしたりする必要はありません。ありがとう

        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;
        });
4

1 に答える 1

4

いくつかの試行錯誤の後、私は最終的に OAuth と Etsy がそれを実装する方法に頭を悩ませました。api_key パラメータは、OAuth を必要としないメソッドを呼び出す場合にのみ使用します。それ以外の場合は、必要な OAuth パラメータをすべて送信する必要があります。以下は作業コードです。ここで見つけたこの OAuth ベースと同様に、RestSharp を活用しました。これが、くだらないコードを 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;
        });
于 2013-09-20T15:50:01.747 に答える