2012-03-18 5 views
1

J'essaie d'obtenir le mot-clé access_token de Google APi en utilisant javascript et en recevant toujours un message d'erreur: invalid_request. Il y a mon code:Google Api get access_token demande renvoie invalid_request

var options = { 
    url: tokenURL, 
    type: "POST", 
    headers: { "Content-type": "application/x-www-form-urlencoded"}, 
    dataType: "json", 
    data: { 
     "code":successCode, 
     "client_id": clietId, 
     "client_secret": clientSecret, 
     "grant_type": "authorization_code", 
     "redirect_url": "urn:ietf:wg:oauth:2.0:oob" 
    }, 
    complete: function (e) { 
     alert(e.status); 
    }, 
}; 

$.ajax(options); 

J'ai également essayé de faire une requête POST en utilisant une simple forme html et cela fonctionne.

<form method="post" action="https://accounts.google.com/o/oauth2/token"> 
<input name="code" type="text" value="##code##" /> 
<input name="client_id" type="text" value="##client_id##" /> 
<input name="client_secret" type="text" value="##client_secret##" /> 
<input name="grant_type" type="text" value="authorization_code" /> 
<input name="redirect_uri" type="text" value="urn:ietf:wg:oauth:2.0:oob" /> 

<input type="submit" /></form> 

Je n'ai aucune idée de ce qui ne va pas avec la demande javascript. Ai-je manqué certains paramètres ou en-têtes?

+0

essayez d'utiliser Firebug et en regardant l'onglet Net pour voir la différence entre la demande que vous faites à partir d'un formulaire vs la demande ajax – dldnh

+0

j'ai essayé d'utiliser Fiddler et ne remarqué aucune différence, sauf les cookies – pauliusnrk

Répondre

0

Il semble que le codage de data (dans le premier exemple) ne correspond pas au type de contenu.

Le codage de data semble être application/json, mais le type de contenu spécifié est application/x-www-form-urlencoded.

Vous devez modifier le codage data pour être encodé.

data: "code=successCode&client_id=clientId&client_secret=clientSecret&grant_type=authorization_code&redirect_url=urn:ietf:wg:oauth:2.0:oob" 
+0

En définissant les données comme vous l'avez dit, la demande est même pas envoyé: 'var options = { \t \t \t url: 'https://accounts.google.com/o/oauth2/token', \t \t Type \t: "POST", \t \t \t En-têtes: {"Type de contenu": "application/x-www-form-urlencod ed "}, \t \t \t dataType: "JSON", \t \t \t données: "code = Code & client_id = clientId & client_secret = clientSecret & redirect_uri = myuri & grant_type = authorization_code", \t \t \t complète: function (e) { \t \t \t \t alerte (e); \t \t \t \t alerte (état électronique); \t \t \t}, \t \t}; \t \t $ .ajax (options); ' – erdomester

Questions connexes