新浪開放平臺:解決獲取access_token拋 21323 異常,以及接口調用

  1. 使用新浪開放平臺的準備
    1)要註冊一個新浪微博,並在新浪開放平臺登錄(http://open.weibo.com/)
       
    2)建立應用
        
        這裏以建立「移動應用」爲例子,注意並不是「移動應用」不可;

            
        上面的資料填寫完,點「建立」,一個簡單的應用就建立好,點「個人應用」便可看到你剛剛新建的應用。
        


     
    1. OAuth2.0受權,以及獲取access_token的陷阱
      1)獲取受權碼:code。獲取獲取受權碼的方法能夠在開放平臺的文檔得到: http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5  下面來簡單說一下怎麼獲取受權碼:
      首先是組合如下url:
      https://api.weibo.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code
      sadasd上面的url,須要填入 CLIENT_IDREDIRECT_URI 兩個參數,第一個是你應用的AppKey,第二個是回調頁面的url

      AppKey能夠在「個人應用」的控制檯得到:



      回調頁面的url在「個人應用」->"應用信息"->"高級信息" 設置,App Secret(獲取access_token的時候要用到) 也能夠在這裏得到:



      如下是一個例子:
      https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
      
      組合完成後,將這個連接放到你但願被用戶觸發的位置,好比你能夠放到一個網頁上:





      受權及會發送受權碼給剛剛填寫的回調頁面。


      2)根據接收到的受權碼獲取access_token,一樣這個在開放平臺中也有教程,可是這個教程是錯的 ( >_< !) ,下面先說一下這個坑,而後再或如下正確的獲取方式。
      2.1)官方的誤導教程:

      官方上寫的是用POST請求獲取access_token的接口,那麼通常都會想到用 curl 來作post請求:

      好了,配好,程序跑起來,等待返回access_token……結果是:

      '{"error":"invalid_request","error_code":21323,"request":"/2/oauth2/access_token","error_uri":"/2/oauth2/access_token","error_description":"miss client id or secret"}'

      不管你是怎麼測試,怎麼改順序都是拋這個異常。我蠻仔細看看拋出的異常: miss client id or secret  上面寫着是 client_id 或 secret丟失,反覆查看,輸出這兩個參數,然而不沒有發現有丟失。至此,依然認爲不是新浪的錯(畢竟新浪已經作得那麼大,不至於犯這種小錯誤),而後我重複地仔細地看光放的文檔,看是否是我漏了什麼關鍵點。而後,最後發現並無,我開始認爲是新浪的錯,通過一輪百度以及頭腦風暴,(請容許我作個悲傷的表情)真的是新浪的錯,傳參根本不是用post,估計他接受也不是用post的方式接受,因此纔會一直拋出  miss client id or secret  的異常,可惡的是真正的傳參方式居然是GET,是GET,是GET……那ntm寫那麼大個POST是幾個意思,並且壓根不GET又是幾個意思,這是砸本身招牌的節奏,此刻我心裏崩潰的。

      2.2)正確的獲取access_token的方式
          策略:GET和POST混合:用GET去傳遞參數,CURL(POST)來返回access_token。

         

      上圖紅框內的url,即爲傳參的方式,而下面則是用 POST來請求數據。

      下面是請求道數據(json格式):
  2. 調用獲取「公共微博」的接口
    開放平臺是有教程的:http://open.weibo.com/wiki/2/statuses/public_timeline
    下面簡單說一下:
    1)將要請求的url:

    2)須要傳遞的參數:

    只有access_token是必須的,其餘的參數都是可選的。

    請求方式是GET,因此直接用file_get_content便可:
    程序跑起來就能夠返回一堆json格式的數據。注意:請求時是有頻次限制的。  
相關文章
相關標籤/搜索