-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathupdateWechatMenu.js
76 lines (66 loc) · 2.16 KB
/
updateWechatMenu.js
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
var fs = require('fs');
var request = require('request');
var jf = require('jsonfile');
var inquirer = require("inquirer");
// access_token get :
// 1. ssh to server
// 2. rails c -e production
// 3. Rails.cache.fetch('wechat_access_token')
// 4. if is nil , you should trigger get access_token on the backend
var access_token = require('./token');
var url;
var menuJSON = 'menu.json';
var question = {
type: 'list',
name: 'type',
message: '请选择操作',
default: 0,
choices: [
'1. 从服务器上更新最新版菜单到menu.json',
'2. 上传menu.json到服务器'
]
};
inquirer.prompt([question], function( answers ) {
if(answers.type == question.choices[0]) {
// get menu
url = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token=' + access_token;
request.get(url, function (err, res, body) {
var result = JSON.parse(body);
jf.writeFile(menuJSON, result, function(err) {
if(result.errcode) {
console.log('看起来像是access_token错误,检查一下代码里设置的access_token吧');
console.log(result.errmsg);
} else {
console.log('已同步至menu.json');
console.log('编辑完成后再次运行选择上传即可');
}
})
});
} else if(answers.type == question.choices[1]) {
fs.readFile(menuJSON, function(err, data) {
if(err) {
console.log(err.message);
return;
} else {
createMenu(JSON.parse(data));
}
});
function createMenu (menuData) {
console.log('正在发送数据...');
var jsonData = menuData.menu;
// Hack: 剔除空菜单放置微信报错
jsonData = JSON.stringify(jsonData).replace(/,"sub_button":\[\]/g, '');
request.post(`https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${access_token}`, {
body: jsonData,
timeout: 1500
}, function (err, res, body) {
var result = JSON.parse(body);
if (result.errcode === 0) {
console.log('更新成功,你可以重新关注查看效果');
} else {
console.log('Error:',result.errcode,result.errmsg);
}
});
}
}
});