| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- const axios = require('axios');
- const { tokenStore } = require('./token');
- const config = require('../config');
- async function refreshToken() {
- for (let [key, value] of tokenStore) {
- value.token = await requestToken(value.wechatAppId, value.wechatAppSecret);
- tokenStore.set(key, value);
- }
- 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.debug(res);
- if (res && res.data) {
- if (res.data.access_token) {
- token = res.data.access_token;
- } else {
- console.error(res.data);
- }
- }
- } 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,
- };
|