本文主要是介绍cocos + KBEngine 微信小游戏 - 微信登陆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由于微信小游戏没有提供服务端获取微信用户详细信息的接口,所以小游戏的微信登陆,用户信息要依赖客户端获取并上报到服务端,服务端为了数据正确性,需要对客户端上报的信息进行合法性校验。整个流程为:
1.授权(wx.authorize):客户端首先获得查询用户信息的权限。
2.拿到用户信息(wx.getUserInfo):客户端通过微信服务获得用户信息(userInfo),我们这里用到的用户信息包括:用户详细信息userInfo['userInfo'],不包括敏感信息的原始数据字符串userInfo['rawData'],使用 sha1( rawData + sessionkey ) 得到字符串userInfo['signature']。
3.微信登陆(wx.login):客户端向微信服务获得登陆凭证(code)。
3.游戏登陆:客户端拿用户信息(userInfo)和登陆凭证(code)向服务端发起登陆
4.服务端登陆(auth.code2Session):服务端首先通过登陆凭证(code)向微信服务获的用户的唯一标识(openid)及本次登录的会话密钥(session_key)。
5.服务端校验:对 userInfo['rawData'] + session_key 使用sha1算法得到加密后的key,对比key与userInfo['signature']是否相同判定数据正确性
6.服务端使用客户端上传的用户详细信息创建游戏角色
附
微信小程序开发文档 https://developers.weixin.qq.com/minigame/dev/guide/
7.补充:
我的玩家信息(userInfo)是用登陆中的clientData参数传输的,而由于玩家信息(userInfo )中存在中文导致玩家信息校验失败,原因是js插件中writeBlob 对中文的支持不完善,导致与服务器通讯过程中,中文信息传输错误。,所以对插件做如下修改
1.修改调用位置
// bundle.writeBlob(KBEngine.app.clientdatas);
bundle.writeClientData(KBEngine.app.clientdatas);2.KBEngine.Bundle 增加writeClientData函数this.writeClientData = function(v){var s = KBEngine.stringToUTF8Bytes(v);this.checkStream(s.length + 4);this.stream.writeBlob(s);}
这篇关于cocos + KBEngine 微信小游戏 - 微信登陆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!