gpt4 book ai didi

c# - 使用 RestSharp 为 Etsy 的 API 获取 signature_invalid 调用 oauth/request_token

转载 作者:太空狗 更新时间:2023-10-29 23:02:04 26 4
gpt4 key购买 nike

我正在尝试使用 RestSharp访问 Etsy 的 API。这是我用来尝试获取 OAuth 访问 token 的代码:

        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 signature validation tool 中时,签名不匹配。此外,该工具生成的 URL 适用于 Etsy,而 RestSharp 生成的则不能。是不是我做错了什么,或者我需要用 RestSharp 配置什么?

注意:我使用的是他们的 Nuget 包提供的 RestSharp 版本,在本文发布时是 102.5。

最佳答案

我终于能够使用 OAuth 通过 RestSharp 连接到 Etsy API。这是我的代码——我希望它对你有用...

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 是用户的访问 token 和访问 token secret ——它们对用户有效,直到用户撤销访问。

希望这段代码对您有所帮助!

关于c# - 使用 RestSharp 为 Etsy 的 API 获取 signature_invalid 调用 oauth/request_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8321034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com