2017-06-20 1 views
0

Vous avez essayé de faire des appels externes pendant de nombreuses heures afin de pouvoir effectuer des appels de produits dans une application de bureau. Je suis capable d'utiliser le jeton Access généré par la console développeur pour effectuer des appels http Get à l'aide de restsharp mais je ne peux pas obtenir un Put to work pour obtenir un nouveau jeton d'accès après l'expiration de l'ancien. J'ai aussi essayé d'utiliser fiddler mais je continue à recevoir des erreurs "HTTP 400 bad request".Jeton d'actualisation oAuth Fiddler, exemple C# restsharp pour l'application de bureau

ChannelAdvisor Developer-DOCUMENTATION: Link

Mise à jour du jeton d'accès

(Excusez mon ignorance de ne pas savoir comment passer à Mise à jour du jeton d'accès sur une page aussi bien.)

Je ne peux pas obtenir ce pour travailler dans Restsharp, après des centaines de messages et de forums sur oauth, des exemples google restsharp, n'importe quoi. Essayer d'obtenir une réponse autre que http 400 ou invalid_client est exaspérant. C'était ce qu'un post disait de faire comme une solution de contournement parce que restsharp ajoutait automatiquement des choses à l'appel et pensait qu'il avait du mérite à utiliser les paramètres clairs.

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

Je suis donc allé à Fiddler et juste collé le code exemple dans le bloc-notes et ajouté mes jetons, en vain.

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 

Ceci renvoie également une erreur 400. L'API soap était simple avec un nom d'utilisateur d'authentification, un mot de passe mais j'ai besoin d'un peu plus d'informations que le savon n'offre pas. Toute aide est appréciée, de préférence un exemple de fiddler ou de restsharp utilisant le format d'appel des conseillers de canal.

+0

Vous devez mettre les choses refreshtoken (grant_type = refresh_token & refresh_token = » + creds.refreshToken) dans le corps de votre demande et ne pas ajouter comme paramètre url. De plus vous manque le « Basic » dans votre tête d'autorisation – PtrBld

+0

@PtrBld m'a conduit dans la bonne direction – zerodoc

Répondre

1

Ce que j'ai fait pour que ça marche.

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