feat: sync backend with frontend - add all UserEquity fields (brandIcon, brandIconImage, brandColor, platformType, hasUsedBenefit, benefit sub-fields, etc.) and new routes
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
const axios = require('axios');
|
||||
|
||||
let accessTokenCache = {
|
||||
token: null,
|
||||
expiresAt: null
|
||||
};
|
||||
|
||||
class WechatSubscribeService {
|
||||
static async getAccessToken() {
|
||||
const now = Date.now();
|
||||
|
||||
if (accessTokenCache.token && accessTokenCache.expiresAt && now < accessTokenCache.expiresAt) {
|
||||
return accessTokenCache.token;
|
||||
}
|
||||
|
||||
const appId = process.env.WECHAT_APPID;
|
||||
const appSecret = process.env.WECHAT_APPSECRET;
|
||||
|
||||
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`;
|
||||
|
||||
try {
|
||||
const response = await axios.get(url);
|
||||
const { access_token, expires_in } = response.data;
|
||||
|
||||
accessTokenCache = {
|
||||
token: access_token,
|
||||
expiresAt: now + (expires_in - 300) * 1000
|
||||
};
|
||||
|
||||
return access_token;
|
||||
} catch (error) {
|
||||
console.error('获取微信 access_token 失败:', error.response?.data || error.message);
|
||||
throw new Error('获取微信 access_token 失败');
|
||||
}
|
||||
}
|
||||
|
||||
static async sendSubscribeMessage({ touser, templateId, page, data }) {
|
||||
const accessToken = await this.getAccessToken();
|
||||
const url = `https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${accessToken}`;
|
||||
|
||||
const requestData = {
|
||||
touser,
|
||||
template_id: templateId,
|
||||
page: page || 'pages/index/index',
|
||||
data
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await axios.post(url, requestData);
|
||||
|
||||
if (response.data.errcode === 0) {
|
||||
return { success: true, messageId: response.data.msgid };
|
||||
} else {
|
||||
console.error('发送订阅消息失败:', response.data);
|
||||
return {
|
||||
success: false,
|
||||
errcode: response.data.errcode,
|
||||
errmsg: response.data.errmsg
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('发送订阅消息异常:', error.response?.data || error.message);
|
||||
return { success: false, errmsg: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
static async sendVersionUpdateMessage({ openid, templateId, character_string1, thing3, thing6 }) {
|
||||
const data = {
|
||||
character_string1: { value: character_string1 },
|
||||
thing3: { value: thing3 }
|
||||
};
|
||||
|
||||
if (thing6) {
|
||||
data.thing6 = { value: thing6 };
|
||||
}
|
||||
|
||||
return this.sendSubscribeMessage({
|
||||
touser: openid,
|
||||
templateId,
|
||||
page: 'pages/index/index',
|
||||
data
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = WechatSubscribeService;
|
||||
Reference in New Issue
Block a user