尝试将oauth计算好几个小时,以便我可以在桌面应用中进行产品调用。我能够使用开发人员控制台生成的访问令牌来使用restsharp进行http Get调用,但是在旧的访问令牌过期(即一小时)之后,我无法获得一个Put来工作以获取新的访问令牌。我也尝试使用fiddler,但继续得到" HTTP 400错误请求"错误。
ChannelAdvisor Developer-DOCUMENTATION:Link
更新访问令牌
(请原谅我不知道如何跳转到页面上的更新访问令牌。)
我无法让这个在Restsharp中工作,经过数百个关于oauth的帖子和论坛,restsharp谷歌示例,任何东西。尝试获取除http 400或invalid_client之外的任何响应都令人抓狂。这是一篇帖子所说的解决方法,因为restsharp自动神奇地在调用中添加了一些东西,并认为它有使用clear参数的优点。
RestSharp代码
string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret));
var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token?grant_type=refresh_token&refresh_token=" + creds.refreshToken);
var request2 = new RestRequest();
request2.Method = Method.POST;
request2.Parameters.Clear();
request2.AddHeader("Authorization", s);
request2.AddHeader("Content-Type", " application/x-www-form-urlencoded");
request2.AddHeader("Cache-Control", "no-cache");
IRestResponse response2 = client2.Execute(request2);
所以我去了提琴手,只是将示例代码粘贴到暂存器中并添加了我的代币,但无济于事。
POST /oauth2/token HTTP/1.1
Host: api.channeladvisor.com
Authorization: Basic MY_ENCODED_APPID:SHARED_SECRET
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
grant_type=refresh_token&refresh_token=xxxxxxxxxxxxxxxxxxxxxmNZtF-cpLy44DV4DQ9Q
这也会返回400错误。 soap API很简单,使用身份验证用户名和密码,但我需要更多肥皂不提供的信息。感谢任何帮助,最好是使用频道顾问调用格式的小提琴或者restsharp示例。
答案 0 :(得分:1)
我做了什么才能让它发挥作用。
string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret));
var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token");
var request2 = new RestRequest();
request2.Method = Method.POST;
request2.Parameters.Clear();
request2.AddHeader("Authorization", "Basic " + s );
request2.AddHeader("Content-Type", " application/x-www-form-urlencoded");
request2.AddHeader("Cache-Control", "no-cache");
request2.AddParameter("grant_type", "refresh_token");
request2.AddParameter("refresh_token", creds.refreshToken);
IRestResponse response2 = client2.Execute(request2);