2021-01-17 10:49:19 +08:00
|
|
|
|
const axios = require('axios');
|
|
|
|
|
|
const { tokenStore } = require('./token');
|
|
|
|
|
|
const config = require('../config');
|
|
|
|
|
|
|
|
|
|
|
|
async function refreshToken() {
|
2021-01-17 16:45:52 +08:00
|
|
|
|
for (let [key, value] of tokenStore) {
|
|
|
|
|
|
value.token = await requestToken(value.wechatAppId, value.wechatAppSecret);
|
|
|
|
|
|
tokenStore.set(key, value);
|
2021-01-17 10:49:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
console.log('Token refreshed.');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function requestToken(appId, appSecret) {
|
|
|
|
|
|
let token = '';
|
|
|
|
|
|
try {
|
|
|
|
|
|
let res = await axios.get(
|
|
|
|
|
|
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`
|
|
|
|
|
|
);
|
2021-01-17 16:45:52 +08:00
|
|
|
|
// console.debug(res);
|
|
|
|
|
|
if (res && res.data) {
|
|
|
|
|
|
if (res.data.access_token) {
|
|
|
|
|
|
token = res.data.access_token;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.error(res.data);
|
|
|
|
|
|
}
|
2021-01-17 10:49:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
console.error(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
return token;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function pushWeChatMessage(userPrefix, message) {
|
|
|
|
|
|
// Reference: https://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl
|
|
|
|
|
|
let user = tokenStore.get(userPrefix);
|
2021-01-17 14:26:33 +08:00
|
|
|
|
if (!user) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: `tokenStore 中不存在该前缀(${userPrefix})`,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2021-01-17 10:49:19 +08:00
|
|
|
|
let access_token = user.token;
|
|
|
|
|
|
let request_data = {
|
|
|
|
|
|
touser: user.wechatOpenId,
|
|
|
|
|
|
template_id: user.wechatTemplateId,
|
|
|
|
|
|
};
|
|
|
|
|
|
if (message.content) {
|
2021-01-17 14:26:33 +08:00
|
|
|
|
request_data.url = `${config.href}${userPrefix}/${message.id}`;
|
2021-01-17 10:49:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
request_data.data = { text: { value: message.description } };
|
|
|
|
|
|
let requestUrl = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`;
|
|
|
|
|
|
try {
|
|
|
|
|
|
let response = await axios.post(requestUrl, request_data);
|
|
|
|
|
|
if (response && response.data && response.data.errcode === '40001') {
|
|
|
|
|
|
await requestToken(user.wechatAppId, user.wechatAppSecret);
|
|
|
|
|
|
await axios.post(requestUrl, request_data);
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(response.data);
|
|
|
|
|
|
return {
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
message: '',
|
|
|
|
|
|
};
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
console.error(e);
|
|
|
|
|
|
return {
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: e.message,
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
refreshToken,
|
|
|
|
|
|
requestToken,
|
|
|
|
|
|
pushWeChatMessage,
|
|
|
|
|
|
};
|