Files
message-pusher/common/wechat.js
T

84 lines
2.2 KiB
JavaScript
Raw Normal View History

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,
2021-01-17 17:39:16 +08:00
message: `不存在的前缀:${userPrefix},请注意大小写`,
2021-01-17 14:26:33 +08:00
};
}
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-31 16:00:01 +08:00
request_data.url = `${config.href}message/${message.id}`;
console.debug(`http://localhost:3000/message/${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);
2021-01-17 17:39:16 +08:00
if (response && response.data && response.data.errcode !== 0) {
2021-01-17 10:49:19 +08:00
await requestToken(user.wechatAppId, user.wechatAppSecret);
await axios.post(requestUrl, request_data);
}
2021-01-17 17:39:16 +08:00
if (response.data.errcode === 0) {
return {
success: true,
message: 'ok',
};
} else {
return {
success: false,
message: response.data.errmsg,
};
}
2021-01-17 10:49:19 +08:00
} catch (e) {
console.error(e);
return {
success: false,
message: e.message,
};
}
}
module.exports = {
refreshToken,
requestToken,
pushWeChatMessage,
};