微信公衆號開發 - 靜默受權登陸

基本概念:

openid是什麼,一個微信號與一個公衆號對應一個固定不變的openid。因此一個微信號在一個公衆號下的openid是不變的,若是換了一個對應的公衆號,那就是另外一個openid了。且只有在微信自帶瀏覽器中打開的項目纔可獲取到。web

UnionID是什麼,若是開發者擁有多個移動應用,網站應用,公衆號和小程序,能夠經過UnionID來區分用戶的惟一性,由於只要是同一個微信開發平臺帳號下的移動應用,網站應用,公衆號和小程序,用戶的UnionID是惟一的。換句話說,同一個用戶,對同一個微信開發平臺的不一樣應用,UnionID是惟一的。json

準備條件,一個公衆號、一個外網可訪問的域名、該公衆號的AppIDAppSecret、設置網頁受權域名(登錄公衆平臺 設置----->公衆號設置------>功能設置----->網頁受權域名 按步驟操做並設置就好),這個域名就是你獲取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

參數解釋:api

  • 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失效。微信開發

接口說明app

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": ""
}
相關文章
相關標籤/搜索