| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- const axios = require('axios');
- const { tokenStore, updateTokenStore } = require('./token');
- const config = require('../config');
- async function refreshToken() {
- for (let [key, value] of tokenStore) {
- if (value.corpId) {
- value.corpToken = await requestToken(value.corpId, value.corpAppSecret);
- tokenStore.set(key, value);
- }
- }
- console.log('Token refreshed.');
- }
- async function requestToken(corpId, corpAppSecret) {
- // Reference: https://work.weixin.qq.com/api/doc/90000/90135/91039
- let token = '';
- try {
- let res = await axios.get(
- `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpId}&corpsecret=${corpAppSecret}`
- );
- // 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 pushWeChatCorpMessage(userPrefix, message) {
- // Reference: https://work.weixin.qq.com/api/doc/90000/90135/90236
- let user = tokenStore.get(userPrefix);
- if (!user) {
- return {
- success: false,
- message: `不存在的前缀:${userPrefix},请注意大小写`,
- };
- }
- let access_token = user.corpToken;
- let request_data = {
- msgtype: 'textcard',
- touser: user.corpUserId,
- agentid: user.corpAgentId,
- textcard: {
- title: message.title,
- description: message.description,
- },
- };
- if (message.content) {
- request_data.textcard.url = `${config.href}message/${message.id}`;
- } else {
- request_data.textcard.url = `${config.href}`;
- }
- let requestUrl = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${access_token}`;
- try {
- let response = await axios.post(requestUrl, request_data);
- if (response && response.data && response.data.errcode !== 0) {
- // Failed to push message, get a new token and try again.
- access_token = await requestToken(user.corpId, user.corpAppSecret);
- updateTokenStore(userPrefix, 'corpToken', access_token);
- requestUrl = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${access_token}`;
- response = await axios.post(requestUrl, request_data);
- }
- if (response.data.errcode === 0) {
- return {
- success: true,
- message: 'ok',
- };
- } else {
- return {
- success: false,
- message: response.data.errmsg,
- };
- }
- } catch (e) {
- console.error(e);
- let msg = e.message;
- if (msg.startsWith('access_token missing')) {
- msg = '请求微信服务器失败,请检查配置是否正确或重试!';
- }
- return {
- success: false,
- message: msg,
- };
- }
- }
- module.exports = {
- refreshToken,
- requestToken,
- pushWeChatCorpMessage,
- };
|