官方文档文档相关地址:用户数据签名验证和加解密

2021-07-23
来源:网络整理

正式文件

与文件相关的地址:

用户登录

获取用户数据

用户数据的签名验证以及加密和解密

登录顺序图.png

通过微信的两个API获取的信息:和

.png

注册/登录迷你终端:

通过上述wx获取相应的信息。和wx。两个api,然后通过上述界面将其传递到您自己的服务器。

要传输的信息具有7个参数:

appid 小程序唯一标识 secret 小程序的 app secret js_code //wx.login登录时获取的 code,用于后续获取session_key //下面两个参数用户服务器端签名校验用户信息的 signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。 rawData 不包括敏感信息的原始数据字符串,用于计算签名。 //下面两个参数是用于解密获取openId和UnionId的 encryptedData 包括敏感数据在内的完整用户信息的加密数据 iv 加密算法的初始向量

当然,它可以简化为以下三个参数。

其他签名验证参数可以省略,并且总和可以直接写在服务器上。

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。

需要服务器返回的信息:

sessionId/token 登录状态标识 userInfo: jsonObject,用户在我们平台上的信息,其内容与getPersonalInfo接口返回的相同.

最后,将登录操作封装到一个方法中,并在必要时调用它

//最终供外面调用的方法 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(); }

分享