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 png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
tuzhu_req.js 实现仿百度图片首页效果
Aug 11 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
May 10 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
使用微信SDK自定义分享的方法
Jul 03 Javascript
Vue中错误图片的处理的实现代码
Nov 07 Javascript
js实现轮播图特效
May 28 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的FTP学习(三)
2006/10/09 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
PHP7 list() 函数修改
2021/03/09 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
安全教育感言
2014/03/04 职场文书
大家访活动实施方案
2014/03/10 职场文书
找工作求职信
2014/07/07 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
家长学校教学计划
2015/01/19 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
村官2015年度工作总结
2015/10/14 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript