node微信开发之获取access_token+自定义菜单


Posted in Javascript onMarch 17, 2019

上一篇:自动回复的实现

这两天终于把获取access_token+自定义菜单+授权登录+获取用户信息部分完成了,nodejs其实不是很熟悉,所以估计有很多特性没用起来的,还有很多冗余代码以及各种问题,只能说功能实现了,大家多多担待吧。

获取access_token

因为调用所有公众号的接口都需要用到access_token,所以必须先将access_token缓存起来,方便以后使用,access_token的有效时间为2小时,所以需要定时更新,下面是代码实现。

有一点需要注意,本文会提到两个access_token,还有一个是oauth时会用到,所以大家不要搞混了。

access_token的获取

access_token的获取相对来说很简单了,就是请求一个链接附加参数得到access_token,代码如下:

const getAccessToken = function () {
 let queryParams = {
  'grant_type': 'client_credential',
  'appid': config.appId,
  'secret': config.appSecret
 };

 let wxGetAccessTokenBaseUrl = 'https://api.weixin.qq.com/cgi-bin/token?'+qs.stringify(queryParams);
 let options = {
  method: 'GET',
  url: wxGetAccessTokenBaseUrl
 };
 return new Promise((resolve, reject) => {
  request(options, function (err, res, body) {
   if (res) {
    resolve(JSON.parse(body));
   } else {
    reject(err);
   }
  });
 })
};

请求的三个参数也比较简洁:

参数 是否必须 说明
grant_type 获取access_token填写client_credential
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret

access_token的保存

保存有很多种方法,放在缓存里等,我这边是存放在一个文件里,因为仅仅是一个示例,定时7000s更新。

//保存与更新
const saveToken = function () {
 getAccessToken().then(res => {
  let token = res['access_token'];
  fs.writeFile('./token', token, function (err) {
   
  });
 })
};

const refreshToken = function () {
 saveToken();
 setInterval(function () {
  saveToken();
 }, 7000*1000);
};

这样access_token就能做到定时更新了,注意,如果不是测试好获取token的次数是有限制的,不过一般没什么问题,测试最好还是在测试号上进行。

node微信开发之获取access_token+自定义菜单

自定义菜单

获取access_token后自定义菜单的实现就非常简单了,这里仅仅简单讲一下请求,具体菜单内容请看微信的文档。
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

但是body要带上菜单的内容,就是json数据,但是微信返回的数据是string类型,所以下面也要注意,可能在这边会遇到问题。简单代码如下:

'use strict';
const fs = require('fs');
const request = require('request');

//token,因为token是存在文件里的所以这里进行文件读取得到token
const token = fs.readFileSync('./token').toString();

//常用type为view和click,分别为点击事件和链接
var menus = {
 "button": [
  {
   "name": "测试菜单",
   "sub_button": [
    {
     "type": "view",
     "name": "授权登录",
     "url": "http://wuyrsp3tma.proxy.qqbrowser.cc/auth"
    }]
  }]
};

function createMenu() {
 let options = {
  url: 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' + token,
  form: JSON.stringify(menus),
  headers: {
   'Content-Type': 'application/x-www-form-urlencoded'
  }
 };
 
 request.post(options, function (err, res, body) {
  if (err) {
   console.log(err)
  }else {
   console.log(body);
  }
 })
 
}

module.exports = createMenu;

这样在服务器启动的时候调用这个模块就可以创建一个简单的自定义菜单了:

node微信开发之获取access_token+自定义菜单

好这部分就算结束了,本来想连着jssdk一起的但是那样就显得太长了,但是那部分代码已经完成了,所以大家可以自行看看代码。

github地址奉上:https://github.com/xiadd/shorthand 欢迎star

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS的IE和Firefox兼容性集锦
Dec 11 Javascript
JS函数验证总结(方便js客户端输入验证)
Oct 29 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
Sep 14 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
解决element UI 自定义传参的问题
Aug 22 Javascript
vue动画打包后失效问题的解决方法
Sep 18 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 Javascript
JavaScript中this用法学习笔记
Mar 17 #Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 #Javascript
微信小程序登录session的使用
Mar 17 #Javascript
Javascript读写cookie的实例源码
Mar 16 #Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 #Javascript
vue自定义指令用法经典实例小结
Mar 16 #Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 #jQuery
You might like
我的论坛源代码(五)
2006/10/09 PHP
PHP ajax 分页类代码
2008/11/13 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
php中namespace及use用法分析
2016/12/06 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
了解重排与重绘
2019/05/29 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
python批量修改文件后缀示例代码分享
2013/12/24 Python
Python单链表的简单实现方法
2014/09/23 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
SQL语言面试题
2013/08/27 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
校园绿化美化方案
2014/06/08 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
公务员处分决定书
2015/06/25 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书