(基于nodejs)微信测试号创建自定义菜单
2016-06-16 16:09
666 查看
思路流程如下: 首先通过测试号的信息(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 文件,代码内容如下:
运行代码,node menu.js
取消关注测试号,再关注测试号, 一切大功告成! 微信,还真是挺有意思,继续向前……
步骤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
取消关注测试号,再关注测试号, 一切大功告成! 微信,还真是挺有意思,继续向前……
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- 一个微信群的兴亡
- 使用ruby部署工具mina快速部署nodejs应用教程
- 微信服务号推送模板消息接口
- C#微信公众号与订阅号接口开发示例代码
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行