Files
message-pusher/common/wechat.js
T
2021-01-17 14:26:33 +08:00

72 lines
1.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const axios = require('axios');
const { tokenStore } = require('./token');
const config = require('../config');
async function refreshToken() {
for (const item of tokenStore) {
item.token = await this.requestToken();
}
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}`
);
console.log(res);
if (res && res.data && res.data.access_token) {
token = res.data.access_token;
}
} 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);
if (!user) {
return {
success: false,
message: `tokenStore 中不存在该前缀(${userPrefix}`,
};
}
let access_token = user.token;
let request_data = {
touser: user.wechatOpenId,
template_id: user.wechatTemplateId,
};
if (message.content) {
request_data.url = `${config.href}${userPrefix}/${message.id}`;
}
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,
};