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批量控制form禁用的代码
Aug 06 Javascript
extjs4 treepanel动态改变行高度示例
Dec 17 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
JS创建自定义对象的六种方法总结
Dec 15 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
九种原生js动画效果
2015/11/11 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
基于vue实现分页效果
2017/11/06 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
python中的闭包函数
2018/02/09 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014年党建工作总结
2014/11/11 职场文书
2015年植树节活动总结
2015/02/06 职场文书
个人年终总结范文
2015/03/09 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
优秀员工演讲稿
2019/06/21 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Nginx实现会话保持的两种方式
2022/03/18 Servers