说明:由于微信小游戏提审,项目中包含创角,聊天等功能需要接入微信公众平台内容安全API(imgSecCheck、msgSecCheck)当然这些都可以像接米大师那样通过php等创建接口给客户端调用,也可以使用微信提供的云函数去调用。刚好这次为了省事就开通了云函数,初次使用还是需要注意几个点的。
一,开通云开发并且初始化配置
工具左上角选择云开发并设置环境ID (mtgame)
开通后按照文档 我的第一个云函数 配置,在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,指定本地已存在的目录作为云开发的本地根目录
1 2
| { "cloudfunctionRoot": "cloudfunctions/"}
|
项目会自动生成云函数目录
二,创建云函数目录
选中cloudfunctions目录右键新建node.js 云函数
就会生成下面文件,其中index.js 即使云函数
三,安装 wx-server-sdk 依赖
在对应云函数目录下安装 wx-server-sdk 依赖
在函数目录中生成出mode_modules和package_lock文件
四,云函数中调用其他云函数
已调用msgSecCheck 为例,在云函数目录的index.js 中添加代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV,}) exports.main = async (event, context) => { try { const result = await cloud.openapi.security.msgSecCheck({ "openid": 'OPENID', "scene": 1, "version": 2, "content": 'hello world!' }) return result } catch (err) { return err }}
|
在项目中调用云函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Api { public static async MsgSecCheck(content) { return new Promise((resolve, reject) => { wx.cloud.init({ env: wx.cloud.DYNAMIC_CURRENT_ENV, }); let data = { "openid": UserData.openId, "scene": 1, "version": 2, "content": content } wx.cloud.callFunction({ name: 'msg_sec_check', data: data, success: function (result) { resolve(result); }, fail: function (err) { reject(err); } }) }); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public static async MsgSecCheck(content) { if (egret.Capabilities.runtimeType != egret.RuntimeType.WXGAME) { return true; } let state: boolean = false; await Api.MsgSecCheck(content).then((res: any) => { console.log("校验文本是否违规返回数据"); console.log(res); if (res.result.errCode == 0) { let label = res.result.result.label; switch (label) { case 100: state = true; break; default: state = false; break; } } else { state = false; } }).catch(err => { console.log("校验文本是否违规微信云函数报错"); console.warn(err); }); return state; }
this.MsgSecCheck(content).then(function (value) { if (value) { console.log(“符合规范”); } else { alert("玩家名称不符合规范,请修改!") } });
|
五,问题
在项目调用云函数中需要添加wx.cloud.init 不然会报 “请先调用 wx.cloud.init() 完成初始化后再调用其他云 API” 或许是我代码的问题,但是这问题网上大部分都是小程序;小游戏的处理方式如下
1 2 3
| wx.cloud.init({ env: wx.cloud.DYNAMIC_CURRENT_ENV, });
|
六,本地调试
初次使用还不清楚需要开启本地调试才能调用云函数 参考文档 云函数本地调试功能
在左上角打开云开发 进入控制台查看调用日志
七,上传并部署
选中云函数目录右键选择上传并且部署然后开启本地调试