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接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
Js实现手机发送验证码时按钮延迟操作
Jun 20 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
JS实现状态栏跑马灯文字效果代码
Oct 24 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
JavaScript中windows.open()、windows.close()方法详解
Jul 28 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 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扩展
2013/06/13 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
layui实现三级联动效果
2019/07/26 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
用pickle存储Python的原生对象方法
2017/04/28 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
创建文明城市标语
2014/06/16 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
素质拓展训练感想
2015/08/07 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis