TinyShip 1.4.0 正式发布
本版本引入完整的积分支付系统,创新性地将传统订阅模式与 AI 时代流行的积分模式融合,为项目提供双轨制的灵活付费能力。
✨ 核心新增
双重付费模式:传统按时间订阅(月付/年付)与一次性积分充值并行运行
积分消耗系统:支持固定消耗和动态消耗(按 token)两种模式
AI 模型乘数:不同 AI 模型可配置不同的积分消耗系数
完整交易追踪:详细的积分交易记录,支持分页查询
🎯 支持的付费模式
| 模式 | 类型 | 适用场景 |
|---|---|---|
| 订阅 | recurring | 会员服务、SaaS 软件 |
| 单次付费 | one_time | 终身会员、课程购买 |
| 积分充值 | credits | AI 聊天、图片生成 |
🔧 技术亮点
积分服务库:独立的 @libs/credits 模块,包含余额管理、消耗计算、交易记录
安全数值处理:safeNumber 工具函数防止 NaN/Infinity 导致的数据问题
Webhook 自动处理:支付成功后自动增加用户积分余额
i18n 交易描述:使用 TransactionTypeCode 实现多语言交易记录
📦 积分 API 端点
// 获取积分余额
GET /api/credits/balance
// 获取交易记录
GET /api/credits/transactions?page=1&limit=10
// 获取完整状态(积分 + 订阅)
GET /api/credits/status⚠️ 破坏性变更与迁移
数据库架构更新:本版本新增 credit-transaction 数据表用于追踪积分交易记录。老用户需要在升级后更新数据库架构。
迁移步骤:
# 先验证数据库连接
pnpm db:check
# 然后运行以下命令之一:
pnpm db:push # 推荐开发环境使用(快速,直接应用架构)
# OR
pnpm db:migrate # 推荐生产环境使用(安全,先创建迁移文件)
# 可选:通过 Drizzle Studio 验证新表结构
pnpm db:studio新增内容:
- 新增
credit-transaction数据表,记录完整的交易历史 - 通过 Drizzle ORM 自动迁移
- 无数据丢失 - 现有表保持不变
重要提示:生产环境运行迁移前务必备份数据库。
Pricing 页面:新增 Tab 切换,区分订阅计划和积分充值
Dashboard:新增独立的"积分状态"标签页,展示余额和交易记录
统一配色:移除硬编码颜色,使用 UI 颜色系统
📚 文档优化
将原有的大型支付文档拆分为三个独立文档:
- 支付配置指南:支付方式和计划配置
- 积分系统指南:积分充值和消耗配置
- 支付测试指南:本地开发和 Webhook 调试
💡 配置示例
// 积分计划配置
credits500: {
provider: 'stripe',
id: 'credits500',
amount: 45,
currency: 'USD',
duration: {
type: 'credits',
credits: 550 // 500 + 50 赠送
}
}
// 积分消耗配置
credits: {
consumptionMode: 'dynamic',
dynamicChatCostPerKiloToken: 1,
modelMultipliers: {
'qwen-turbo': 1.0,
'gpt-4': 2.0
}
}