频道栏目
首页 > 资讯 > 微信公众平台开发 > 正文

(基于nodejs)微信测试号创建自定义菜单

16-06-17        来源:[db:作者]  
收藏   我要投稿

思路流程如下: 首先通过测试号的信息(appid和secret)获取到接口调用凭据(access_token),然后调用创建自定义菜单的接口。往该微信的URL地址 post 我们想要创建的菜单信息(body), 然后剩下的微信服务器自动帮我们更新好了菜单(你可以先取消关注测试号,再关注测试号,就可以立即看到更新后的菜单。)

步骤1:查看公众号开发者文档

http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html

1) (创建自定义菜单)接口调用请求说明: http请求方式:POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

因此,我们必须先获取到access_token !

2) 如何获取access_token? 查看文档
(http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html)

access_token接口调用请求说明如下图所示:

其中,appid和secret为测试号的用户及密码,在测试号主页的测试号信息中。

步骤2: 在服务器上创建一个menu.js 文件,代码内容如下:


var https = require('https');
var request = require('request');
var Promise = require('promise');  //promise用于流程控制,即保证先获取到access_token,在调用创建自定义菜单接口

var appId = 'wx482687a49f5f45b3'; //记得换成你自己测试号的信息
var appSecret = 'aca22799b4549eaeaaacf6b652605c1a';

function getToKen(appId, appSecret) {        

    return new Promise(function (resolve, reject) {

        var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appId + '&secret=' + appSecret;
        request({
            uri : url
        }, function (err, res, data) {
            var result = JSON.parse(data);
            console.log("result.access_token=", result);

            resolve(result.access_token);  //把获取的access_token返回去
        });

    });

}

   //menu为创建自定义菜单的具体内容,也就是post到微信服务器的body
var menu = {          
    "button" : [{
            "name" : "我的账号",
            "sub_button" : [{
                    "type" : "click",
                    "name" : "test1",
                    "key" : "V1001_MY_ACCOUNT"
                }, {
                    "type" : "click",
                    "name" : "test2",
                    "key" : "V1002_BID_PROJECTS"
                }, {
                    "type" : "click",
                    "name" : "test3",
                    "key" : "V1003_RETURN_PLAN"
                }, {
                    "type" : "click",
                    "name" : "test4",
                    "key" : "V1004_TRANS_DETAIL"
                }, {
                    "type" : "click",
                    "name" : "test5",
                    "key" : "V1005_REGISTER_BIND"
                }
            ]
        }, {
            "type" : "view",
            "name" : "百度",
            "url" : "http://www.baidu.com/"
        }, {

            "type" : "view",
            "name" : "个人博客",
            "url" : "http://blog.csdn.net/yezhenxu1992/"

        }
    ]
};

var post_str = new Buffer(JSON.stringify(menu));   //先将menu转成JSON数据格式,在赋给post_srt数组

//console.log("JSON.stringify(menu)=", JSON.stringify(menu));
//console.log("post_str.toString()=", post_str.toString());
//console.log("post_str.length", post_str.length);


//调用getToken函数,getToken函数执行完,接下来才执行then函数中的匿名函数,其中,access_token为返回来的参数。
//对promise控制流程的原理操作不熟悉的家伙,请移步度娘,这个技术特别重要!尤其是在基于事件、异步IO的nodejs中,很多时候, 代码的执行顺序并非顺序执行,所以很有必要控制代码的流程。

getToKen(appId, appSecret).then(function (access_token)) {  
    var post_options = {
        host : 'api.weixin.qq.com',
        port : '443',
        path : '/cgi-bin/menu/create?access_token=' + access_token,
        method : 'POST',
        headers : {
            'Content-Type' : 'application/x-www-form-urlencoded',
            'Content-Length' : post_str.length
        }
    };

    var post_req = https.request(post_options, function (response) {
            var responseText = [];
            var size = 0;
            response.setEncoding('utf8');
            response.on('data', function (data) {
                responseText.push(data);
                size += data.length;
            });
            response.on('end', function () {
                console.log("responseText=", responseText);
            });
        });

    post_req.write(post_str);   // 把menu数据post到微信服务器,剩下的微信自动帮我们搞定了。
    post_req.end();
});

运行代码,node menu.js

取消关注测试号,再关注测试号, 一切大功告成! 微信,还真是挺有意思,继续向前……

相关TAG标签
上一篇:16年前他被人民日报称为悲剧人物、如今他一手缔造5000亿帝国
下一篇:微信支付
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站