今天,按流水线写文档
/* app.js 调用定时器方法*/const schedule = require('./utils/schedule');schedule.setSchedule();
/* /utils/schedule 定时器方法 */const schedule = require('node-schedule');const { updateToken } = require('./updateToken'); // 刷新token的方法//其他规则见 https://www.npmjs.com/package/node-schedulelet rule = new schedule.RecurrenceRule();// rule.hour = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22];// 每小时的第30分钟调用rule.hour = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];rule.minute = 30;function setSchedule() {schedule.scheduleJob(rule, () => {updateToken(); // 定时点到了就调用})};module.exports = {setSchedule};
/** updateToken.js 定时刷新token* 微信js-sdk文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html* 附录1,讲解token刷新规则:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62*/const jssdkConfig = require('../config/jssdk');const request = require('./request').get;const redis = require('./redis'); // redis使用看文档:https://www.yuque.com/xiebugde/mbz0hg/dou4fgexports.updateToken = async () => {const url = jssdkConfig.getTokenUrl;const params = {grant_type: jssdkConfig.grant_type,appid: jssdkConfig.appid,secret: jssdkConfig.secret,};const opts = {};const result = await request(url, params, opts);if (result.access_token) {await redis.set('token', result.access_token);updateTicket();} else {console.log('获取token失败', result);}};const updateTicket = async () => {let token = '';await redis.get('token', (err, result) => {token = result;});const url = jssdkConfig.getTicketUrl;const params = {access_token: token,type: jssdkConfig.type,};const opts = {};const result = await request(url, params, opts);if (result.errcode === '0' || result.errcode === 0) {redis.set('ticket', result.ticket);} else {console.log('获取ticket失败', result);}};
如果前端要做微信分享,需要写个接口返回签名等信息,接口如下
const sha1 = require("sha1");const redis = require("../utils/redis");const jssdkConfig = require('../config/jssdk');const { getNonceStr } = require('../utils/sign'); // 看下文router.post('/GetJSConfig', async (ctx, next) => {let ticket = '';await redis.get('ticket', (err, result) => {ticket = result;})const timestamp = Date.parse(new Date()) / 1000;const nonceStr = getNonceStr(15); // 15位字母和数字的随机数const url = ctx.request.body.url;const signature = sha1(`jsapi_ticket=${ticket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`);const result = {appId: jssdkConfig.appid,timestamp,signature,jsApiList: ['onMenuShareWeibo','updateAppMessageShareData','updateTimelineShareData',]};ctx.body = result;});
获取签名的方法
/* utils/sign.js 获取15位字母和数字的随机数 */exports.getNonceStr = len => {var rdmString = "";for (; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));return rdmString.substr(0, len);}
