95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
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,
|
|
},
|
|
},
|
|
});
|
|
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;
|
|
}
|
|
}
|