1. 程式人生 > >騰訊開放平臺——client id is illegal(100008)!錯誤解決

騰訊開放平臺——client id is illegal(100008)!錯誤解決

今天心血來潮想借騰訊的開放平臺熟悉oauth。結果就擺弄了起來,騰訊的文件還是寫得很詳細的,比我上一次看的已經好很多了。而且還提供了sdk,可以快速呼叫騰訊的開放平臺,既然是學習來的,也就沒圖快,決定從零開始,手寫程式碼。

一切都是按文件來的,可沒想到第一步取access token就受挫了:

20111103-1-client-id-is-illegal(100008)

程式碼如下:

  1. functionget_access_token(){
  2. varreq_url=https://graph.qq.com/oauth2.0/authorize;
  3. varreq_data={
  4. response_type:token,//授權型別,此值固定為“token”
  5. client_id
    :201981,//申請QQ登入成功後,分配給應用的appid。
  6. redirect_uri:http://www.goodje.com/labs/login/qq_login.php,//成功授權後的回撥地址,建議設定為網站首頁或網站的使用者中心。
  7. /*
  8. 請求使用者授權時向用戶顯示的可進行授權的列表。
  9. 可填寫的值是【QQ登入】API文件中列出的介面,以及一些動作型的授權(目前僅有:do_like),如果要填寫多個介面名稱,請用逗號隔開。
  10. 例如:scope=get_user_info,list_album,upload_pic,do_like
  11. 不傳則預設請求對介面get_user_info進行授權。
  12. 建議控制授權項的數量,只傳入必要的介面名稱,因為授權項越多,使用者越可能拒絕進行任何授權。
  13. */
  14. scope:get_user_info,
  15. state:comeonbb//client端的狀態值。用於第三方應用防止CSRF攻擊,成功授權後回撥時會原樣帶回。
  16. //’display’: ‘mobile’//用於展示的樣式。不傳則預設展示為為PC下的樣式。如果傳入“mobile”,則展示為mobile端下的樣式
  17. }
  18. window.open(req_url+?+buildHttpData(req_data));
  19. }

buildHttpData是我自定義的函式,用於把一個js物件轉化為格式化的url引數。返回值為 {時間戳}&name1=value1&name2=value2&…

然後拼接req_url 後為: https://graph.qq.com/oauth2.0/authorize?1320327350000&response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb

結果,就有了剛才那種情況了

後來分析了半天,網上也完全找不到解決辦法,對比了文件上url的格式,發現除了多了時間戳外一點區別都沒有,我想了下可能是引數必須是name=value的形式,服務端才能認識吧,因為url中有這麼一段:?1320327350000&

而時間戳主要是之前為了防止ajax請求時讀到快取,所以才自動加上的,以前是從來都沒有問題的,去掉了時間戳後,還不行,急了,仔細一看url,引數部分最前頭還有個&,去了之後,好了,擦。。。

20111103-2-success

正確的獲取access token url為:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&state=comeonbb

而如果把時間戳或者任意一段字串(只要是url中允許存在的字元,而且不是name=value的形式)放到url末尾,也會有問題

如:https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb&1320327350000

會報lost which in paraml(1000028)!錯誤

20111103-3-lost-which-in-paraml(1000028)

看了下響應頭,server: tnginx

tnginx, 騰訊二次開發並優化過的nginx。難道優化的時候去掉了啥東西麼,我記得nginx不會這樣的呀,理論上這是騰訊的一個bug,不說了,反正是很坑爹的。