Node.js开发实战之自定义微信菜单
沉沙 2018-07-19 来源 : 阅读 528 评论 0

摘要:上一篇文章中,我们使用 Node.js 成功的实现了access_token 的获取、存储以及更新,这篇文章我们来实现微信的自定义菜单功能。希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

一、写在前面的话

  上一篇文章中,我们使用 Node.js 成功的实现了access_token 的获取、存储以及更新,这篇文章我们来实现微信的自定义菜单功能。

二、自定义微信菜单

1.微信文档步骤
  在开始码代码之前,我们依然是先理清实现的思路,再开始编写实现代码。打开 微信帮助文档 ,点击左侧菜单中的 自定义菜单,点击其子菜单 自定义菜单创建接口,如图:

 

  由上图我们总结以下步骤:

1. 自定义微信请求是以 https POST请求方式

2. 数据是以 JSON 格式传入

2.实现 https POST请求

  紧接着上一篇文章的代码,源码地址: https://github.com/SilenceHVK/wechatByNode ,克隆到本地文件中

git clone git@github.com:SilenceHVK/wechatByNode.git

  打开 wechat 文件夹中的 wechat.js 文件,并在 WeChat 构造函数内部添加 requestPost 方法

//用于处理 https Post请求方法

    this.requestPost = function(url,data){

        return new Promise(function(resolve,reject){

            //解析 url 地址

            var urlData = urltil.parse(url);

            //设置 https.request  options 传入的参数对象

            var options={

                //目标主机地址

                hostname: urlData.hostname, 

                //目标地址

                path: urlData.path,

                //请求方法

                method: 'POST',

                //头部协议

                headers: {

                    'Content-Type': 'application/x-www-form-urlencoded',

                    'Content-Length': Buffer.byteLength(data,'utf-8')

                }

            };

            var req = https.request(options,function(res){

                var buffer = [],result = '';

                //用于监听 data 事件 接收数据

                res.on('data',function(data){

                    buffer.push(data);

                });

                 //用于监听 end 事件 完成数据的接收

                res.on('end',function(){

                    result = Buffer.concat(buffer).toString('utf-8');

                    resolve(result);

                })

            })

            //监听错误事件

            .on('error',function(err){

                console.log(err);

                reject(err);

            });

            //传入数据

            req.write(data);

            req.end();

        });

    }

  在上一篇文章中,我们使用到了 https 的 get 方法发。实际上 https 用于请求的底层方法则是 request 方法,而 get 方法 只是对它的一个封装,但是 Node.js 却没有对 post 进行封装,直到现在 Node.js 8.0 依然没有。具体详情请看 Node.js 中文文档。

提示:

   npm 提供了很多用于请求的工具包,比如 request ( 安装命令 npm install request ) 等。这里我只是用系统包去做请求处理。

3.配置创建微信菜单的连接
  打开 项目文件中的 config.json 文件,在 apiURL 中添加配置:

"createMenu":"%scgi-bin/menu/create?access_token=%s"

4.微信菜单 JSON 格式
  完成了上面的工作后,我们就可以开始微信菜单的创建了。按照微信帮助中菜单示例格式,我们自己定义一个 JSON 格式:

{

     "button":[

        {   

          "type":"view",

          "name":"hvkcoder",

           "url":"//www.cnblogs.com/hvkcode/"

        },

        {   

          "type":"click",

          "name":"今日推荐",

          "key":"today_recommend"

        },

        {   

          "name":"小工具",

          "sub_button":[{

               "type": "scancode_waitmsg", 

               "name": "扫一扫",

               "key": "scancode"

          },{

               "type": "pic_sysphoto", 

               "name": "系统拍照发图",

                "key": "take_photo"

          },{

            "type": "location_select", 

            "name": "发送位置",

            "key": "send_location"

        }]

        }

     ]}

并将它存放在 wechat 文件夹中的 menus.json 文件,如图:

5.请求创建菜单API
  将 menus.json 文件在 wechat.js 文件中引用。这块呢,我就直接在微信接入的方法中去做菜单的创建:

var that = this;

    this.getAccessToken().then(function(data){

        //格式化请求连接

        var url = util.format(that.apiURL.createMenu,that.apiDomain,data);

        //使用 Post 请求创建微信菜单

        that.requestPost(url,JSON.stringify(menus)).then(function(data){

            //将结果打印

            console.log(data);

        });

    });

  如果你目前用的是订阅号的话,那么不好意思朋友,你在运行结果就会看到:

  错误意思是:api未经授权。腾讯本着“没钱,玩你麻痹”的态度,指明订阅号的朋友是不能通过 api 请求去自定义菜单的。

  但是不要伤心,因为腾讯依然很贴心的为我们准备测试公众号,再次打开 微信帮助文档,点击右侧的 开始开发,点击其子菜单 接口测试号申请,如图:

 

  使用手机端微信,扫描二维码后,我们就得到了一个测试公众号。

 

  其他的信息我们都不需要去管,主要去修改 appID 和 appsecret,并将 access_token.json 所保存的数据更改为:

{"access_token":"","expires_time":0}

随后重新运行就可以了,是不是很简单呢。

  扫面一下测试公众号二维码

 

本文由职坐标整理并发布,了解更多内容,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程