套餐与定价
统一配置
套餐公开文案、价格和成员上限在 packages/core/website.ts。packages/core/site.ts 生成兼容视图,apps/api/lib/plans.ts 从该视图派生限制,认证插件和订阅查询共用。
当前 free、starter、pro 是固定代码标识。改显示名称不必改标识;增加新套餐要同步类型、插件配置、订阅识别、界面和测试,不能只加一张价格卡。
Stripe 价格对象
在 Stripe 测试模式创建对应产品和循环价格,把价格 ID 写入环境。正式模式需要另外的价格 ID、密钥和回调签名,不能混用测试对象。
STRIPE_STARTER_PRICE_ID 和 STRIPE_PRO_PRICE_ID 是基础价格;可选年付价格使用 STRIPE_PRO_ANNUAL_PRICE_ID。当前年付界面是否完整应按实际购买入口验收,环境变量存在不保证用户已经能选择。
试用与权限
Pro 试用天数来自 websiteConfig.payment.trialDays,大于零才配置试用。当前订阅查询只在 active 的确认周期、trialing 的确认试用期仍有效时返回付费限制;截止还考虑提前取消 / 结束时间。周期或试用时间缺失、已到期、past_due、unpaid、paused 和未完成首付均不授予付费权限,当前没有宽限期。subscriptionPlan / status 仍保留原账单状态,不能将续费失败显示为没有订阅。预约取消在有效期内继续提供原方案,截止后停止;未结束记录优先于旧取消历史;检测到多笔 active / trialing 或未解决订阅进入查询错误,不能随意选一笔。
套餐里列出成员限制不代表所有业务入口已自动执行限制。增加组织成员、文件大小或任务额度限制时,要在对应服务端操作实施,界面只显示结果。
修改后的验证
检查展示金额、币种、周期与 Stripe 结账一致,试用结束和取消后的权限变化符合预期。不要把订阅价格直接当成积分扣费规则,一次性积分购买已有独立事件与账本衔接,见支付与任务教程。
新购与继续结账
本站新购入口有服务端门禁:已有有效、试用、欠费、暂停或未确认订阅时不能新开 Checkout,方案调整使用现有门户。设置页可恢复同一请求的原方案和年付选项,不因刷新或超时重新生成付款。已知过期会话经供应商确认后才允许新请求,过期未知结果保持核查;当前管理员解除界面尚未交付。具体租约、归属和幂等规则见支付与任务。