• 微信小游戏云开发入门


    作为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
  • 相关阅读:
    java的sha1加密,转化为python版本
    VUE:页面跳转时传递参数,及参数获取
    如何使用 Django中的 get_queryset, get_context_data和 get_object 等方法
    django orm 外键id返回对应的名称
    spring boot(一):入门篇
    redis学习(四)——Hash数据类型
    redis学习(三)——List数据类型
    redis学习(二)——String数据类型
    Java多线程(七)——线程休眠
    MySQL和B树的那些事
  • 原文地址:https://www.cnblogs.com/honghong87/p/11669809.html
Copyright © 2020-2023  润新知