refactor: migrate to WeChat cloud development
- 新增 cloud-functions/ 目录(6个云函数:auth/device/subscription/treatment/user/admin) - 云函数使用 wx-server-sdk + 云数据库(不再依赖 MySQL) - auth 云函数通过 cloud.getWXContext() 自动获取 openid,无需手动 wx.login - request.js 改为通过 wx.cloud.callFunction() 调用云函数 - 登录流程简化:点击授权 → 直接调 auth 云函数 → 获取用户信息 - 保留 HTTP 模式切换能力(USE_CLOUD 变量控制)
这个提交包含在:
@@ -0,0 +1,58 @@
|
||||
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: '未知操作' }
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户