1.前端調(diào)用wx.login()獲取code值
2.前端通過(guò)調(diào)用wx.getUserInfo獲取iv、rawData、signature、encryptedData等加密數(shù)據(jù),傳遞給后端
3.服務(wù)器通過(guò)code請(qǐng)求api--auth.code2Session,換回session_key和openid
示例代碼
(判斷用戶的openid是否在數(shù)據(jù)庫(kù)中不在就加入成為會(huì)員,再給前端發(fā)送token(隨機(jī)字符,也可以用時(shí)間戳+openid) )
4前端得到token,保存到緩存sto,
5前端發(fā)送消息到服務(wù)器時(shí)帶上token,
6服務(wù)器驗(yàn)證token(如果token用時(shí)間戳,跟新時(shí)間戳,)
注:
1.Token是在客戶端頻繁向服務(wù)端請(qǐng)求數(shù)據(jù),服務(wù)端頻繁的去數(shù)據(jù)庫(kù)查詢用戶名和密碼并進(jìn)行對(duì)比,判斷用戶名和密碼正確與否,并作出相應(yīng)提示,
2.Token的目的是為了減輕服務(wù)器的壓力,減少頻繁的查詢數(shù)據(jù)庫(kù),使服務(wù)器更加健壯。愛(ài)掏網(wǎng) - it200.com
3. 前端調(diào)用 wx.checkSession 接口檢測(cè)當(dāng)前用戶登錄態(tài)是否有效。愛(ài)掏網(wǎng) - it200.com(用戶有可能退出小程序)
登錄態(tài)過(guò)期后開(kāi)發(fā)者可以再調(diào)用 wx.login 獲取新的用戶登錄態(tài)。愛(ài)掏網(wǎng) - it200.com調(diào)用成功說(shuō)明當(dāng)前 session_key 未過(guò)期,調(diào)用失敗說(shuō)明 session_key 已過(guò)期
//開(kāi)發(fā)者應(yīng)在后端服務(wù)器使用getAccessToken獲取?access_token(2小時(shí)有效)
//兩種授權(quán)機(jī)制
第一種:每次拿授權(quán)信息前,都去login拿最新的code找后端獲取數(shù)據(jù) --token(后端自己維護(hù))。愛(ài)掏網(wǎng) - it200.com
第二種:授權(quán)時(shí)先調(diào)用checkSession判斷session_key是否失效( ),失效重新調(diào)用wx.login。愛(ài)掏網(wǎng) - it200.com沒(méi)失效只給后端iv和data去獲取數(shù)據(jù),后端照樣返回你數(shù)據(jù)~
session_key 是有時(shí)效性的,它的時(shí)效性就是通過(guò) checkSession 來(lái)檢查的。愛(ài)掏網(wǎng) - it200.com因此如果 checkSession 說(shuō)登錄失效了,那么通常你就需要重新進(jìn)行微信授權(quán),更新 session_key
4.服務(wù)器通過(guò)前端給的rawData 加獲取的session_key使用sha1加密,計(jì)算出signature1
5.比對(duì)前端傳的signature和自己算出來(lái)的signature1是否一致(防止數(shù)據(jù)不一致)
6.用AES算法解密encryptedData里的敏感數(shù)據(jù)
7.拿著敏感數(shù)據(jù)后做自己的邏輯
8.通知前端登陸成功
一、通過(guò)基礎(chǔ)接口token獲取用戶信息
1、獲取token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
2、獲取個(gè)人信息(如果不關(guān)注公眾號(hào),返回“未關(guān)注”狀態(tài),拉取不到更多信息)
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
二、通過(guò)社交接口token獲取用戶信息(不需要關(guān)注公眾號(hào))
1、獲取CODE
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數(shù)scope 默認(rèn)有2個(gè)值snsapi_base(只獲取openid)和snsapi_userinfo(可獲取更多用戶信息、頭像、昵稱等,需要用戶在網(wǎng)頁(yè)授權(quán))
2、獲取token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
3、獲取用戶信息
https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID&lang=zh_CN