欢迎来到[自学php网] ①群 287460651

主页 > 游戏引擎 > Phaser游戏引擎 >

Phaser微信小游戏开发教程三

来源:未知    时间:2019-08-20 11:46 作者:小飞侠

[导读] 今天带来Phaser微信小游戏开发教程三教程, 写在前面的话:这篇文章涉及到一些后端知识,这里不会放出服务器代码,想要代码的同学可以加入QQ群,找站长要。 微信登录几乎是每个游...

今天带来Phaser微信小游戏开发教程三教程,

写在前面的话:这篇文章涉及到一些后端知识,这里不会放出服务器代码,想要代码的同学可以加入QQ群,找站长要。

微信登录几乎是每个游戏都需要考虑的问题,同样,用户信息,好友排名等等,也是如此,这篇文章我们逐一探讨。

如何拿到用户id?

首先我们来说说如何实现微信登录,其实微信登录的api很简单,就是wx.login,在success的回调中,你会拿到一个code,这时候,你要拿着这个code去请求后端,得到返回的openid,这个openid就相当于用户id了。至于后端的逻辑我们稍后再说,这里先说说openid。每一个微信用户都有一个openid,它们是一一对应的关系,但是openid并不是微信号,因为微信号这种信息,腾讯是不会给你的。

现在说说后端拿到code之后,怎么处理,其实很简单,后端拿到code之后,将它连同appid和appsecret一起作为参数,请求jscode2session接口获取用户的openid,注意,code只能用一次。这里接口会返回openid和sessionid,很明显,sessionid是微信的sessionid,并不建议保存到客户端,所以这里我们一般会做一个处理,我们会把我们自己服务器的sessionid和openid做一个映射放到缓存,然后将自己服务器的sessionid和openid返回。

如何获取用户信息?

用户信息其实是在另外一个接口中,叫做wx.getUserInfo,在回调中,你能够获取到用户昵称、用户头像、用户性别、用户城市、省份、国家6个信息。那么有人就要问了,既然这里就能够获取到用户信息,那么为什么还要去用wx.login获取什么openid呢?原因很简单,因为wx.getUserInfo获取到的6个信息,没有一个能够用来作为id,用户的昵称可能是重复的,用户的头像地址也可能是会变化的。所以这里我们要把之前获取到的openid和这里的信息结合起来,形成一条用户记录,推到数据库。

用户登录流程小结:

1、先本地取sessionId,

取到后调用wx/refresh_session.php,查看sessionId是否还能用,不能用重新login

取不到调用wx.login请求wx/onlogin.php,拿到sessionId

2、调用wx.getUserInfo,获取用户信息

用户拒绝则进入游客模式

3、获取到信息后,用sessionId,调用wx/user_info.php,上报用户信息,这里获取用户其他游戏数据并保存本地

其实到这里,我们就可以做出世界排名这种东西了,但是没办法做出好友排名。下面我们看看如何实现好友排名。

如何获取好友信息?

好友信息在微信中叫做关系链,包括两个方面,用户好友和群友。我们先给出文档地址,不了解的伙伴可以去了解一下,小游戏文档:https://developers.weixin.qq.com/minigame/dev/document/render/canvas/wx.createCanvas.html

小程序文档:https://developers.weixin.qq.com/miniprogram/dev/api/

文档我是建议通读的,至少目录要通读,避免遗漏重要信息。

很明显,我们要用到开放域。大家重点看关系链数据使用指南这篇文章,我这里给出核心代码:

设置游戏数据,这个数据是存储到了腾讯的服务器,并且这个函数可以在主域中使用:


wx.setUserCloudStorage({  
KVDataList: [{    key: "score",    value: scoreValue + ""  }],  
success: function() {    console.log('save score ' + scoreValue + ' success');  },  
fail: function() {    console.log('save score ' + scoreValue + ' fail');  },  
complete: function() {    console.log('save score ' + scoreValue + ' complete');  
}});

获取游戏数据的时候,只能在开放域使用,主域通过postMessage发送消息:

wx.getUserCloudStorage({  
keyList: ["score"],  
success: function(obj) {    
if(obj.KVDataList) {      
for(var i=0; i<obj.KVDataList.length; i++) {        
console.log('get ' + obj.KVDataList[i].key + ' : ' + obj.KVDataList[i].value);      }    
} else {      
console.log('KVDataList null');    }  },  
fail: function() {    console.log('get data fail');  },  
complete: function() {    console.log('get data complete');  
}});

获取好友游戏数据的时候,同样只能在开放域使用,主域通过postMessage发送消息:

wx.getFriendCloudStorage({  
keyList: ["score"],  
success: function(obj) {    
console.log(obj)    
if(obj.data) {      
for(var i=0; i<obj.data.length; i++) {        
console.log('get ' + obj.data[i].nickname + ' : ' + obj.data[i].avatarUrl);        
if(obj.data[i].KVDataList) {          
for(var j=0; j<obj.data[i].KVDataList.length; j++) {            
console.log('get ' + obj.data[i].KVDataList[j].key + ' : ' + obj.data[i].KVDataList[j].value);          
}        }      }    } else {      
console.log('KVDataList null');    }  },  
fail: function() {    console.log('get friend data fail');  },  
complete: function() {    console.log('get friend data complete');  }})

最后,绘制排行榜,其实就是在开放域将好友数据绘制到canvas中,再把canvas传给主域,这里感谢网友aleaf给出的方案:http://club.phaser-china.com/topic/5af6bf52484a53dd723f42e1,实现代码已经放到了案例中,大家可以查看:https://github.com/channingbreeze/phaser-wxdemo

这里我们再来解释一下,为什么微信要搞这么复杂呢?又是开放域,又是主域的。我相信聪明的读者肯定已经猜到,是为了用户数据安全。用户数据从来都是非常敏感和重要的信息,绝对不可能通过简单的接口就透露出来,特别是好友关系这种数据,很容易被不法分子和黑客利用。但是作为微信小游戏,有需要好友排名这种功能,怎么办呢?所以微信实现了开放域这样一套机制,只允许在开放域中获取好友信息,并且开放域中的数据不能发送出来,只能画在canvas上,形成图片,再通过drawImage方式被绘制到主域,可谓用心良苦。


以上就是今天带来Phaser微信小游戏开发教程三教程全部教程,感谢大家支持自学php网。

最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com