import { Feature } from 'oak-frontend-base/es/types/Feature'; import { OakMpHaveToSubscribeMessage } from '../types/Exception'; import assert from 'assert'; export class WechatSdk extends Feature { cache; message; constructor(cache, message) { super(); this.cache = cache; this.message = message; } wxConfig() { console.error('小程序无需该操作'); } async initWeiXinJsSDK() { console.error('小程序无需该操作'); } async loadWeiXinJsSDK() { console.error('小程序无需该操作'); } /** * 小程序订阅模板消息 * @param messageTypes * @param haveToAccept * @param tip */ async subscribeMpMessage(messageTypes, haveToAccept, tip) { let mttIds = this.cache.get('messageTypeTemplate', { data: { id: 1, templateId: 1, template: { id: 1, wechatId: 1, }, type: 1, }, filter: { type: { $in: messageTypes, }, }, }, true); if (mttIds.length < messageTypes.length) { mttIds = (await this.cache.refresh('messageTypeTemplate', { data: { id: 1, templateId: 1, template: { id: 1, wechatId: 1, }, type: 1, }, filter: { type: { $in: messageTypes, }, }, })).data; } assert(mttIds.length === messageTypes.length); const tmplIds = mttIds.map(ele => ele.template?.wechatId); const result = await wx.requestSubscribeMessage({ tmplIds }); const rejected = Object.keys(result).filter(ele => { // 排除errMsg if (ele === 'errMsg') { return false; } else if (result[ele] === 'reject') { return true; } else if (result[ele] !== 'accept') { this.message.setMessage({ type: 'warning', content: `类型${ele}的模板消息被${result[ele]},请管理员查看后台`, }); } }); if (rejected.length > 0 && haveToAccept) { if (tip) { this.message.setMessage({ type: 'warning', content: tip, }); return false; } throw new OakMpHaveToSubscribeMessage(rejected); } return true; } }