/** * 微信订阅消息授权工具 * 用于在抽奖前请求用户授权接收开奖通知 */ // 抽奖结果通知模板 ID (默认兜底) const DEFAULT_LOTTERY_RESULT_TEMPLATE_ID = 'O2eqJQD3pn-vQ6g2z9DWzINVwOmPoz8yW-172J_YcpI' function getLotteryTemplateId() { try { const templates = uni.getStorageSync('subscribe_templates') if (templates && templates.lottery_result) { return templates.lottery_result } } catch (e) { console.error(e) } return DEFAULT_LOTTERY_RESULT_TEMPLATE_ID } /** * 请求用户订阅抽奖结果通知 * @returns {Promise} 订阅结果 */ export function requestLotterySubscription() { return new Promise((resolve) => { // #ifdef MP-WEIXIN const tmplId = getLotteryTemplateId() wx.requestSubscribeMessage({ tmplIds: [tmplId], success(res) { console.log('订阅消息授权结果:', res) resolve({ success: true, result: res, // 检查用户是否接受了订阅 accepted: res[tmplId] === 'accept' }) }, fail(err) { console.warn('订阅消息授权失败:', err) // 即使授权失败也不阻止用户参与抽奖 resolve({ success: false, error: err, accepted: false }) } }) // #endif // #ifndef MP-WEIXIN // 非微信小程序环境,直接返回成功 resolve({ success: true, accepted: false, message: '非微信小程序环境,跳过订阅授权' }) // #endif }) } /** * 批量请求多个模板的订阅授权 * @param {string[]} templateIds 模板ID数组 * @returns {Promise} 订阅结果 */ export function requestSubscriptions(templateIds) { return new Promise((resolve) => { // #ifdef MP-WEIXIN wx.requestSubscribeMessage({ tmplIds: templateIds, success(res) { console.log('订阅消息授权结果:', res) resolve({ success: true, result: res }) }, fail(err) { console.warn('订阅消息授权失败:', err) resolve({ success: false, error: err }) } }) // #endif // #ifndef MP-WEIXIN resolve({ success: true, message: '非微信小程序环境,跳过订阅授权' }) // #endif }) } export default { requestLotterySubscription, requestSubscriptions, LOTTERY_RESULT_TEMPLATE_ID }