定时排程刷新微信access-token
微信公众号开发中最常遇到的就是调用接口时候需要有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的更多相关文章
- 微信Access Token 缓存方法
微信Access Token默认缓存是2小时,但是需要特别强调,微信服务号和微信企业号缓存并不相同. (1)微信公众号号:每次Http请求Access Token 系统会返回不同的Token,并附带超 ...
- 微信公众平台开发(112) 自动更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何存储及更新 access token的方法. 一.Access Token access_token是公众号的全局 ...
- 使用缓存Memcache存储更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何使用缓存Memcache存储及更新 access token的方法. 一.Access Token access_ ...
- 微信access token过期
两台服务器使用同一个微信账号(同一个app id) 时,当其中一台服务器向微信请求access token时,会造成另一台服务器的access token过期
- C# v3微信 access token 过期处理的问题
//记录access token 申请时的时间 private static DateTime GetAccessToken_Time; /// <summary> /// 过期时间为72 ...
- 微信公众平台开发视频教程-03-获取Access Token和获取微信服务器IP,添加微信菜单
1 获取access token 此token是以后每次调用微信接口都会带上的票据,token是公众号全局唯一票据,在调用其他接口之前都需要先得到token,taoken长度至少512个字符,通常用s ...
- 微信公众平台开发 ACCESS TOKEN
获取access token 返回 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将 ...
- iOS实现OAuth2.0中刷新access token并重新请求数据操作
一.简要概述 OAuth2.0是OAuth协议的下一版本,时常用于移动客户端的开发,是一种比较安全的机制.在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的r ...
- OAuth 白话简明教程 4.刷新 Access Token
转自:http://www.cftea.com/c/2016/11/6705.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
随机推荐
- MySQL的字符串函数截取字符
函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...
- SQL server sysobjects表说明
sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. sysobjects 表结构: 列名 ...
- Josn转DataTable(转)
使用UI框架开发的时候就常常用到DataTable转Json的情况,但是最近完成一个微信公众号开发的项目,需要把微信接口传过来的json值作为转为DataTable后绑定到服务器控件上. 在网上找了很 ...
- 对Lucene PhraseQuery的slop的理解[转载]
所谓PhraseQuery,就是通过短语来检索,比如我想查“big car”这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语,这个documen ...
- Java坑一
public class Test { public static void main(String[] args) { Integer a = 12; Integer b = 12; System. ...
- struts2中的action访问web对象
Struts2的Action就是一个普通的POJO对象,它和Web对象request.response.session和application没有耦合在一起,这样便于单独测试Action,那么我们在A ...
- C++服务器设计(一):基于I/O复用的Reactor模式
I/O模型选择 在网络服务端编程中,一个常见的情景是服务器需要判断多个已连接套接字是否可读,如果某个套接字可读,则读取该套接字数据,并进行进一步处理. 在最常用的阻塞式I/O模型中,我们对每个连接套接 ...
- latex 模版
texlive2012 通过 \documentclass[a4paper]{article} %\documentclass[twocolumn]{article} %\usepackage{g ...
- Codeforces Round #280 (Div. 2)E Vanya and Field(简单题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 本场题目都比较简单,故只写了E题. E. Vanya and Field Vany ...
- After a rest, go on
busy during the whole May holiday. running between S and H, waste much time leaving things behind. t ...