微信公衆平台開發 OAuth2.0網頁授權認證 網頁授權擷取使用者基本資訊
微信公衆平台最近新推出微信認證,認證後可以獲得進階接口權限,其中一個是OAuth2.0網頁授權,很多朋友在使用這個的時候失敗了或者無法了解其内容,希望我出個教程詳細講解一下,于是便有了這篇文章。
官方網站:http://oauth.net/ http://oauth.net/2/
權威定義:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.
OAuth是一個開放協定,允許使用者讓第三方應用以安全且标準的方式擷取該使用者在某一網站、移動或桌面應用上存儲的私密的資源(如使用者個人資訊、照片、視訊、聯系人清單),而無需将使用者名和密碼提供給第三方應用。
OAuth 2.0是OAuth協定的下一版本,但不向後相容OAuth 1.0。 OAuth 2.0關注用戶端開發者的簡易性,同時為Web應用,桌面應用和手機,和起房間裝置提供專門的認證流程。
OAuth允許使用者提供一個令牌,而不是使用者名和密碼來通路他們存放在特定服務提供者的資料。每一個令牌授權一個特定的網站(例如,視訊編輯網站)在特定的時段(例如,接下來的2小時内)内通路特定的資源(例如僅僅是某一相冊中的視訊)。這樣,OAuth允許使用者授權第三方網站通路他們存儲在另外的服務提供者上的資訊,而不需要分享他們的通路許可或他們資料的所有内容。
新浪微網誌API目前也使用OAuth 2.0。
原文:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html
二、微信公衆平台OAuth2.0授權
微信公衆平台OAuth2.0授權詳細步驟如下:
1. 使用者關注微信公衆賬号。
2. 微信公衆賬号提供使用者請求授權頁面URL。
3. 使用者點選授權頁面URL,将向伺服器發起請求
4. 伺服器詢問使用者是否同意授權給微信公衆賬号(scope為snsapi_base時無此步驟)
5. 使用者同意(scope為snsapi_base時無此步驟)
6. 伺服器将CODE通過回調傳給微信公衆賬号
7. 微信公衆賬号獲得CODE
8. 微信公衆賬号通過CODE向伺服器請求Access Token
9. 伺服器傳回Access Token和OpenID給微信公衆賬号
10. 微信公衆賬号通過Access Token向伺服器請求使用者資訊(scope為snsapi_base時無此步驟)
11. 伺服器将使用者資訊回送給微信公衆賬号(scope為snsapi_base時無此步驟)

使用的AppId和AppSecret在開發者中心-開發者ID中,可以找到。
1. 配置授權回調頁面域名
進入微信公衆平台背景後,依次進入開發者中心-權限表,找到網頁授權擷取使用者基本資訊,
點選右側的修改。原文:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html
授權回調域名配置規範為全域名并且不帶http,比如需要網頁授權的域名為:www.qq.com,配置以後此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行OAuth2.0鑒權。
這裡我們填寫方倍工作室的一個百度應用二級域名為 mascot.duapp.com
如果你的網址沒有被列入過黑名單,就會在頂部出現
然後,域名配置就成功了。
2. 使用者授權并擷取code
在域名根目錄下,建立一個檔案,命名為oauth2.php,其内容為
先了解下請求授權頁面的構造方式:
參數說明
參數
必須
說明
appid
是
公衆号的唯一辨別
redirect_uri
授權後重定向的回調連結位址
response_type
傳回類型,請填寫code
scope
應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,隻能擷取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到昵稱、性别、所在地。并且,即使在未關注的情況下,隻要使用者授權,也能擷取其資訊)
state
否
重定向後會帶上state參數,開發者可以填寫任意參數值
#wechat_redirect
直接在微信打開連結,可以不填此參數。做頁面302重定向時候,必須帶此參數
應用授權作用域:由于snsapi_base隻能擷取到openid,意義不大,是以我們使用snsapi_userinfo。
回調位址:填寫為剛才上傳後的oauth2.php的檔案位址,
state參數:随便一個數字,這裡填1
構造請求url如下:
把這個連結發送到微信中,以便在微信浏覽器中打開,這裡使用A連結封裝如下:
在微信中顯示如下
點選綁定後,彈出應用授權界面
選擇允許,點選
跳轉到auth2.php頁面,執行
界面上顯示的就是code,這時候通過右上角按鈕中的複制連結,得到連結如下:
我們成功得到了code了。
3. 使用code換取access_token
換取網頁授權access_token頁面的構造方式:
是否必須
secret
公衆号的appsecret
code
填寫第一步擷取的code參數
grant_type
填寫為authorization_code
code:在這裡填寫為上一步獲得的值
可以在浏覽器中直接執行這條語句:
得到如下json資料:
資料格式解讀如下:
描述
access_token
網頁授權接口調用憑證,注意:此access_token與基礎支援的access_token不同
expires_in
access_token接口調用憑證逾時時間,機關(秒)
refresh_token
使用者重新整理access_token
openid
使用者唯一辨別,請注意,在未關注公衆号時,使用者通路公衆号的網頁,也會産生一個使用者和公衆号唯一的OpenID
使用者授權的作用域,使用逗号(,)分隔
于是,我們成功的通過code換取到了access_token,以及refresh_token。
填寫為refresh_token
填寫通過access_token擷取到的refresh_token參數
4. 使用access_token擷取使用者資訊
請求方法:
使用者的唯一辨別
構造url如下:
參數解讀:
nickname
使用者昵稱
sex
使用者的性别,值為1時是男性,值為2時是女性,值為0時是未知
province
使用者個人資料填寫的省份
city
普通使用者個人資料填寫的城市
country
國家,如中國為CN
headimgurl
使用者頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空
privilege
使用者特權資訊,json 數組,如微信沃卡使用者為(chinaunicom)
這與我個人的微信資訊是一緻的
至此,在不輸入我的賬号及密碼的情況下,微信公衆賬号近寶獲得了我的個人資訊,這些資訊包括昵稱、性别、國家、省份、城市、個人頭像以及特權清單。
一個完整的OAuth2認證就完成了。
三、詳細示範
關注方倍工作室(二維碼見下圖),回複“授權”,傳回圖文消息,點選圖檔
在确認頁面,點選“允許”
彈出擷取到的結果(圖檔做了防盜處理,是以不能直接顯示出來,可以下載下傳到本地再來顯示)