102 lines
2.8 KiB
JavaScript
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
|
|
}
|