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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 Javascript
textarea 控制输入字符字节数(示例代码)
Dec 27 Javascript
Javascript玩转继承(一)
May 08 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 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中调用JAVA
2006/10/09 PHP
将PHP作为Shell脚本语言使用
2006/10/09 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
python 字符串常用函数详解
2019/09/11 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Python对excel的基本操作方法
2021/02/18 Python
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
高中生期末评语
2014/01/28 职场文书
个人求职自荐信范文
2014/06/20 职场文书
经典团队口号大全
2014/06/21 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
申报材料格式
2014/12/30 职场文书
离职感谢信怎么写
2015/01/22 职场文书
优秀大学生申请书
2019/06/24 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python