2012-03-18 170 views
1

我試圖使用JavaScript獲取Google APi的access_token,並且總是收到錯誤消息:invalid_request。有我的代碼:Google Api get access_token請求返回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); 

我也嘗試使用簡單的HTML表單發出POST請求,它的工作原理。

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

我不知道什麼是錯誤的JavaScript請求。我是否缺少一些參數或標題?

+0

嘗試使用Firebug看着Net標籤就看你從形式VS Ajax請求 – dldnh 2012-03-18 15:34:58

+0

我使用招試圖發出請求之間的差別,並沒有注意到,除了餅乾 – pauliusnrk 2012-03-18 19:29:51

回答

0

它看起來像編碼data(在第一個示例中)與內容類型不匹配。

data的編碼似乎是application/json,但指定的內容類型是application/x-www-form-urlencoded。

您需要將data的編碼更改爲urlencoded。

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

任何差別通過設置數據像你說的,請求甚至沒有送出:'VAR選項= { \t \t \t網址: 'https://accounts.google.com/o/oauth2/token', \t \t \t類型: 「POST」, \t \t \t標題:{「Content-type」:「application/x-www-form-urlencod編「}, \t \t \t數據類型: 」JSON「, \t \t \t數據: 」代碼=代碼&CLIENT_ID =的clientId&client_secret = clientSecret&REDIRECT_URI = myuri&grant_type = authorization_code「, \t \t \t完成:功能(E){ \t \t \t \t警報(E); \t \t \t \t alert(e.status); \t \t \t}, \t \t}; \t \t $ .ajax(options);' – erdomester 2016-09-22 07:02:07