使用 nodeJs 开发微信公众号(获取access_token)
要使用微信提供的功能接口,就需要获取到access_token,这是开发公众号必不可少的一部
access_token有效期20分钟,建议保存起来,过期后在重新获取
获取流程如下:
我将微信相关的操作封装在 lib/wechat.js 中,同时在同级目录下新建 token.txt 用于保存获取到的access_token
const wxConfig = require('../config/wx.js')
const fs = require('fs')
const path = require('path')
const sha1 = require('sha1')
const request = require('request')
function Wechat(){
    this.appId = wxConfig.appId,
    this.appSecret = wxConfig.appSecret,
    this.token = wxConfig.token
}
//校验请求是否来自微信
Wechat.prototype.init = function(req, res, next) {
    var token = wxConfig.token
    var signature = req.query.signature
    var nonce = req.query.nonce
    var timestamp = req.query.timestamp
    var echostr = req.query.echostr
    var str = [token, timestamp, nonce].sort().join('')
    var sha = sha1(str)
    if (sha === signature) {
        next()
    }else{
        res.send('error')
    }
};
//获取access_token
Wechat.prototype.getAccessToken = function(){
    var data = fs.readFileSync(path.resolve(__dirname, './token.txt'))
    try{
        accessToken = JSON.parse(data)
        if(accessToken.expires_in > Date.parse(new Date())){
            return Promise.resolve(accessToken.access_token)
        }else{
            //已过期
            return this.updateAccessToken()
        }
    }
    catch(err){
        //文件为空
        return this.updateAccessToken()
    }
}
//从微信重新拉取access_token
Wechat.prototype.updateAccessToken = function(){
    const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${this.appId}&secret=${this.appSecret}`
    // 返回accesstoken格式如下
    // {
    //     "access_token":"string",
    //     "expires_in":7200
    // }
    return new Promise((resolve, reject) => {
        request(url, function(err, response, body){
            var accessToken = JSON.parse(response.body)
            accessToken['expires_in'] = Date.parse(new Date())+((7200 - 20)*1000)
            fs.writeFileSync(path.resolve(__dirname, './token.txt') , JSON.stringify(accessToken))
            resolve(accessToken.access_token)
        })
    })
}
module.exports = new Wechat()
在app.js中调用wechat.js下的 getAccessToken 方法获取,然后保存在全局对象中,这样其他文件中可以直接调用
var wechat = require('./lib/wechat');
wechat.getAccessToken().then(token => {
    global.accessToken = token
})
//校验请求
app.use(wechat.init);
使用 nodeJs 开发微信公众号(获取access_token)的更多相关文章
- NodeJs 开发微信公众号(四)微信网页授权
		微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理.个人等信息的权限.对于开发了自己的网页app应用时,获取个人的信息非常重要.上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需 ... 
- Nodejs开发微信公众号中控服务
		本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本项目旨在为多个微信公众号 ... 
- NodeJs 开发微信公众号(三)微信事件交互
		微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成.比如说自定义菜单功能,必须通过发送post请求的方式生成.本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么 ... 
- NodeJs 开发微信公众号(二)测试环境部署
		由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ... 
- 微信公众号获取access_token
		一般我们在进行微信公众号开发的时候,都需要用到access_token,但是具体的获取及其使用方式如何呢?下面展示一种获取的方式(具体的微信公众号申请和配置,请参考开放文档,具体在这里就不详细说明了) ... 
- NodeJs 开发微信公众号(五)真实环境部署
		在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ... 
- NodeJs 开发微信公众号(一)准备工作
		前言 大概是一个月前,自己用业余时间做了一个微信公众号.微信开发,尤其是对后台不熟悉的人来说显得尤其困难.首先要克服的是后台语言(nodejs)的一些不熟悉困难,其次,也是最大的一点困难是在跟微信交互 ... 
- 使用 nodeJs 开发微信公众号(上传图片)
		在给用户发送消息中涉及到的素材(图片.视频.音频.文章等)需要事先传到微信服务器,然后获得媒体id(media_id),然后把 media_id 传递给用户 上传分上传临时素材(只保存三天)和上传永久 ... 
- 微信公众号 ---  获取access_token
		获取access_token 在左侧菜单栏中也可以找到 可以一步步的进行设置 , 身份验证的时候要 注意:密码是你创建微信公众号的密码 往一步步的执行就可以了 接下来就是获取ip 白名单,进行设置 ... 
- 使用 nodeJs 开发微信公众号(配置服务器)
		流程如下: 1. 申请微信公众号:企业号.服务号.订阅号(前两个要钱) 2. 配置微信公众号后台 选择基本配置,获得 AppId 和 AppSecret ,点击服务器配置 URL:你服务器地址,不能是 ... 
随机推荐
- CentOS6/7快捷使用gcc5
			Centos6/7自带的gcc为4.x版本,可通过devtoolset工具集安装gcc5.x版本 1. 添加yum源 1)CentOS6 [hhorak-devtoolset--rebuild-boo ... 
- 正则替换HTML里的style属性
			一个网友问: <p class="a" style="font-size: 12pt; font-family: ""; color: red ... 
- Linux基础入门-用户及文件权限管理
			一.Linux用户管理: 不同的用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不能轻易查看.修改彼此的文件. 1. 查看用户: wh ... 
- Android studio 中添加依赖model时依赖所需的准备
			例如向app中添加依赖core: core要做如下修改: 1.将core中build.gradle中 修改为 . 2.将core中的 applicationId 注释掉. 
- 微信小程序自运营器  微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营)
			自动发单,自动评价,自动评论,自动推广 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营) 我们会根据你的微信公众号或微信小程序定制开发带有一定AI智 ... 
- TCP/IP 通信
			TCP/IP 通信又叫socket 通信,是基于TCP/IP协调面向连接的一个数据传输技术.是属于OSI国际标准的传输层,三次握手 提供数据,有序,安全,端到端的传输和接收.它有三个主要协议:传输控制 ... 
- aspnetcore2.1 部署到docker (访问出现404)
			Dockerfile FROM microsoft/dotnet:2.1-aspnetcore-runtime WORKDIR /app COPY ./publish . ENTRYPOINT [&q ... 
- C#使用NPOI读写Excel的注意事项
			NPOI的基本使用参照:https://www.cnblogs.com/lixiaobin/p/NPOI.html 既存文档读取修改方法 *既存Excel文档修改保存注意使用FileMode.Crea ... 
- kettle使用小结----脚本启动
			初学kettle,使用kettle Spoon完成转换(ktr)或作业(kjb)的编写之后,执行作业可以在spoon中直接启动,因为我的需求是持续监控数据表的状态进行数据同步, 所以作业任务需要一直在 ... 
- AD中修改OU下面用户的属性
			第一种方法可行: get-ADuser -searchbase "ou=Wireless,dc=lstech,dc=com" -filter * | set-ADuser -Giv ... 
