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);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值