前几日发布了nodejs搭建微信公众平台后台,今天介绍下平台的自定义菜单接口。
首先自定义菜单接口在刚申请的订阅号中是没有权限设置的,需要认证开通,而服务号在申请成功之后就可以自定义菜单了。
首先我们来看一下菜单的数据格式:
var meno = {
"button":[
{
"type":"click",
"name":"music",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"click",
"name":"singer",
"key":"V1001_TODAY_SINGER"
},
{
"name":"menu",
"sub_button":[
{
"type":"view",
"name":"search",
"url":"http://www.soso.com/"
},
{
"type":"view",
"name":"upload",
"url":"http://121.40.122.155/upload/Upload.html"
},
{
"type":"click",
"name":"up",
"key":"V1001_GOOD"
}]
}]
}
我们可以看到,这是一个json格式的菜单数据,并且是整个菜单的,所以微信公众平台的菜单更新要更新就必须是整个菜单更新,其实菜单本身也是有限制的:
1、目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3、请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
然后我们来看更新自定义菜单的接口:
var params = JSON.stringify(meno);
var options = {};
var ACCESS_TOKEN = config.huaheng.access_token;
var url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='+ACCESS_TOKEN;
console.log(url);
console.log(params)
needle.post(url, params, options, function(err, resp) {
console.log("setmenu");
console.log(resp.body);
// you can pass params as a string or as an object.
});
其实,我们可以看出来就是个post接口,有人要问了ACCESS_TOKEN参数是个什么呢?
ACCESS_TOKEN是需要从微信后台那边获取的,相当于是一个可以更新自定义菜单的钥匙,下面我们来看一下这个ACCESS_TOKEN到底是怎么获取的:
var AppId = config.huaheng.AppId;
var AppSecret = config.huaheng.AppSecret;
var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='
+AppId+'&secret='+AppSecret;
needle.get(url, function(err, resp) {
if(config.model == "test"){
}else{
config.huaheng.access_token = resp.body.access_token;
console.log(config)
}
});
大家可以看见获取ACCESS_TOKEN的接口是个get接口,而参数AppId和AppSecret都是在申请好公众号以后会显示在公众号管理后台的。
微信5.4版本推出以后,除了点击发送信息和跳转链接两种形式,又新增了六种形式的自定义菜单,大家有兴趣的可以自己研究。
现在的微信公众平台的官方后台已经可以配置自定义菜单了,不过仅限于发送信息和跳转链接两种形式。
https://blog.51cto.com/xuepiaoqiyue/1562260