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 中对象的继承〔转贴〕
Jan 22 Javascript
完整显示当前日期和时间的JS代码
Sep 17 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
JavaScript控制网页层收起和展开效果的方法
Apr 15 Javascript
javascript中使用new与不使用实例化对象的区别
Jun 22 Javascript
JS日期格式化之javascript Date format
Oct 01 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
Jul 12 Javascript
js实现4个方向滚动的球
Mar 06 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 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 透明水印生成代码
2012/08/27 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
Python上下文管理器和with块详解
2017/09/09 Python
python opencv之SIFT算法示例
2018/02/24 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
python实现宿舍管理系统
2019/11/22 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
联谊活动策划书
2014/01/26 职场文书
美术课外活动总结
2014/07/08 职场文书
教师工作总结范文2014
2014/11/10 职场文书
三八妇女节主持词
2015/07/04 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python