zoukankan      html  css  js  c++  java
  • 微信小游戏云开发入门

    作为h5游戏前端来说,对javascript肯定是很熟悉, 如果不熟悉,那就是被typescript害惨了.

    js很强大,不仅仅体现了前端,在服务器端也是大显神威 nodejs,mongodb.

    恰巧微信小游戏云开发,nodejs,mongodb正好能用得上。所以我觉得在一款单机游戏中试水云开发,装装13.

    万事开头难~~~

    在开发之前我关心下面几件事件

    1:了解一些概念

    2: 小游戏云开发提供了什么?

    3:开发环境及鉴权?

    4:数据存储调用?

    5:怎样调用?

    概念:

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token,开发者需要进行妥善保存。

    openid 是用户唯一标识,且没有过期时间

    获取access_token(微信小游戏服务器端) 见 https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/access-token/auth.getAccessToken.html

    小游戏云开发提供了 数据库  存储  云函数

    作为了一个小游戏开发码农来说, 买服务器,配cdn等都是很麻烦的,小游戏云开发环境都给提供了。

    另外能满足基本的需求,但是如果量大的话,花钱买容器嘛。如果数据不好的话,一毛钱的损失都没有。

    例子:  在线对战五子棋: 云开发 / 小游戏  https://tencentcloudbase.github.io/

    开发环境及鉴权

      传统的鉴权:通过access_token 

      鉴权: 自带鉴权光环,不必是传统一的token形式

      环境: 通过配置云开发的根目录(project.config.json中增加了字段 cloudfunctionRoot 用于指定存放云函数的目录)

        云函数写好后,要上传到云开发环境

                  微信小游戏端  初始化云环境后,wx.cloud.init({env:}),  就可以调用云函数了.

    获取access_token

    const cloud = require('wx-server-sdk')
    const rp = require('request-promise')
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
     const page = event.page
     const scene = event.scene
     //appid和秘钥
     const appid = '***',
     secret = '***';
     const AccessToken_options = {
     method: 'GET',
     url: 'https://api.weixin.qq.com/cgi-bin/token',
     qs: {
     appid,
     secret,
     grant_type: 'client_credential'
     },
     json: true
     };
    
     //获取AccessToken
     const resultValue = await rp(AccessToken_options);
     const token = resultValue.access_token;
    }
    // 操作数据库
    const wxContext = cloud.getWXContext()
    let user = db.collection('user')
    let {total} = awaitnew Promise( (resolve, reject)=>{
        user.where({ _openid: wxContext.OPENID }).count().then( res=>{
            resolve(res)
        })
    })
    let data = {
        _openid: wxContext.OPENID,
        updateDate:new Date().getTime(),
        ...event,
    }
    if( total == 0 ){
        data.createDate =new Date().getTime()
        return await user.add({ data }).then( res=>{
            console.log('新增成功->', res)
            return res
        }).catch( err=>{
            console.log('新增失败',err)
        })
    }else{
        return await user.where({ _openid: wxContext.OPENID }).update({ data }).then( res=>{
            console.log('更新成功->', res)
            return res
        }).catch( err=>{
            console.log('更新失败',err)
        })
    }
    数据库增删查改 https://www.jianshu.com/p/1fab91447721
  • 相关阅读:
    iOS取消按钮点击时的动画效果
    iOS实现简书和知乎的上滑隐藏导航栏下拉显示导航栏效果
    idea添加Jetty时提示JMX module is not included
    人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间
    如果做好一个出色的程序员
    阅读的技巧
    JQuery返回布尔值Is()方法.条件判断
    Javascript遍历each与map
    html5Canvas绘制弧线(圆形)
    jQuery插件背景滑动菜单(第二次自已偿试写插件)
  • 原文地址:https://www.cnblogs.com/honghong87/p/11669809.html
Copyright © 2011-2022 走看看