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 相关文章推荐
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
判断对象是否Window的实现代码
Jan 10 Javascript
javascript闭包入门示例
Apr 30 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
javascript 删除数组元素和清空数组的简单方法
Feb 24 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
浅谈vue权限管理实现及流程
Apr 23 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
Feb 07 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
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
python select.select模块通信全过程解析
2017/09/20 Python
简单了解django缓存方式及配置
2019/07/19 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
中科方德软件测试面试题
2016/04/21 面试题
最美乡村医生事迹材料
2014/06/02 职场文书
党员十八大心得体会
2014/09/12 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书