为了梳理代码,我单独给微信的接口进行了一些封装。这是前面认证接口的内容。

封装接口用到了request

npm install --save request

封装的 js 结构大致是这样的

var request = require('request');
var crypto =  require('crypto');function WeChat(config) {this.config = configthis.accessToken = nullthis.getAccessTokenTimer = null
}WeChat.prototype.Authenticate = function(req, res) {//1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostrvar signature = req.query.signature,//微信加密签名timestamp = req.query.timestamp,//时间戳nonce = req.query.nonce,//随机数echostr = req.query.echostr;//随机字符串//2.将token、timestamp、nonce三个参数进行字典序排序var array = [this.config.token,timestamp,nonce];array.sort();//3.将三个参数字符串拼接成一个字符串进行sha1加密var tempStr = array.join('');const hashCode = crypto.createHash('sha1'); //创建加密类型 var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //对传入的字符串进行加密//4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信if(resultCode === signature){res.send(echostr);}else{res.send('mismatch');}
}module.exports.WeChat = WeChat;

扯多了,回到正题access_token

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

因此,我继续封装了GetAccessToken方法。

WeChat.prototype.GetAccessToken = function() {var self = thislet option = {url: 'https://api.weixin.qq.com/cgi-bin/token',qs: {grant_type: 'client_credential',appid: this.config.App_Id,secret: this.config.App_Secret},method: 'GET',headers: {"content-type": "application/json"}}return new Promise((resolve, reject) => {request(option, function(error, response, body) {console.log(error, body)var data = JSON.parse(body)if (error) {reject(error)} else {switch(data.errcode) {case 45009:console.log('token调用上限')reject(data)breakcase 0:self.accessToken = {access_token: data.access_token,expires_in: data.expires_in}console.log('当前access_token', JSON.stringify(self.accessToken))// 定时重新获取access_tokenclearTimeout(this.getAccessTokenTimer)this.getAccessTokenTimer = setTimeout(() => {self.GetAccessToken()}, (data.expires_in - 60) * 1000 || 60000)resolve(data)break}}})})
}

并在express服务启动的时候调用GetAccessToken,调用成功后会依据 expires_in 起定时器重新获取。

var wechat = new WeChat(config)
wechat.GetAccessToken().then(success => {console.log('初始化获取accessToken成功')
}, failure => {console.log('初始化获取accessToken失败')
})

2018.10.17
考虑到每次重启服务器都会调用GetAccessToken,会导致频繁调用。因此想到一个修改方法,将accessToken作为属性存在wechat对象中的同时,还将其写入到本地文件token.json中。这样服务器重启时,就可以先读取token.json文件中的access_token及expires_in,先判断是否过期,如果过期了,则直接进行access_token更新操作,否则计算出过期时间,用定时器控制在过期时间时进行access_token更新操作。

Nodejs开发微信公众号--获取access_token相关推荐

  1. NodeJs开发微信公众号(一)

    古话说: 万事开头难, 回头细想想还真是这样,在没有开始做微信公众号开发之前我以为它很复杂,但是学过之后只想说原来just so so~ 这里是我的项目的github地址: https://githu ...

  2. Nodejs开发微信公众号中控服务

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本项目旨在为多个微信公众号 ...

  3. nodeJS 开发微信公众号

    准备测试公众号 mp.weixin.qq.com/debug/cgi-b- 关注,获取测试公众号 内网渗透工具 natapp.cn/login 按照教程下载客户端进行配置 后台服务接入公众号 有net ...

  4. 关于开发微信公众号获取手机用户运动数据的功能实现思路

    一.前沿研究 微信公众号开发文档,浏览后没有任何关于获取微信运动数据的接口 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp144 ...

  5. 微信公众号获取access_token,报错invalid ip xxx.xxx.xxx.xxx

    一.原因: 在IP白名单内的IP来源,获取access_token接口才可调用成功.未设置,就会报错. 二.解决方案: 登录公众平台,开发->基本配置->IP白名单->查看-> ...

  6. Thinkphp5下微信公众号获取用户信息

    前言 一直在用整理下tp5 开发微信公众号获取用户信息的简单笔记 废话不多说 直接贴代码如下: 正文 准备工作 在微信公众平台的开发者工具中申请公众平台测试账号如下图 在网页账号中 修改网页授权获取基 ...

  7. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  8. 教程: nodejs 做微信公众号开发,回复 xml 消息

    教程: nodejs 做微信公众号开发,回复 xml 消息 首先需要你的后台跟服务器已经可以建立连接,这个不再冗述看官方教程就好 接入指南 .此篇介绍的是如何获取用户发来的信息,并回复它. 一.接收 ...

  9. nodejs关联微信公众号开发

    微信公众号开发 需求:在web端用户实时操作的内容,在微信公众号获取到 实现:项目与微信公众号的连接,在微信公众号上回复,发送对应的文本,图片,视频内容 一.微信公众号的接入(三个部分) 1.node ...

最新文章

  1. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)
  2. R语言dplyr包使用group_by函数、arrange函数和filter函数获取每个分组的第一个、第N个、最后一个记录实战
  3. 没有终结点在侦听可以接受消息的_IoT Hub入门(3)使用消息路由将原始设备数据记录存档...
  4. ASP.NET服务器控件数据绑定总结
  5. ssm 转发请求_SSM框架碰到的问题
  6. Linux表空间扩容,linux下oracle表空间导致磁盘空间不足
  7. idea启动tomcat没有加载项目_震惊!我三步就搞定了 Tomcat 源码环境搭建!
  8. Shell脚本实现SSH免密登录及批量配置管理
  9. [原]gimp的python控制台以及python的PIL图像处理库
  10. c语言双精度型输出小数位数_C语言的double与float类型最多只能默认输出小数位数都取6位?...
  11. nginx简单的rewrite配置
  12. 支付设计白皮书:支付系统的概念与中国互联网支付清算体系
  13. 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
  14. 今天我们来聊一个很高级的话题:如何设计一个大规模远程命令执行系统
  15. python中平方_python里平方
  16. eCharts好看的 响应式 圆环饼图 及文字 附vue源码代码
  17. (一)大数据学习引言——大数据概述
  18. 孙正兴:普适计算与计算机视觉
  19. 【古琴】初学者选择练习琴的六条准则
  20. xmind 8 安装后启动失败

热门文章

  1. 生物信息学习--nr/nt 数据库(总+子)构建
  2. 选文字游戏 一个根据颜色来选择对应文字的小游戏
  3. 示波器基本原理之六:示波器的基本控制
  4. 水上飞机行业调研报告 - 市场现状分析与发展前景预测
  5. Ubuntu 自带截图工具快捷键盘
  6. GD32E230开发笔记-GD32选型
  7. 【开发工具】【perf】性能分析工具perf的编译和使用说明
  8. C++中的explicit
  9. 常见品牌的手机型号所代表的含义
  10. ESPRIT 2019车铣复合编程基础到五轴 走心机 视频教程