为了让大家更好地开发微信小程序,本文主要与您分享微信小程序的登录逻辑,希望对您有所帮助。
注册/登录
迷你终端“>迷你终端:
通过上述wx获取相应的信息。和wx。两个api,然后通过上述界面将其传递到您自己的服务器。
要传输的信息具有7个参数:
appid 小程序唯一标识
secret 小程序的 app secret
js_code //wx.login登录时获取的 code,用于后续获取session_key
//下面两个参数用户服务器端签名校验用户信息的
signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。
rawData 不包括敏感信息的原始数据字符串,用于计算签名。
//下面两个参数是用于解密获取openId和UnionId的
encryptedData 包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量
当然,可以精简为以下三个参数.
其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.
js_code // wx.login登录时获取的 code,用于后续获取session_key
encryptedData 包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量
服务器处理逻辑
相关信息传输到服务器后,服务器
1.首先通过微信服务器获取它
2.(可以省略此步骤)使用sha1(+)获取字符串并判断值是否相同。如果相同,则用户信息正确,您可以继续执行下一步。如果不同,则表示用户信息已被篡改或已过期。
3.然后根据解密算法对自身进行解密(输入参数为,iv,返回一个),获取诸如sum之类的信息微信小程序云开发登陆无效,并执行服务器端注册/登录操作。
4.完成注册/登录操作逻辑后,将我们服务器(或其他)和用户信息返回给客户端。
其中,来自服务器的获取请求是:
(小写表示固定书写,大写表示被替换)
返回:
//正常返回的JSON数据包
{
"openid": "OPENID",
"session_key": "SESSIONKEY"
"expires_in": 2592000
}
//错误时返回JSON数据包(示例为Code无效)
{
"errcode": 40029,
"errmsg": "invalid code"
}
相关的解密算法:
注意:示例代码中包含node,c ++,php和Java。
需要服务器返回的信息:
/登录状态指示器
:我们平台上的用户信息,其内容与界面返回的信息相同。
最后,将登录操作封装到一个方法中,并在必要时调用它
//最终供外面调用的方法
function login(){
console.log('logining..........');
//调用登录接口
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);//调用服务器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();
}