API Key 计费功能实现总结
概述
为 SaasKit 项目添加了完整的 API Key 计费功能,支持余额管理、使用量记录、费用计算、充值和统计等功能。
新增文件
1. backlin/module_saas/billing_utils.py
计费工具模块,提供核心计费功能:
calculate_cost()- 计算 API 调用费用check_balance()- 检查余额和配额deduct_balance()- 扣费并记录使用量recharge_balance()- 充值余额get_usage_stats()- 获取使用统计PRICING- 价格配置字典
2. backlin/middleware/billing.py
计费中间件(可选使用):
BillingMiddleware- 自动拦截和计费的中间件record_usage_background()- 后台记录任务manual_record_usage()- 手动记录使用量
3. test_billing.py
测试脚本,包含完整的测试流程
4. API_BILLING_GUIDE.md
详细的使用指南
修改的文件
1. backlin/module_saas/schema.py
扩展数据模型:
ApiKey 新增字段:
balance- 账户余额quota_limit- 配额限制total_usage- 累计使用金额total_tokens- 累计使用 tokens- 关系:
usages、billings
Billing 扩展字段:
api_key_id- 关联 API Keyorder_no- 订单号payment_method- 支付方式payment_time- 支付时间remark- 备注
新增 Usage 模型:
api_key_id- 关联 API Keymodel- 使用的模型prompt_tokens- 输入 tokenscompletion_tokens- 输出 tokenstotal_tokens- 总 tokenscost- 费用request_path- 请求路径request_method- 请求方法status_code- 状态码error_message- 错误信息
2. backlin/module_saas/api_require.py
增强 API Key 验证:
- 添加余额检查
- 添加配额检查
- 返回 402 状态码当余额不足
- 将 API Key 存储到 request.state
3. backlin/module_saas/api_v1.py
新增计费相关接口:
GET /api/v1/usage/stats- 获取使用量统计GET /api/v1/usage/history- 获取使用历史POST /api/v1/usage/record- 手动记录使用量POST /api/v1/billing/recharge- 充值余额GET /api/v1/billing/history- 获取充值历史
4. backlin/module_saas/route_apikey.py
- 导入 Usage 和 UsageModel
- 添加 app_usage 路由器
5. backlin/backend.py
- 导入 api_v1 模块
- 注册 app_usage 路由
- 注册 api_v1 路由
数据库变更
运行应用时会自动创建以下表结构变更:
sys_api_key 表新增列:
ALTER TABLE sys_api_key ADD COLUMN balance FLOAT DEFAULT 0.0;
ALTER TABLE sys_api_key ADD COLUMN quota_limit FLOAT;
ALTER TABLE sys_api_key ADD COLUMN total_usage FLOAT DEFAULT 0.0;
ALTER TABLE sys_api_key ADD COLUMN total_tokens INTEGER DEFAULT 0;