// 云函数:subscribe // 用户订阅每日运势推送,存储生辰信息和订阅偏好 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const { birthInfo, templateId, pushTime } = event const { OPENID } = cloud.getWXContext() // 参数校验 if (!birthInfo || !templateId) { return { success: false, error: '参数不完整' } } if (!birthInfo.birthDate || birthInfo.birthHour == null || birthInfo.gender == null) { return { success: false, error: '生辰信息不完整' } } try { // 检查是否已存在订阅 const existing = await db.collection('subscriptions').where({ openid: OPENID, }).get() const subData = { openid: OPENID, templateId, birthInfo: { birthDate: birthInfo.birthDate, birthHour: birthInfo.birthHour, birthMinute: birthInfo.birthMinute || 0, birthPlace: birthInfo.birthPlace || '', longitude: birthInfo.longitude || 0, latitude: birthInfo.latitude || 0, gender: birthInfo.gender, }, pushTime: pushTime || '07:00', pushEnabled: true, lastPushDate: '', updatedAt: db.serverDate(), } if (existing.data.length > 0) { // 更新现有订阅 await db.collection('subscriptions').doc(existing.data[0]._id).update({ data: subData, }) } else { // 新建订阅 subData.subscribedAt = db.serverDate() await db.collection('subscriptions').add({ data: subData, }) } return { success: true } } catch (err) { console.error('[subscribe] Error:', err) return { success: false, error: err.message } } }