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 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
js 对象是否存在判断
Jul 15 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
jQuery操作cookie
Aug 08 Javascript
响应式表格之固定表头的简单实现
Aug 26 Javascript
利用JS判断鼠标移入元素的方向
Dec 11 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
Feb 10 Javascript
vue导出html、word和pdf的实现代码
Jul 31 Javascript
Vue.js实现的购物车功能详解
Jan 27 Javascript
js核心基础之构造函数constructor用法实例分析
May 11 Javascript
在vue中created、mounted等方法使用小结
Jul 21 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 文章采集正则代码
2009/12/28 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
详解JS面向对象编程
2016/01/24 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python 字符串换行的多种方式
2018/09/06 Python
pycharm创建一个python包方法图解
2019/04/10 Python
Python变量访问权限控制详解
2019/06/29 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python with语句用法原理详解
2020/07/03 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
国家助学金获奖感言
2014/01/31 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
员工安全生产承诺书
2014/05/22 职场文书
记账会计岗位职责
2014/06/16 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
python本地文件服务器实例教程
2021/05/02 Python