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 相关文章推荐
JAVASCRIPT 对象的创建与使用
Mar 09 Javascript
一个无限级XML绑定跨框架菜单(For IE)
Jan 27 Javascript
浅谈Javascript面向对象编程
Nov 15 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
Jul 07 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
Jun 13 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
微信小程序基础教程之echart的使用
Jun 01 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
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
关于php中一些字符串总结
2016/05/05 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
在Python中使用第三方模块的教程
2015/04/27 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python 性能优化技巧总结
2016/11/01 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
django中嵌套的try-except实例
2020/05/21 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
中国跨境电商:Tomtop
2017/03/16 全球购物
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
文艺演出主持词
2015/07/01 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
我收到了德劲DE1107
2022/04/05 无线电