# 会员服务API **本文档引用的文件** - [member.controller.ts](file://server/src/modules/member/member.controller.ts) - [member.service.ts](file://server/src/modules/member/member.service.ts) - [payment.controller.ts](file://server/src/modules/payment/payment.controller.ts) - [payment.service.ts](file://server/src/modules/payment/payment.service.ts) - [subscription.controller.ts](file://server/src/modules/subscription/subscription.controller.ts) - [subscription.service.ts](file://server/src/modules/subscription/subscription.service.ts) - [types/index.ts](file://server/src/types/index.ts) - [models/index.ts](file://server/src/models/index.ts) - [app.ts](file://server/src/app.ts) - [schema.prisma](file://server/prisma/schema.prisma) - [支付集成指南.md](file://docs/支付集成指南.md) - [订阅系统使用说明.md](file://docs/订阅系统使用说明.md) - [API.md](file://docs/API.md) ## 目录 1. [项目概述](#项目概述) 2. [核心组件架构](#核心组件架构) 3. [会员权益接口](#会员权益接口) 4. [会员状态接口](#会员状态接口) 5. [订单创建接口](#订单创建接口) 6. [支付订单接口](#支付订单接口) 7. [会员等级与权益体系](#会员等级与权益体系) 8. [订单管理流程](#订单管理流程) 9. [支付集成与安全](#支付集成与安全) 10. [数据库模型](#数据库模型) 11. [性能与扩展性](#性能与扩展性) 12. [故障排除指南](#故障排除指南) 13. [总结](#总结) ## 项目概述 会员服务模块是AI语音应用的核心付费功能模块,提供完整的会员订阅管理、订单处理和支付集成能力。该模块采用微服务架构设计,通过清晰的职责分离实现了会员权益管理、状态查询、订单创建和支付处理等功能。 模块基于Koa.js框架构建,使用TypeScript进行类型安全编程,配合Prisma ORM实现数据库操作。整个系统支持多种支付方式,包括支付宝、微信支付和模拟支付,为企业级部署提供了灵活的支付解决方案。 ## 核心组件架构 ```mermaid graph TB subgraph "客户端层" Web[Web前端] Mobile[移动端应用] MiniProgram[小程序] end subgraph "API网关层" Router[Koa Router] Auth[认证中间件] ErrorHandler[错误处理] end subgraph "业务服务层" MemberService[会员服务] PaymentService[支付服务] SubscriptionService[订阅服务] end subgraph "数据持久层" Prisma[Prisma ORM] MySQL[(MySQL数据库)] Redis[(Redis缓存)] end subgraph "第三方集成" Alipay[支付宝SDK] WeChatPay[微信支付SDK] OSS[对象存储] end Web --> Router Mobile --> Router MiniProgram --> Router Router --> Auth Auth --> MemberService Auth --> PaymentService Auth --> SubscriptionService MemberService --> Prisma PaymentService --> Prisma SubscriptionService --> Prisma Prisma --> MySQL Prisma --> Redis PaymentService --> Alipay PaymentService --> WeChatPay MemberService --> OSS ``` **图表来源** - [app.ts:100-128](file://server/src/app.ts#L100-L128) - [member.controller.ts:1-90](file://server/src/modules/member/member.controller.ts#L1-L90) - [payment.controller.ts:1-258](file://server/src/modules/payment/payment.controller.ts#L1-L258) ## 会员权益接口 ### 接口定义 **GET /api/member/benefits** 该接口用于获取完整的会员权益信息,包括各等级的详细功能对比和价格信息。 ### 请求参数 无需请求参数 ### 响应数据结构 | 字段 | 类型 | 描述 | |------|------|------| | code | number | 响应码,0表示成功 | | message | string | 响应消息 | | data | object | 权益数据对象 | ### 权益数据详情 ```mermaid erDiagram BENEFITS { array levels } LEVEL { number level string name number price object quota array features } QUOTA { number dailyLimit number wordLimit } BENEFITS ||--o{ LEVEL : contains LEVEL ||--|| QUOTA : defines ``` **图表来源** - [member.service.ts:10-37](file://server/src/modules/member/member.service.ts#L10-L37) - [types/index.ts:114-124](file://server/src/types/index.ts#L114-L124) ### 响应示例 ```json { "code": 0, "message": "success", "data": { "levels": [ { "level": 0, "name": "免费版", "price": 0, "quota": { "dailyLimit": 3, "wordLimit": 5000 }, "features": ["每天3次生成", "每次最多5000字", "基础音色"] }, { "level": 1, "name": "月度会员", "price": 19.9, "quota": { "dailyLimit": 20, "wordLimit": 50000 }, "features": ["每天20次生成", "每次最多50000字", "全部音色", "优先处理"] }, { "level": 2, "name": "年度会员", "price": 199, "quota": { "dailyLimit": -1, "wordLimit": -1 }, "features": ["无限次生成", "无字数限制", "全部音色", "优先处理", "专属客服"] } ] } } ``` **章节来源** - [member.controller.ts:9-18](file://server/src/modules/member/member.controller.ts#L9-L18) - [member.service.ts:10-37](file://server/src/modules/member/member.service.ts#L10-L37) ## 会员状态接口 ### 接口定义 **GET /api/member/status** 该接口用于获取当前用户的会员状态信息,包括会员等级、有效期和使用配额等。 ### 请求参数 | 参数名 | 类型 | 必填 | 描述 | |--------|------|------|------| | Authorization | string | 是 | JWT认证令牌 | ### 响应数据结构 | 字段 | 类型 | 描述 | |------|------|------| | code | number | 响应码,0表示成功 | | message | string | 响应消息 | | data | object | 会员状态数据 | ### 状态数据详情 ```mermaid flowchart TD Start([获取会员状态]) --> GetUser["查询用户信息"] GetUser --> CheckUser{"用户是否存在"} CheckUser --> |否| Error["抛出错误"] CheckUser --> |是| GetQuota["获取配额信息"] GetQuota --> CheckDate{"检查日期重置"} CheckDate --> ResetDaily["重置每日使用次数"] CheckDate --> CheckValidity["检查会员有效性"] ResetDaily --> CalcRemainder["计算剩余配额"] CheckValidity --> CalcRemainder CalcRemainder --> ReturnData["返回状态数据"] Error --> End([结束]) ReturnData --> End ``` **图表来源** - [member.service.ts:39-73](file://server/src/modules/member/member.service.ts#L39-L73) ### 响应示例 ```json { "code": 0, "message": "success", "data": { "level": 1, "levelName": "月度会员", "expireAt": "2026-12-31T23:59:59Z", "isValid": true, "quota": { "dailyLimit": 20, "dailyUsed": 3, "dailyRemaining": 17, "wordLimit": 50000 } } } ``` **章节来源** - [member.controller.ts:20-30](file://server/src/modules/member/member.controller.ts#L20-L30) - [member.service.ts:39-73](file://server/src/modules/member/member.service.ts#L39-L73) ## 订单创建接口 ### 接口定义 **POST /api/member/order** 该接口用于创建会员订单,支持月度和年度两种产品类型。 ### 请求参数 | 参数名 | 类型 | 必填 | 描述 | |--------|------|------|------| | Authorization | string | 是 | JWT认证令牌 | | productType | string | 是 | 产品类型,可选值:'monthly' | 'yearly' | ### 响应数据结构 | 字段 | 类型 | 描述 | |------|------|------| | code | number | 响应码,0表示成功 | | message | string | 响应消息 | | data | object | 订单信息 | ### 订单创建流程 ```mermaid sequenceDiagram participant Client as 客户端 participant Controller as 订单控制器 participant Service as 订单服务 participant Prisma as 数据库层 participant User as 用户表 participant Order as 订单表 Client->>Controller : POST /api/member/order Controller->>Controller : 验证产品类型 Controller->>Service : createOrder(userId, productType) Service->>Service : 获取价格信息 Service->>Prisma : 查询用户信息 Prisma-->>Service : 返回用户数据 Service->>Prisma : 创建订单记录 Prisma-->>Service : 返回订单信息 Service-->>Controller : 返回订单数据 Controller-->>Client : 订单创建成功 ``` **图表来源** - [member.controller.ts:32-48](file://server/src/modules/member/member.controller.ts#L32-L48) - [member.service.ts:75-100](file://server/src/modules/member/member.service.ts#L75-L100) ### 响应示例 ```json { "code": 0, "message": "订单创建成功", "data": { "orderNo": "ORDER_20260412A1B2C3", "amount": 19.9 } } ``` **章节来源** - [member.controller.ts:32-48](file://server/src/modules/member/member.controller.ts#L32-L48) - [member.service.ts:75-100](file://server/src/modules/member/member.service.ts#L75-L100) ## 支付订单接口 ### 接口定义 **POST /api/member/pay/mock** 该接口为开发环境提供模拟支付功能,用于测试支付流程。 ### 请求参数 | 参数名 | 类型 | 必填 | 描述 | |--------|------|------|------| | Authorization | string | 是 | JWT认证令牌 | | orderNo | string | 是 | 订单编号 | ### 响应数据结构 | 字段 | 类型 | 描述 | |------|------|------| | code | number | 响应码,0表示成功 | | message | string | 响应消息 | | data | object | 支付结果 | ### 支付处理流程 ```mermaid flowchart TD Start([模拟支付请求]) --> CheckEnv{"检查环境"} CheckEnv --> |生产环境| EnvError["抛出错误"] CheckEnv --> |开发环境| ValidateOrder["验证订单"] ValidateOrder --> OrderExists{"订单存在"} OrderExists --> |否| OrderError["抛出错误"] OrderExists --> |是| CheckStatus{"检查订单状态"} CheckStatus --> StatusValid{"状态有效"} StatusValid --> |否| StatusError["抛出错误"] StatusValid --> UpdateOrder["更新订单状态为已支付"] UpdateOrder --> UpdateUser["更新用户会员状态"] UpdateUser --> CalcExpire["计算会员有效期"] CalcExpire --> UpdateMember["更新会员等级和到期时间"] UpdateMember --> Success["返回成功结果"] EnvError --> End([结束]) OrderError --> End StatusError --> End Success --> End ``` **图表来源** - [member.controller.ts:50-70](file://server/src/modules/member/member.controller.ts#L50-L70) - [member.service.ts:102-155](file://server/src/modules/member/member.service.ts#L102-L155) ### 响应示例 ```json { "code": 0, "message": "支付成功", "data": { "success": true, "memberLevel": 1, "memberExpireAt": "2026-12-31T23:59:59Z" } } ``` **章节来源** - [member.controller.ts:50-70](file://server/src/modules/member/member.controller.ts#L50-L70) - [member.service.ts:102-155](file://server/src/modules/member/member.service.ts#L102-L155) ## 会员等级与权益体系 ### 等级定义 系统定义了三个会员等级,每个等级都有明确的功能权限和使用限制: ```mermaid classDiagram class MemberLevel { <> +FREE : 0 +MONTHLY : 1 +YEARLY : 2 } class MemberQuota { +number dailyLimit +number wordLimit } class Level0 { +name : "免费版" +dailyLimit : 3 +wordLimit : 5000 +features : ["每天3次生成", "每次最多5000字", "基础音色"] } class Level1 { +name : "月度会员" +dailyLimit : 20 +wordLimit : 50000 +features : ["每天20次生成", "每次最多50000字", "全部音色", "优先处理"] } class Level2 { +name : "年度会员" +dailyLimit : -1 +wordLimit : -1 +features : ["无限次生成", "无字数限制", "全部音色", "优先处理", "专属客服"] } MemberLevel --> MemberQuota : defines MemberQuota --> Level0 : configures MemberQuota --> Level1 : configures MemberQuota --> Level2 : configures ``` **图表来源** - [types/index.ts:18](file://server/src/types/index.ts#L18) - [types/index.ts:120-124](file://server/src/types/index.ts#L120-L124) ### 权益差异 | 特性 | 免费版 | 月度会员 | 年度会员 | |------|--------|----------|----------| | 每日生成次数 | 3次 | 20次 | 无限次 | | 每次生成字数限制 | 5000字 | 50000字 | 无限制 | | 音色选择 | 基础音色 | 全部音色 | 全部音色 | | 优先级处理 | ❌ | ✅ | ✅ | | 专属客服 | ❌ | ❌ | ✅ | | 价格 | ¥0/月 | ¥19.9/月 | ¥199/年 | ### 升级条件 会员升级遵循以下规则: 1. **同级续费**:现有会员可在到期前进行续费 2. **跨级升级**:可选择升级到更高等级,按差价收费 3. **自动续费**:支持设置自动续费功能 4. **有效期计算**:续费时按剩余有效期顺延计算 **章节来源** - [member.service.ts:10-37](file://server/src/modules/member/member.service.ts#L10-L37) - [types/index.ts:120-124](file://server/src/types/index.ts#L120-L124) ## 订单管理流程 ### 订单生命周期 ```mermaid stateDiagram-v2 [*] --> Pending : 创建订单 Pending --> Paid : 支付成功 Pending --> Failed : 支付失败 Pending --> Refunded : 退款处理 Paid --> Active : 会员激活 Active --> Expired : 到期 Active --> Cancelled : 取消 Expired --> [*] Cancelled --> [*] Failed --> [*] Refunded --> [*] ``` ### 订单状态流转 | 状态 | 描述 | 用途 | |------|------|------| | pending | 待支付 | 订单刚创建 | | paid | 已支付 | 支付成功,等待激活 | | failed | 支付失败 | 支付异常或取消 | | refunded | 已退款 | 退款处理完成 | ### 订单数据结构 ```mermaid erDiagram ORDER { int id PK int userId string orderNo UK string productType decimal amount string status string paymentMethod datetime paidAt datetime createdAt datetime updatedAt } USER { int id PK int memberLevel datetime memberExpireAt int dailyUsage string lastUsageDate } ORDER ||--|| USER : belongs_to ``` **图表来源** - [schema.prisma:40-61](file://server/prisma/schema.prisma#L40-L61) - [schema.prisma:10-38](file://server/prisma/schema.prisma#L10-L38) **章节来源** - [member.service.ts:75-100](file://server/src/modules/member/member.service.ts#L75-L100) - [schema.prisma:40-61](file://server/prisma/schema.prisma#L40-L61) ## 支付集成与安全 ### 支付方式支持 系统支持多种支付方式,每种支付方式都有相应的集成配置: ```mermaid graph LR subgraph "支付方式" Mock[模拟支付] Alipay[支付宝] WeChat[微信支付] end subgraph "集成特性" Mock --> Dev[开发环境] Alipay --> Production[生产环境] WeChat --> Production end subgraph "安全措施" Signature[签名验证] HTTPS[HTTPS传输] RateLimit[限流保护] Validation[参数校验] end Mock --> Signature Alipay --> Signature WeChat --> Signature ``` ### 支付回调处理 ```mermaid sequenceDiagram participant Client as 客户端 participant Alipay as 支付宝 participant Server as 支付服务器 participant Callback as 回调处理 participant Database as 数据库 Client->>Server : 创建支付订单 Server-->>Client : 返回支付链接 Client->>Alipay : 完成支付 Alipay->>Callback : 异步通知 Callback->>Callback : 验证签名 Callback->>Database : 更新订单状态 Callback-->>Alipay : 确认接收 Callback->>Database : 激活会员服务 ``` **图表来源** - [payment.controller.ts:57-95](file://server/src/modules/payment/payment.controller.ts#L57-L95) - [payment.service.ts:358-406](file://server/src/modules/payment/payment.service.ts#L358-L406) ### 安全措施 系统实施了多层次的安全保护措施: 1. **签名验证**:所有支付回调都进行数字签名验证 2. **HTTPS传输**:确保支付数据在传输过程中的安全性 3. **参数校验**:严格的输入参数验证和过滤 4. **限流保护**:防止恶意请求和攻击 5. **错误处理**:完善的异常捕获和错误处理机制 **章节来源** - [payment.controller.ts:57-95](file://server/src/modules/payment/payment.controller.ts#L57-L95) - [payment.service.ts:340-356](file://server/src/modules/payment/payment.service.ts#L340-L356) ## 数据库模型 ### 核心数据表结构 ```mermaid erDiagram User { int id PK string phone string openid string nickname string avatar int memberLevel datetime memberExpireAt int dailyUsage string lastUsageDate datetime createdAt datetime updatedAt } Order { int id PK int userId FK string orderNo UK string productType decimal amount string status string paymentMethod datetime paidAt datetime createdAt datetime updatedAt } User ||--o{ Order : places User { int id PK int memberLevel datetime memberExpireAt int dailyUsage string lastUsageDate } Order { int id PK int userId FK string orderNo UK string productType decimal amount string status datetime paidAt } ``` **图表来源** - [schema.prisma:10-38](file://server/prisma/schema.prisma#L10-L38) - [schema.prisma:40-61](file://server/prisma/schema.prisma#L40-L61) ### 数据库连接配置 系统使用Prisma ORM进行数据库操作,支持MySQL数据库连接: ```mermaid flowchart TD Init[应用启动] --> Connect[建立数据库连接] Connect --> Test[测试连接可用性] Test --> Success[连接成功] Test --> Fail[连接失败] Success --> Ready[准备就绪] Fail --> Error[抛出错误] Ready --> Operations[执行数据库操作] Operations --> Close[优雅关闭连接] ``` **图表来源** - [models/index.ts:1-15](file://server/src/models/index.ts#L1-L15) **章节来源** - [schema.prisma:10-61](file://server/prisma/schema.prisma#L10-L61) - [models/index.ts:1-15](file://server/src/models/index.ts#L1-L15) ## 性能与扩展性 ### 性能优化策略 系统采用了多项性能优化措施: 1. **连接池管理**:数据库连接池配置,减少连接开销 2. **缓存策略**:Redis缓存常用数据,提高响应速度 3. **异步处理**:支付回调异步处理,避免阻塞主线程 4. **资源复用**:SDK实例复用,减少初始化开销 ### 扩展性设计 ```mermaid graph TB subgraph "水平扩展" LoadBalancer[负载均衡器] WebServer1[Web服务器1] WebServer2[Web服务器2] WebServerN[Web服务器N] end subgraph "垂直扩展" Database[数据库集群] Cache[Redis集群] Storage[对象存储] end LoadBalancer --> WebServer1 LoadBalancer --> WebServer2 LoadBalancer --> WebServerN WebServer1 --> Database WebServer2 --> Database WebServerN --> Database WebServer1 --> Cache WebServer2 --> Cache WebServerN --> Cache ``` ## 故障排除指南 ### 常见问题及解决方案 | 问题类型 | 症状 | 可能原因 | 解决方案 | |----------|------|----------|----------| | 支付失败 | 订单状态未更新 | 支付回调未到达 | 检查回调URL配置 | | 会员未激活 | 状态仍为免费版 | 支付状态异常 | 手动同步支付状态 | | 订单重复 | 同一订单多次创建 | 并发请求导致 | 实现幂等性处理 | | 支付签名验证失败 | 回调被拒绝 | 密钥配置错误 | 检查支付密钥 | ### 调试工具 系统提供了完善的调试和监控工具: 1. **日志系统**:详细的请求和响应日志 2. **性能监控**:实时监控系统性能指标 3. **错误追踪**:Sentry集成,实时错误监控 4. **数据库监控**:Prisma查询日志 **章节来源** - [app.ts:64-68](file://server/src/app.ts#L64-L68) - [payment.controller.ts:57-95](file://server/src/modules/payment/payment.controller.ts#L57-L95) ## 总结 会员服务模块是一个功能完整、架构清晰的付费系统解决方案。通过模块化的设计,系统实现了会员权益管理、订单处理和支付集成的有机结合。 ### 核心优势 1. **完整的功能覆盖**:从权益查询到订单创建,再到支付处理形成完整闭环 2. **灵活的支付支持**:支持多种支付方式,满足不同用户需求 3. **完善的安全保障**:多层次的安全措施确保交易安全 4. **良好的扩展性**:模块化设计便于功能扩展和维护 ### 技术特点 - 基于Koa.js和TypeScript的企业级开发 - 使用Prisma ORM简化数据库操作 - 支持多种支付方式和第三方集成 - 完善的日志和监控体系 该模块为AI语音应用提供了坚实的付费功能基础,为后续的功能扩展和业务发展奠定了良好基础。