bindbox-mini/utils/subscribe.js

102 lines
2.8 KiB
JavaScript

/**
* 微信订阅消息授权工具
* 用于在抽奖前请求用户授权接收开奖通知
*/
// 抽奖结果通知模板 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<object>} 订阅结果
*/
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<object>} 订阅结果
*/
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
}