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 BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
js 加载并解析XML字符串的代码
Dec 13 Javascript
js 设置选中行的样式的实现代码
May 24 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
jQuery实现高亮显示网页关键词的方法
Aug 07 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
使用webpack-dev-server处理跨域请求的方法
Apr 18 Javascript
webpack proxy 使用(代理的使用)
Jan 10 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
Nov 06 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
js计算任意值之间随机数的方法
2015/01/16 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
原生js调用json方法总结
2018/02/22 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
公司培训欢迎词
2014/01/10 职场文书
违反交通法规检讨书
2014/09/10 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
一篇文章带你复习java知识点
2021/06/28 Java/Android
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL