微信公眾號開發 - 靜默授權獲取使用者資訊
基本概念:
openid
是什麼,一個微信號與一個公眾號對應一個固定不變的openid
。所以一個微訊號在一個公眾號下的openid
是不變的,如果換了一個對應的公眾號,那就是另一個openid
了。且只有在微信自帶瀏覽器中開啟的專案才可獲取到。
UnionID
是什麼,如果開發者擁有多個移動應用,網站應用,公眾號和小程式,可以通過UnionID來區分使用者的唯一性,因為只要是同一個微信開發平臺賬號下的移動應用,網站應用,公眾號和小程式,使用者的UnionID是唯一的。換句話說,同一個使用者,對同一個微信開發平臺的不同應用,UnionID是唯一的。
準備條件,一個公眾號、一個外網可訪問的域名、該公眾號的AppID
和AppSecret
、設定網頁授權域名(登陸公眾平臺設定----->公眾號設定------>功能設定----->網頁授權域名 按步驟操作並設定就好),這個域名就是你獲取openid的web專案釋出的域名,這裡注意伺服器請一定跑在80埠。
第一步,獲取code
// 授權訪問連結 https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXX&redirect_uri=http://test-recycle-h5.jxypapp.com&response_type=code&scope=snsapi_base&state=%7B%22id%22%3D%221%22%2C%22name%22%3A%22xiaoming%22%7D#wechat_redirect // 授權成功後,重定向連結 http://test-recycle-h5.jxypapp.com/?code=0215ZMRH0rVjli29oYTH0exORH05ZMRz&state=%7B%22id%22%3D%221%22%2C%22name%22%3A%22xiaoming%22%7D
引數解釋:
-
appid:
公眾號appid. -
redirect_uri:
填寫微信識別成功之後,跳轉的url
(需要encode編碼)。 -
response_type:
就填code
,不用修改。 -
scope:
可填(snsapi_base (靜默授權)和snsapi_userinfo(彈出授權頁面的授權方式) 兩個值,其中前者為只獲得openid,不需要使用者授權,後者為獲得使用者資訊,需要使用者授權) 。 -
state:
自定義引數,重定向後會帶上state引數,開發者可以填寫a-zA-Z0-9
的引數值,最多128
位元組(傳json
資料需要encode
編碼)。 -
#wechat_redirect:
指定在微信內跳轉,平時可以不填,在302重定向時,必須填!
注意事項:
-
redirect_uri
需要encode
編碼,否則頁面會顯示“redirect_ur引數錯誤!”
! -
redirect_uri
網址的域名必須是,你在微信公眾平臺賬號中填寫授權回撥頁的域名,具體需要登入微信公眾平臺後臺,在使用者資訊那裡點選修改,填上自己的域名即可,注意:授權回撥頁中的域名沒有http://
第二步,獲取 openid
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
引數解釋:
-
appid
:同上 -
secret
:同上 -
code
:填寫第一步獲取的code
引數 -
grant_type
:填寫為authorization_code
注意事項:
- h5 頁面如果直接呼叫次介面,可能存在跨域問題,可以讓後臺呼叫此介面
返回結果:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
第三步,獲取access_token
access_token
是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token
。開發者需要進行妥善儲存。access_token
的儲存至少要保留512個字元空間。access_token
的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token
失效。
介面說明
https請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
引數說明
-
grant_type
:獲取access_token
填寫client_credential
-
appid
:第三方使用者唯一憑證 -
secret
:第三方使用者唯一憑證金鑰,即appsecret
返回結果
{"access_token":"ACCESS_TOKEN","expires_in":7200}
第四步,獲取使用者資訊
介面呼叫請求說明 http請求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
引數解釋:
-
access_token
呼叫介面憑證 ,第三步獲取的access_token -
openid
普通使用者的標識,對當前公眾號唯一,第二步獲取的openid -
lang
返回國家地區語言版本,zh_CN
簡體,zh_TW
繁體,en
英語
{ "subscribe": 1,// 是否關注此公共號,0-未關注,1-關注 "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",//使用者的標識,對當前公眾號唯一 "nickname": "Band",// 使用者的暱稱 "sex": 1,//使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知 "language": "zh_CN",// 使用者的語言,簡體中文為zh_CN "city": "廣州",// 使用者所在城市 "province": "廣東",// 使用者所在省份 "country": "中國",// 使用者所在國家 "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", //使用者頭像 "subscribe_time": 1382694957, // 使用者關注時間,為時間戳。如果使用者曾多次關注,則取最後關注時間 "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" ,//只有在使用者將公眾號繫結到微信開放平臺帳號後,才會出現該欄位。 "remark": "", // 公眾號運營者對粉絲的備註,公眾號運營者可在微信公眾平臺使用者管理介面對粉絲新增備註 "groupid": 0, // 使用者所在的分組ID(相容舊的使用者分組介面) "tagid_list":[128,2], 使用者被打上的標籤ID列表 "subscribe_scene": "ADD_SCENE_QR_CODE", //返回使用者關注的渠道來源,ADD_SCENE_SEARCH 公眾號搜尋,ADD_SCENE_ACCOUNT_MIGRATION 公眾號遷移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 掃描二維碼,ADD_SCENEPROFILE LINK 圖文頁內名稱點選,ADD_SCENE_PROFILE_ITEM 圖文頁右上角選單,ADD_SCENE_PAID 支付後關注,ADD_SCENE_OTHERS 其他 "qr_scene": 98765, "qr_scene_str": "" }
參考連結:
ofollow,noindex">https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183