const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const openid = wxContext.OPENID const { action } = event if (action === 'status') { const subs = await db.collection('subscriptions').where({ openid, status: 'active' }).get() if (subs.data.length === 0) { return { code: 0, data: { plan_type: 'none', status: 'inactive', remaining_days: 0 } } } const sub = subs.data[0] const now = new Date() const end = new Date(sub.end_time) const remain = Math.max(0, Math.ceil((end - now) / (24 * 3600 * 1000))) return { code: 0, data: { plan_type: sub.plan_type, status: remain > 0 ? 'active' : 'expired', remaining_days: remain, start_time: sub.start_time, end_time: sub.end_time } } } if (action === 'purchase') { const { plan_type } = event.data const price = plan_type === 'monthly' ? 99 : 899 const days = plan_type === 'monthly' ? 30 : 365 await db.collection('subscriptions').where({ openid, status: 'active' }).update({ data: { status: 'expired' } }) await db.collection('subscriptions').add({ data: { openid, plan_type, status: 'active', start_time: db.serverDate(), end_time: new Date(Date.now() + days * 24 * 3600 * 1000), remaining_days: days, price } }) return { code: 0, data: { order_id: 'ORD' + Date.now(), plan_type, status: 'paid' } } } if (action === 'verify') { return { code: 0, data: { valid: true } } } return { code: -1, message: '未知操作' } }