知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們在追求其視覺表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?
您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
微信小程序登錄邏輯整理
發(fā)表時(shí)間:2021-4-30
發(fā)布人:葵宇科技
瀏覽次數(shù):108
官方文檔
文檔相關(guān)地址:
用戶登錄
獲取用戶數(shù)據(jù)
用戶數(shù)據(jù)的簽名驗(yàn)證和加解密
微信兩個(gè)api所拿到的信息:login和getUserInfo
注冊/登錄
小程序端:
通過上面wx.login和wx.getUserInfo兩個(gè)api拿到相應(yīng)的信息,并通過上方接口傳給自己的服務(wù)器.
需要傳輸?shù)男畔⒂?個(gè)參數(shù):
appid 小程序唯一標(biāo)識
secret 小程序的 app secret
js_code //wx.login登錄時(shí)獲取的 code,用于后續(xù)獲取session_key
//下面兩個(gè)參數(shù)用戶服務(wù)器端簽名校驗(yàn)用戶信息的
signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校驗(yàn)用戶信息。
rawData 不包括敏感信息的原始數(shù)據(jù)字符串,用于計(jì)算簽名。
//下面兩個(gè)參數(shù)是用于解密獲取openId和UnionId的
encryptedData 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)
iv 加密算法的初始向量
當(dāng)然,可以精簡為以下三個(gè)參數(shù).
其余的簽名校驗(yàn)的參數(shù)可省略,而appid和secret可以直接寫在服務(wù)器.
js_code // wx.login登錄時(shí)獲取的 code,用于后續(xù)獲取session_key
encryptedData 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)
iv 加密算法的初始向量
服務(wù)端處理邏輯
相關(guān)的信息傳輸給服務(wù)器后,服務(wù)器
1.先根據(jù)js_code去微信服務(wù)器拿到session_key
2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判斷與signature值是否相同,如果相同則用戶信息無誤,可進(jìn)行下一步.如果不同,則說明用戶信息被篡改或過期.
3.然后根據(jù)解密算法自行解密(輸入?yún)?shù)為appId,sessionKey,encryptedData,iv,返回一個(gè)jsonObj),拿到openId和unionId等信息,執(zhí)行服務(wù)器端的注冊/登錄操作.
4.注冊/登錄操作邏輯完成后,將我們服務(wù)器的sessionId(或其他token),以及用戶信息返回給客戶端.
其中,服務(wù)器去獲取session_key的請求為:
(小寫為固定寫好的,大寫為待替換的)
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
返回:
//正常返回的JSON數(shù)據(jù)包
{
"openid": "OPENID",
"session_key": "SESSIONKEY"
"expires_in": 2592000
}
//錯(cuò)誤時(shí)返回JSON數(shù)據(jù)包(示例為Code無效)
{
"errcode": 40029,
"errmsg": "invalid code"
}
相關(guān)解密算法:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
注意:示例代碼中有node,c++,php,python的,沒有java的.
需要服務(wù)器返回的信息:
sessionId/token 登錄狀態(tài)標(biāo)識
userInfo: jsonObject,用戶在我們平臺上的信息,其內(nèi)容與getPersonalInfo接口返回的相同.
最后,將登錄操作封裝成方法,需要處調(diào)用即可
//最終供外面調(diào)用的方法
function login(){
console.log('logining..........');
//調(diào)用登錄接口
wx.login({
success: function (e) {
console.log('wxlogin successd........');
var code = e.code;
wx.getUserInfo({
success: function (res) {
console.log('wxgetUserInfo successd........');
var encryptedData = https://www.wxapp-union.com/encodeURIComponent(res.encryptedData);
thirdLogin(code,encryptedData,res.iv);//調(diào)用服務(wù)器api
}
})
}
});
}
function thirdLogin(code,encryptedData,iv){
var url ="eeee/xxx/login/ttttt";
var params = new Object();
params.code = code;
params.encryptedData = https://www.wxapp-union.com/encryptedData;
params.iv =iv;
buildRequest(new Object(),url,params,{
onPre: function(page){},
onSuccess:function (data){
console.log('my login successd........');
console.log(data);
getApp().globalData.session_id = data.session_id;
getApp().globalData.uid = data.uid;
getApp().globalData.isLogin = true;
},
onError : function(msgCanShow,code,hiddenMsg){
}
}).send();
}
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站上首頁
- 小程序開發(fā)課程
- 云南網(wǎng)站建設(shè)哪家強(qiáng)
- 云南網(wǎng)站制作
- 南通小程序制作公司
- 網(wǎng)站建設(shè)公司地址
- 手機(jī)網(wǎng)站建設(shè)
- 云南網(wǎng)站建設(shè)選
- 報(bào)廢車拆解軟件
- 云南網(wǎng)站建設(shè)案例
- 網(wǎng)站沒排名
- 開通微信小程序被騙
- 網(wǎng)站制作哪家好
- 搜索引擎自然排名
- 小程序退款
- 小程序開發(fā)聯(lián)系方式
- web教程
- 云南網(wǎng)站建設(shè)首頁
- 百度小程序公司
- 昆明小程序開發(fā)聯(lián)系方式
- 海報(bào)插件
- 公眾號模板消息
- 昆明軟件定制公司
- 英文網(wǎng)站建設(shè)公司
- 微分銷
- web開發(fā)技術(shù)
- 云南小程序開發(fā)報(bào)價(jià)
- 軟件定制公司
- 汽車拆解系統(tǒng)
- 網(wǎng)站搭建