微信使用者資訊獲取
微信使用者資訊獲取有兩種方式:第一種利用普通access_token和openid進行獲取;第二種利用網頁授權的access_token進行獲取。本文主要介紹第二種方式,第一種方式在微信網頁授權access_token和普通access_token區別中做了介紹。
OAuth2.0
說到資訊獲取,不得不提OAuth2.0。OAuth(開放授權)是一個開放標準,允許使用者授權第三方移動應用訪問他們儲存在另外的服務提供者上的資訊,而不需要將使用者名稱和密碼提供給第三方移動應用或分享他們資料的所有內容。
OAuth的解決思路
OAuth的思路就是在第三方應用程式和服務提供商之間,設定一個授權層(authorization layer)。第三方應用程式不能直接登入服務提供商,只能登入授權層,以此將使用者與第三方應用程式區分開來。第三方應用程式登入授權層所用的令牌(token),與使用者的密碼不同。使用者可以在登入的時候,指定授權層令牌的許可權範圍和有效期。具體流程圖如下:
-
step1:使用者訪問公眾號頁面。
-
step2:回撥授權。(後面詳解)。
-
step3:使用者同意授權。
-
step4:重定向到公眾號,並返回code。
-
step5:公眾號通過code獲取網頁授權access_token。
-
step6:重新整理access_token(如果需要)。
-
step7:公眾號通過access_token來獲取使用者資訊。
上述step2的具體授權分析
若使用者只獲取使用者的openid,則是預設授權,使用者不會感知到授權的發生,而是直接進入了回撥頁(往往是使用者頁面)。在沒有關注的情況下,若想獲取其他使用者資訊snsapi_userinfo,就需要使用者手動同意。對於已關注公眾號的使用者,如果使用者從公眾號的會話或者自定義選單進入本公眾號的網頁授權頁,即使是snsapi_userinfo,也是靜默授權,使用者無感知。
code的獲取
引數 | 必須 | 說明 |
---|---|---|
appid | 是 | 公眾號的唯一標識 |
redirect_uri | 是 | 授權後重定向的回撥連結地址 |
response_type | 是 | 返回型別,請填寫code |
scope | 是 | 應用授權作用域,snsapi_base(不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo(彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能獲取其資訊 |
state | 否 | 重定向後會帶上state引數,開發者可以填寫任意引數值 |
wechat_redirect | 否 | 直接再微信開啟連結,可以不填此引數。做頁02向時候,必須帶此引數 |
使用者同意授權後,頁面將跳轉至上步設定的回撥連結上,並帶上code和state引數。
code作為換取access_token的票據,每次使用者授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。
通過code換取網頁授權access_token
如果網頁授權的作用域為snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。
具體是將上步獲取到的code值傳給下面的連結,即替換code=CODE中的CODE。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
引數說明:
引數 | 必須 | 說明 |
---|---|---|
appid | 是 | 公眾號的唯一標識 |
secret | 是 | 公眾號的appsecret |
code | 是 | 填寫第一步獲取的code引數 |
grant_type | 是 | 填寫為authorization_code |
響應會得到如下json資料,引數如下:
引數 | 說明 |
---|---|
access_token | 網頁授權介面呼叫憑證,此access_token與基礎支援的access_token不同 |
expires_in | access_token介面呼叫憑證超時時間,單位(秒) |
refresh_token | 使用者重新整理access_token |
openid | 使用者唯一標識,在未觀眾公眾號時,使用者訪問公眾號的網頁,也會產生一個使用者和公眾號唯一的openid |
scope | 使用者授權的作用域,使用逗號分隔 |
重新整理access_token
由於access_token擁有較短的有效期,當access_token超時後,可以使用refresh_token進行重新整理,refresh_token有效期為30天,當refresh_token失效之後,需要使用者重新授權。
具體做法:利用上步獲取到的refresh_token來重新授權。
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
連結中的引數只需要將REFRESH_TOKEN替換成上一步獲取到的access_token值,APPID換成自己公眾號的appid就可以重新獲得授權。返回的引數和上一步獲取access_token返回的引數一樣,都是那五種。
利用access_token獲取使用者資訊
如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取使用者資訊了。
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
引數說明:
引數 | 說明 |
---|---|
access_token | 網頁授權介面呼叫憑證,此access_token與基礎支援的access_token不同 |
openid | 使用者的唯一標識 |
lang | 不是必須,返回國家地區語言版本,zhz-CN簡體,zh_TW繁體,en英語 |
返回json資料,引數說明:
引數 | 說明 |
---|---|
subscribe | 使用者是否訂閱該公眾號標識,值為0時,代表此使用者誒有關注該公眾號,拉取不到其餘資訊 |
openid | 使用者的唯一標識 |
nickname | 使用者暱稱 |
sex | 使用者性別,1為男,2為女 |
province | 使用者個人資料填寫的省份 |
city | 使用者個人資料填寫的城市 |
country | 國家,如中國為CN |
headimgurl | 使用者頭像,使用者沒有頭像時該項為空 |
privilege | 使用者特權資訊,json陣列 |
轉載:https://blog.csdn.net/benben_2015/article/details/78904425