NodeJS 微信公共号开发 - 设置自定义菜单

背景

使用 NodeJS 进行微信公共号开发,启用服务器配置后菜单配置会失效,需要服务器实现对微信菜单进行配置。

启用服务器配置自定义菜单自动失效

20180503-wx-menu-2
在未启用服务器配置的时候,微信菜单可以通过 功能 => 自定义菜单 进行设置:
20180503-wx-menu-1
当启用服务器配置后,功能 => 自定义菜单 内会自动失效,需要从服务器进行公共号菜单的设置:

使用 NodeJS 设置自定义菜单

使用 NodeJS 设置可以将链接、公共号素材、小程序设置到自定义菜单,只需参照自定义菜单文档书写参数即可,实现如下:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const axios = require('axios');

const menuConfig = {
"button": [
{
"type": "view",
"name": "测试链接1",
"url": "http://blog.dongsj.cn/"
},
{
"name": "测试链接2",
"sub_button": [
{
"type": "view",
"name": "测试链接2-1",
"url": "http://blog.dongsj.cn/"
},
{
"type": "view",
"name": "测试链接2-2",
"url": "http://blog.dongsj.cn/"
}
]
}
]
};

const syncTime = 60 * 1000;

async function setWxMenu() {
let accessToken = process.env.accessToken;
console.log('start set wx menu');
if (accessToken) {
let wxMenuResult = await axios.post(`https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${accessToken}`, menuConfig);
console.log(wxMenuResult.data);
if (wxMenuResult.data.errCode) {
console.log('set wx menu error');
setTimeout(() => {
return setWxMenu();
}, syncTime);
} else {
console.log('set wx menu finished');
}
} else {
console.log('token undefined');
console.log('set wx error');
setTimeout(() => {
return setWxMenu();
}, syncTime);
}
}

setTimeout(()=>{
setWxMenu();
},5000);

设置成功后效果如下:
20180503-wx-menu-3

使用 NodeJS 设置个性化菜单

除自定义菜单外,微信还提供了设置根据不同用户信息设置个性化菜单的接口,参照在配置 个性化菜单文档 在配置内添加 matchrule 字段调用接口即可。