2017-06-20 40 views
0

一直试图将oauth映射多个小时,因此我可以在桌面应用程序中进行产品调用。我能够使用由开发者控制台生成的访问令牌使用restsharp进行http获取调用,但是我无法让旧的访问令牌在一个小时过期后获得新的访问令牌。我也尝试使用fiddler,但不断收到“HTTP 400错误请求”错误。oAuth刷新令牌Fiddler,用于桌面应用程序的c#restsharp示例

的ChannelAdvisor开发的文档:Link

更新访问令牌

(请原谅我不知道如何跳转到在页面上更新访问令牌以及无知。)

我无法得到这个工作在Restsharp,数百个关于oauth的帖子和论坛,restsharp谷歌的例子,任何东西。试图获得除HTTP 400或invalid_client以外的任何响应令人生气。这是一个帖子所说的解决方法,因为restsharp会自动将魔术般的东西添加到调用中,并认为它使用明确的参数有优点。

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

你需要把refreshtoken东西(grant_type = refresh_token&refresh_token =” + creds.refreshToken)在你请求的主体,而不是将其添加为URL参数。此外,你还缺少‘基本’在你的授权头 – PtrBld

+0

@PtrBld让我朝着正确的方向前进 – zerodoc

回答

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