宝哥软件园

微信小程序登录逻辑排序

编辑:宝哥软件园 来源:互联网 时间:2021-12-12

官方文档

文档相关地址3360

用户登录以获得用户数据、签名验证、用户数据的加密和解密

登录时序图.png

微信两个api所拿到的信息:login和getUserInfo

返回的信息.png

注册/登录

小程序端:

通过上面的两个API wx . log in和wx.getUserInfo获取相应的信息,并通过上面的接口传输到自己的服务器。要传输的信息有七个参数3360。

appid小程序唯一标识秘密小程序的app secretjs_code //wx.login登录时获取的代码,用于后续获取session_key//用户的签名以下两个参数的服务器端签名验证用户信息使用sha1( rawData sessionkey)获取字符串,用于验证用户信息。原始数据不包括敏感信息的原始数据字符串,用于计算签名。//以下两个参数是加密数据iv加密算法的初始向量,用于解密openId和UnionId的加密数据,包括敏感数据。当然,它可以简化为以下三个参数。签名验证的其他参数可以省略,而appid和secret可以直接写在服务器上。

Js_code //wx.login是登录时获取的代码,用于获取session_keyencryptedData的加密数据,包括敏感数据。iv加密算法的初始向量为

服务端处理逻辑

。在相关信息被传输到服务器之后,服务器

1.首先去微信服务器根据js_code获取session_key2。(此步骤可省略)使用sha1( rawData sessionkey)获取字符串,判断是否与签名值相同。如果相同,则用户信息正确,然后继续下一步。如果不同,则表示用户信息已被篡改或过期。3.然后根据解密算法自己解密(输入参数为AppID、Sessionkey、加密数据、IV,并返回一个jsonObj),获取openId、unionId等信息,在服务器端进行注册/登录操作。4.注册/登录操作逻辑完成后,将我们服务器的sessionId(或其他令牌)和用户信息返回给客户端。

其中,服务器去获取session_key的请求为:

(固定用小写写)https://API . weixin . QQ . com/SNS/jscode 2 session要换成大写吗?appid=APPIDsecret=SECRETjs _ code=JSCODEgrant _ type=authorization _ code

返回:

//JSON数据包正常返回{'OpenID' :' OpenID ',' session _ key ' 3360 ' session key ' ' expires _ in ' 3360 2592000 }//出现错误时返回JSON数据包(例如,代码无效){'errcode': 40029,' errmsg': '无效代码' }

相关解密算法:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

请注意,在:示例代码中有node、c、php、python,没有java。

需要服务器返回的信息:

session id/Token/Token登录状态标识userInfo: jsonObject,我们平台上用户的信息与getPersonalInfo接口返回的信息相同。

最后,将登录操作封装成方法,需要处调用即可

//方法function log in(){ console . log(' logging……'))最终用于外部呼叫;/var code=e . code;wx . GetUserInfo({ success : function(RES){ console . log(' WxGetUserInfo success . '));var encryptedData=encodeURIComponent(RES . encryptedData);thirdLogin(代码,encryptedData,RES . iv);//调用服务器API } })});}函数thirdLogin(代码,encryptedData,iv){ var URL=' eeee/XXX/log in/tttt ';var params=新对象();params.code=codeparams . encrypted data=encrypted data;params.iv=ivbuildRequest(新对象(),url,参数,{ onPre: function(页面){},onSuccess:function(数据){ console.log('我的登录成功. '));console.log(数据);getApp(). global data . session _ id=data . session _ id;getApp()。getApp(). global data . islogin=true;},onError :函数(msgCanShow,code,hiddenMsg){ } })。send();}

更多资讯
游戏推荐
更多+