官方文檔文檔相關(guān)地址:
用戶登錄
微信兩個api所拿到的信息:login和getUserInfo
注冊/登錄小程序端:
通過上面wx.login和wx.getUserInfo兩個api拿到相應(yīng)的信息,并通過上方接口傳給自己的服務(wù)器. appid 小程序唯一標(biāo)識 secret 小程序的 app secret js_code //wx.login登錄時獲取的 code,用于后續(xù)獲取session_key //下面兩個參數(shù)用戶服務(wù)器端簽名校驗用戶信息的 signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校驗用戶信息。 rawData 不包括敏感信息的原始數(shù)據(jù)字符串,用于計算簽名。 //下面兩個參數(shù)是用于解密獲取openId和UnionId的 encryptedData 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù) iv 加密算法的初始向量
當(dāng)然,可以精簡為以下三個參數(shù). js_code // wx.login登錄時獲取的 code,用于后續(xù)獲取session_key encryptedData 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù) iv 加密算法的初始向量 服務(wù)端處理邏輯相關(guān)的信息傳輸給服務(wù)器后,服務(wù)器
1.先根據(jù)js_code去微信服務(wù)器拿到session_key 其中,服務(wù)器去獲取session_key的請求為:
(小寫為固定寫好的,大寫為待替換的) 返回: //正常返回的JSON數(shù)據(jù)包 { "openid": "OPENID", "session_key": "SESSIONKEY" "expires_in": 2592000 } //錯誤時返回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 = 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 = 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(); } |