bindbox-mini/utils/subscribe.js

91 lines
2.5 KiB
JavaScript

/**
* 微信订阅消息授权工具
* 用于在抽奖前请求用户授权接收开奖通知
*/
// 抽奖结果通知模板 ID
const LOTTERY_RESULT_TEMPLATE_ID = 'O2eqJQD3pn-vQ6g2z9DWzINVwOmPoz8yW-172J_YcpI'
/**
* 请求用户订阅抽奖结果通知
* @returns {Promise<object>} 订阅结果
*/
export function requestLotterySubscription() {
return new Promise((resolve) => {
// #ifdef MP-WEIXIN
wx.requestSubscribeMessage({
tmplIds: [LOTTERY_RESULT_TEMPLATE_ID],
success(res) {
console.log('订阅消息授权结果:', res)
resolve({
success: true,
result: res,
// 检查用户是否接受了订阅
accepted: res[LOTTERY_RESULT_TEMPLATE_ID] === '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
}