# 订阅付费系统 **本文档引用的文件** - [支付集成指南.md](file://docs/支付集成指南.md) - [订阅系统使用说明.md](file://docs/订阅系统使用说明.md) - [subscription.controller.ts](file://server/src/modules/subscription/subscription.controller.ts) - [subscription.service.ts](file://server/src/modules/subscription/subscription.service.ts) - [payment.controller.ts](file://server/src/modules/payment/payment.controller.ts) - [payment.service.ts](file://server/src/modules/payment/payment.service.ts) - [auth.ts](file://server/src/middleware/auth.ts) - [schema.prisma](file://server/prisma/schema.prisma) - [index.ts](file://server/src/types/index.ts) - [index.vue](file://my-uniapp-vue3/src/pages/member/index.vue) - [orders/index.vue](file://my-uniapp-vue3/src/pages/orders/index.vue) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 订阅付费系统是一个完整的基于套餐制的付费解决方案,集成了多种支付渠道、会员等级管理和使用统计功能。该系统采用前后端分离架构,后端使用Koa.js + Prisma构建,前端使用UniApp Vue3开发。 系统核心功能包括: - **套餐设计与定价策略**:支持免费版、基础版、专业版、旗舰版四个等级 - **支付流程集成**:支持支付宝、微信支付、模拟支付 - **使用统计与计费**:基于Token的使用量统计和计费 - **会员等级管理**:动态的会员等级和权益管理 - **订阅状态控制**:完整的订阅生命周期管理 - **计费规则实现**:包月配额+按量超支的混合计费模式 ## 项目结构 该项目采用模块化组织结构,主要分为以下层次: ```mermaid graph TB subgraph "前端层" FE1[UniApp Vue3 应用] FE2[成员页面] FE3[订单页面] FE4[支付确认页面] end subgraph "后端层" BE1[Koa.js 服务器] BE2[认证中间件] BE3[支付模块] BE4[订阅模块] BE5[类型定义] end subgraph "数据层" DB1[Prisma ORM] DB2[MySQL 数据库] DB3[用户表] DB4[订单表] DB5[套餐表] DB6[Token表] end FE1 --> BE1 BE1 --> BE2 BE1 --> BE3 BE1 --> BE4 BE2 --> DB1 BE3 --> DB1 BE4 --> DB1 DB1 --> DB2 ``` **图表来源** - [subscription.controller.ts:1-191](file://server/src/modules/subscription/subscription.controller.ts#L1-L191) - [payment.controller.ts:1-258](file://server/src/modules/payment/payment.controller.ts#L1-L258) - [schema.prisma:1-470](file://server/prisma/schema.prisma#L1-L470) **章节来源** - [subscription.controller.ts:1-191](file://server/src/modules/subscription/subscription.controller.ts#L1-L191) - [payment.controller.ts:1-258](file://server/src/modules/payment/payment.controller.ts#L1-L258) - [schema.prisma:1-470](file://server/prisma/schema.prisma#L1-L470) ## 核心组件 ### 套餐管理系统 系统提供四个层级的套餐,每个套餐都有独特的功能组合和定价策略: | 套餐等级 | 月付价格 | 年付价格 | Token配额 | 主要功能 | |---------|---------|---------|-----------|----------| | 免费版 | ¥0 | ¥0 | 5,000/月 | 基础音色、标准音质 | | 基础版 | ¥9.9 | ¥99 | 10,000/月 | 全部音色、高清音质 | | 专业版 | ¥29.9 | ¥299 | 20,000/月 | 无损音质、API访问 | | 旗舰版 | ¥99 | ¥999 | 50,000/月 | 批量处理、团队管理 | ### 支付系统架构 系统支持三种支付方式,每种都有完整的集成方案: ```mermaid flowchart TD A[用户选择套餐] --> B[创建支付订单] B --> C{支付方式选择} C --> |支付宝| D[生成支付宝链接] C --> |微信支付| E[生成微信二维码] C --> |模拟支付| F[开发环境测试] D --> G[用户支付] E --> G F --> H[模拟支付成功] G --> I[支付回调处理] H --> I I --> J[激活订阅] J --> K[更新Token余额] K --> L[完成订阅] ``` **图表来源** - [payment.service.ts:122-191](file://server/src/modules/payment/payment.service.ts#L122-L191) - [payment.controller.ts:9-33](file://server/src/modules/payment/payment.controller.ts#L9-L33) ### 计费系统设计 系统采用混合计费模式,结合包月配额和按量超支: ```mermaid flowchart TD A[用户生成内容] --> B[计算Token消耗] B --> C{检查配额} C --> |余额充足| D[扣除Token] C --> |余额不足| E{是否超配额} E --> |支持超配额| F[按量计费] E --> |不支持超配额| G[拒绝请求] D --> H[开始生成] F --> H G --> I[返回错误] H --> J[记录使用日志] J --> K[更新余额] ``` **图表来源** - [subscription.service.ts:411-450](file://server/src/modules/subscription/subscription.service.ts#L411-L450) - [subscription.service.ts:557-600](file://server/src/modules/subscription/subscription.service.ts#L557-L600) **章节来源** - [subscription.service.ts:158-296](file://server/src/modules/subscription/subscription.service.ts#L158-L296) - [payment.service.ts:122-191](file://server/src/modules/payment/payment.service.ts#L122-L191) - [subscription.service.ts:557-600](file://server/src/modules/subscription/subscription.service.ts#L557-L600) ## 架构概览 系统采用分层架构设计,确保各组件职责清晰、耦合度低: ```mermaid graph TB subgraph "表现层" UI1[成员页面] UI2[订单页面] UI3[支付页面] end subgraph "应用层" AC[认证控制器] PC[支付控制器] SC[订阅控制器] end subgraph "服务层" AS[认证服务] PS[支付服务] SS[订阅服务] end subgraph "数据访问层" PR[Prisma客户端] DB[MySQL数据库] end UI1 --> AC UI2 --> PC UI3 --> SC AC --> AS PC --> PS SC --> SS AS --> PR PS --> PR SS --> PR PR --> DB ``` **图表来源** - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [payment.controller.ts:1-258](file://server/src/modules/payment/payment.controller.ts#L1-L258) - [subscription.controller.ts:1-191](file://server/src/modules/subscription/subscription.controller.ts#L1-L191) 系统的关键特性包括: - **模块化设计**:每个功能模块独立封装,便于维护和扩展 - **中间件机制**:统一的认证和错误处理中间件 - **类型安全**:完整的TypeScript类型定义 - **数据库抽象**:通过Prisma实现数据库无关的数据访问 **章节来源** - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [index.ts:1-124](file://server/src/types/index.ts#L1-L124) - [schema.prisma:1-470](file://server/prisma/schema.prisma#L1-L470) ## 详细组件分析 ### 支付模块 支付模块是整个订阅系统的核心,负责处理各种支付渠道的集成和回调处理。 #### 支付流程序列图 ```mermaid sequenceDiagram participant U as 用户 participant F as 前端应用 participant B as 后端服务 participant P as 支付网关 participant D as 数据库 U->>F : 选择套餐并点击订阅 F->>B : POST /api/payment/create B->>D : 创建订单记录 B->>P : 调用支付接口 P-->>B : 返回支付链接/二维码 B-->>F : 返回支付信息 F-->>U : 展示支付页面 U->>P : 完成支付 P->>B : 异步回调通知 B->>D : 更新订单状态 B->>D : 激活订阅服务 B->>D : 更新用户Token余额 B-->>F : 支付结果 ``` **图表来源** - [payment.controller.ts:9-33](file://server/src/modules/payment/payment.controller.ts#L9-L33) - [payment.service.ts:359-406](file://server/src/modules/payment/payment.service.ts#L359-L406) #### 支付回调处理 系统实现了完善的支付回调处理机制,确保支付状态的准确性和一致性: ```mermaid flowchart TD A[收到支付回调] --> B[验证签名] B --> |验证失败| C[拒绝回调] B --> |验证成功| D[查询订单状态] D --> |订单已支付| E[直接返回成功] D --> |订单未支付| F{支付状态判断} F --> |支付成功| G[更新订单为已支付] F --> |支付失败| H[更新订单为支付失败] G --> I[激活订阅服务] H --> J[保持原状态] I --> K[更新用户Token余额] K --> L[返回处理成功] J --> L E --> L ``` **图表来源** - [payment.controller.ts:58-95](file://server/src/modules/payment/payment.controller.ts#L58-L95) - [payment.service.ts:359-406](file://server/src/modules/payment/payment.service.ts#L359-L406) **章节来源** - [payment.controller.ts:1-258](file://server/src/modules/payment/payment.controller.ts#L1-L258) - [payment.service.ts:1-578](file://server/src/modules/payment/payment.service.ts#L1-L578) ### 订阅管理模块 订阅管理模块负责处理用户的订阅生命周期,从创建到取消的完整流程。 #### 订阅状态转换图 ```mermaid stateDiagram-v2 [*] --> 待支付 待支付 --> 已支付 : 支付成功 待支付 --> 已取消 : 支付失败 已支付 --> 激活中 : 激活订阅 激活中 --> 已激活 : 订阅生效 已激活 --> 已过期 : 到期时间到 已激活 --> 已取消 : 用户取消 已过期 --> 待续费 : 自动续费 待续费 --> 已激活 : 续费成功 待续费 --> 已取消 : 续费失败 已取消 --> [*] 已激活 --> [*] 已过期 --> [*] ``` **图表来源** - [subscription.service.ts:409-461](file://server/src/modules/subscription/subscription.service.ts#L409-L461) #### 计费规则实现 系统实现了灵活的计费规则,支持包月配额和按量超支的混合模式: **章节来源** - [subscription.service.ts:519-600](file://server/src/modules/subscription/subscription.service.ts#L519-L600) ### 使用统计模块 使用统计模块跟踪用户的Token使用情况,为计费和配额管理提供数据支持。 #### Token使用流程 ```mermaid flowchart TD A[用户发起请求] --> B[检查Token余额] B --> |余额充足| C[计算消耗量] B --> |余额不足| D[拒绝请求] C --> E[扣除Token] E --> F[记录使用日志] F --> G[更新统计信息] G --> H[返回成功] D --> I[返回错误信息] ``` **图表来源** - [subscription.service.ts:411-450](file://server/src/modules/subscription/subscription.service.ts#L411-L450) **章节来源** - [subscription.service.ts:361-408](file://server/src/modules/subscription/subscription.service.ts#L361-L408) ### 前端交互模块 前端采用UniApp框架开发,提供了完整的用户界面和交互体验。 #### 前端页面架构 ```mermaid graph TB subgraph "用户界面" M[成员页面] O[订单页面] P[支付确认页面] R[支付结果页面] end subgraph "状态管理" US[用户状态] TS[Token状态] PS[支付状态] end subgraph "数据流" API[API调用] CACHE[本地缓存] STORAGE[持久化存储] end M --> US O --> PS P --> TS R --> US US --> API TS --> API PS --> API API --> CACHE CACHE --> STORAGE ``` **图表来源** - [index.vue:1-253](file://my-uniapp-vue3/src/pages/member/index.vue#L1-L253) - [orders/index.vue:1-281](file://my-uniapp-vue3/src/pages/orders/index.vue#L1-L281) **章节来源** - [index.vue:1-253](file://my-uniapp-vue3/src/pages/member/index.vue#L1-L253) - [orders/index.vue:1-281](file://my-uniapp-vue3/src/pages/orders/index.vue#L1-L281) ## 依赖关系分析 系统采用模块化依赖设计,各模块之间的依赖关系清晰明确: ```mermaid graph LR subgraph "外部依赖" JWT[jsonwebtoken] ALI[alipay-sdk] WX[wechatpay-node-v3] PRISMA[prisma] MYSQL[mysql2] end subgraph "内部模块" AUTH[认证模块] PAY[支付模块] SUB[订阅模块] TYPES[类型定义] MWARE[中间件] end AUTH --> JWT PAY --> ALI PAY --> WX SUB --> PRISMA PAY --> PRISMA SUB --> MYSQL PAY --> MYSQL AUTH --> TYPES PAY --> TYPES SUB --> TYPES MWARE --> TYPES ``` **图表来源** - [payment.service.ts:1-29](file://server/src/modules/payment/payment.service.ts#L1-L29) - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [schema.prisma:1-8](file://server/prisma/schema.prisma#L1-L8) ### 数据模型关系 系统使用Prisma进行数据建模,实体间的关系设计合理: ```mermaid erDiagram User { int id PK string phone UK string openid UK int memberLevel datetime memberExpireAt int usedAudioMinutes datetime subscriptionResetDate } SubscriptionPlan { int id PK string name int level decimal priceMonthly int monthlyTokens int monthlyMinutes boolean overageEnabled decimal overagePrice } Order { int id PK int userId FK string orderNo UK int planId FK string productType decimal amount string status string paymentMethod datetime paidAt } Subscription { int id PK int userId FK int planId FK datetime startDate datetime endDate string status boolean autoRenew } TokenBalance { int id PK int userId UK int totalTokens int usedTokens datetime resetDate } TokenUsage { int id PK int userId FK string type int amount int contentLength int orderId FK } User ||--o{ Order : creates User ||--o{ Subscription : has User ||--o{ TokenBalance : has User ||--o{ TokenUsage : makes SubscriptionPlan ||--o{ Subscription : defines SubscriptionPlan ||--o{ Order : for Order ||--|| TokenUsage : generates ``` **图表来源** - [schema.prisma:10-330](file://server/prisma/schema.prisma#L10-L330) **章节来源** - [schema.prisma:1-470](file://server/prisma/schema.prisma#L1-L470) ## 性能考虑 系统在设计时充分考虑了性能优化,采用了多种策略来提升用户体验: ### 缓存策略 - **用户状态缓存**:使用内存缓存减少数据库查询 - **套餐列表缓存**:静态套餐信息缓存30分钟 - **Token余额缓存**:用户Token余额缓存10秒 ### 数据库优化 - **索引优化**:为常用查询字段建立复合索引 - **查询优化**:使用关联查询减少N+1问题 - **分页查询**:订单和使用记录采用分页加载 ### 异步处理 - **支付回调异步**:支付回调不阻塞主请求流程 - **日志异步**:使用异步日志记录不影响业务处理 - **队列处理**:批量操作使用队列异步处理 ## 故障排除指南 ### 常见问题及解决方案 #### 支付问题 1. **支付宝支付失败** - 检查支付宝公钥配置 - 验证回调URL是否可访问 - 确认沙箱环境配置 2. **微信支付二维码无法生成** - 检查商户证书文件 - 验证API密钥配置 - 确认回调URL配置 #### 认证问题 1. **Token过期** - 检查JWT密钥配置 - 验证Token生成和解析逻辑 - 确认Token有效期设置 2. **用户状态异常** - 检查用户表数据完整性 - 验证会员等级映射关系 - 确认订阅状态同步 #### 数据库问题 1. **连接失败** - 检查数据库连接字符串 - 验证数据库服务状态 - 确认网络连接 2. **查询超时** - 检查慢查询日志 - 优化索引配置 - 分析查询执行计划 **章节来源** - [payment.service.ts:51-118](file://server/src/modules/payment/payment.service.ts#L51-L118) - [auth.ts:34-48](file://server/src/middleware/auth.ts#L34-L48) ## 结论 订阅付费系统是一个功能完整、架构清晰的商业化解决方案。系统的主要优势包括: ### 技术优势 - **模块化设计**:清晰的职责分离和依赖管理 - **类型安全**:完整的TypeScript类型定义保障代码质量 - **数据库抽象**:Prisma提供强大的数据建模能力 - **支付集成**:支持主流支付渠道的完整集成方案 ### 业务价值 - **灵活的定价策略**:支持多种套餐组合满足不同用户需求 - **完善的计费系统**:包月配额+按量超支的混合计费模式 - **用户体验优化**:简洁直观的前端界面和流畅的操作流程 - **可扩展性**:模块化架构便于功能扩展和维护 ### 发展建议 1. **增强安全性**:添加更多安全防护措施 2. **完善监控**:增加系统监控和告警机制 3. **优化性能**:进一步优化数据库查询和缓存策略 4. **扩展功能**:支持更多支付渠道和计费模式 该系统为音频内容生成平台提供了坚实的商业基础,能够有效支撑业务的持续发展和用户增长。 ## 附录 ### API接口文档 #### 支付相关接口 - `POST /api/payment/create` - 创建支付订单 - `POST /api/payment/mock` - 模拟支付(开发环境) - `POST /api/payment/alipay/notify` - 支付宝异步回调 - `GET /api/payment/wechat/query/:orderNo` - 查询微信支付状态 #### 订阅相关接口 - `GET /api/subscription/plans` - 获取套餐列表 - `GET /api/subscription/balance` - 获取Token余额 - `GET /api/subscription/usage` - 获取使用记录 - `GET /api/subscription/orders` - 获取订单列表 ### 配置说明 #### 环境变量 - `ALIPAY_APP_ID` - 支付宝应用ID - `ALIPAY_PRIVATE_KEY` - 支付宝私钥 - `WECHAT_APP_ID` - 微信应用ID - `WECHAT_MCH_ID` - 微信商户ID - `AUTH_ENABLED` - 是否启用认证 #### 数据库配置 - `DATABASE_URL` - MySQL连接字符串 - 支持SSL连接配置 - 连接池大小配置 ### 安全策略 #### 支付安全 - 支付回调签名验证 - 防重放攻击机制 - 敏感信息加密存储 - HTTPS强制使用 #### 用户数据保护 - JWT Token安全配置 - 密码加密存储 - 数据访问权限控制 - 审计日志记录