微信公众号开发中最常遇到的就是调用接口时候需要有API的access-token(非网页授权的access-token),有了这个token之后,才可以发生模板消息等。
这里的做法主要是用nodejs的later模块是实现每隔一个小时去微信上刷新一次token,获取到最新的access-token之后保存到数据库之中。其他的业务需要用到这个token,再去数据库中抓取最新的access-token。

WechatTokenTask.js代码如下:

 var later = require('later'),
mysql = require('mysql'),
https = require('https'),
moment = require('moment'); var connection = mysql.createConnection({
host: '112.74.***.*',
port: 3306,
user: 'root',
password: '****',
database: 'lz***'
}); var appid = "wx082bc0*********",
appsecret = "d3c24a08d03b4*****************"; // will fire every 5 minutes
//var textSched = later.parse.text('every 1 min');
var textSched = later.parse.cron('0 */1 * * *');
//var textSched = later.parse.text('every 1 hours');
//var occurrences = later.schedule(textSched).next(10); //for (var i = 0; i < 10; i++) {
// console.log(occurrences[i]);
//} // execute logTime for each successive occurrence of the text schedule
later.setInterval(dotask, textSched); setTimeout(dotask, 100);//fire when app start run function dotask() {
var options = {
hostname: 'api.weixin.qq.com',
path: '/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + appsecret
};
var req = https.get(options, function (res) {
//console.log("statusCode: ", res.statusCode);
//console.log("headers: ", res.headers);
var bodyChunks = '';
res.on('data', function (chunk) {
bodyChunks += chunk;
}).on('end', function () {
var body = JSON.parse(bodyChunks);
//console.dir(body);
if (body.access_token) {
var access_token = body.access_token;
saveAccessToken(access_token);
//console.log(access_token);
} else {
console.dir(body);
}
})
}); req.on('error', function (e) {
console.log('ERROR: ' + e.message);
});
} /* Save access token to DB*/
function saveAccessToken(accessToken) {
var postData = {
AccessToken: accessToken,
Date: moment().format('YYYY-MM-DD HH:mm:ss')
}; connection.connect();
connection.query('INSERT INTO `WeChatToken` SET ?', postData, function (err, result) {
// Neat!
if (err) {
console.log(JSON.stringify(err));
connection.end();
} if (result && result.affectedRows == 1) {
console.log("success");
}
});
connection.end();
}

table scheme如下:

CREATE TABLE `WeChatToken` (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Date` DATETIME NOT NULL ,
AccessToken VARCHAR(255) NOT NULL
) ;

业务里可以用通过以下语法获取最新有效的access-token

SELECT AccessToken FROM WeChatToken ORDER BY Id DESC LIMIT 1;

该服务发布在CentOS 7, 用PM2管理。

pm2 start lzone6/WechatTokenTask.js -i 1 --name GetTokenService

定时排程刷新微信access-token的更多相关文章

  1. 微信Access Token 缓存方法

    微信Access Token默认缓存是2小时,但是需要特别强调,微信服务号和微信企业号缓存并不相同. (1)微信公众号号:每次Http请求Access Token 系统会返回不同的Token,并附带超 ...

  2. 微信公众平台开发(112) 自动更新微信access token

    关键字:Memcache access_token 更新 存储 7200 本文介绍如何存储及更新 access token的方法. 一.Access Token access_token是公众号的全局 ...

  3. 使用缓存Memcache存储更新微信access token

    关键字:Memcache access_token 更新 存储 7200 本文介绍如何使用缓存Memcache存储及更新 access token的方法. 一.Access Token access_ ...

  4. 微信access token过期

    两台服务器使用同一个微信账号(同一个app id) 时,当其中一台服务器向微信请求access token时,会造成另一台服务器的access token过期

  5. C# v3微信 access token 过期处理的问题

    //记录access token 申请时的时间 private static DateTime GetAccessToken_Time; /// <summary> /// 过期时间为72 ...

  6. 微信公众平台开发视频教程-03-获取Access Token和获取微信服务器IP,添加微信菜单

    1 获取access token 此token是以后每次调用微信接口都会带上的票据,token是公众号全局唯一票据,在调用其他接口之前都需要先得到token,taoken长度至少512个字符,通常用s ...

  7. 微信公众平台开发 ACCESS TOKEN

    获取access token 返回 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将 ...

  8. iOS实现OAuth2.0中刷新access token并重新请求数据操作

    一.简要概述 OAuth2.0是OAuth协议的下一版本,时常用于移动客户端的开发,是一种比较安全的机制.在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的r ...

  9. OAuth 白话简明教程 4.刷新 Access Token

    转自:http://www.cftea.com/c/2016/11/6705.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

随机推荐

  1. NFinal学习笔记 03—代码生成器

    NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码.包括数据库的操作,Router类, 调试文件等.附上一段代码与大家分享 ...

  2. (转)SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...

  3. ASP.NET MVC 部分视图(转)

    [部分视图] ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control.我们的页面往往会有许多重用的地方,可以进行封装重用.使用 部分视图 :  1. 可以简写代 ...

  4. html表格,列表

    1. 表格由 <table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义).字母 td 指表格数据(t ...

  5. InetAddress类的使用

    1.1. 简介 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetAddress是Java对IP地址的封装,在java.net中有 ...

  6. html5本地存储web storage的简单使用

    html5的一个非常cool的功能,就是web storage,类似于之前的cookie,不过与之不同的是,web storage 拥有本地5兆的容量可以存储,而cookie却只有4K,这是完全不能比 ...

  7. 解决MYSQL弃用模块错误Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future

    今天使用了mysql 5.5版本,就出现了错误.错误提示如下: Deprecated: mysql_connect(): The mysql extension is deprecated and w ...

  8. 基于cygwin构建u-boot(一)环境搭建

    从本文开始,更系统的描述基于cygwin构建u-boot. 之前<痛苦的版本对齐>系列,对于cygwin环境下Sourcery CodeBench,u-boot-1.1.6的构建有侧面的说 ...

  9. 【5】将服务部署到本机(Ubuntu14.04)

    首先,先将文件复制到指定的文件夹 我这里选择在/var下面新建一个www的文件夹来存放 复制BLOG文件夹的内容到www文件夹下 sudo cp -r /home/jakeychen/Jakey/Bl ...

  10. 生产环境中CentOS7部署NET Core应用程序

    NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...