egret初次使用微信小游戏云函数调用和问题
ChrisXie Lv5

说明:由于微信小游戏提审,项目中包含创角,聊天等功能需要接入微信公众平台内容安全API(imgSecCheckmsgSecCheck)当然这些都可以像接米大师那样通过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,
});

六,本地调试

初次使用还不清楚需要开启本地调试才能调用云函数 参考文档 云函数本地调试功能

在左上角打开云开发 进入控制台查看调用日志

七,上传并部署

选中云函数目录右键选择上传并且部署然后开启本地调试

 评论
相关文章
标签云 更多