本文档引用的文件
订阅付费系统是一个完整的基于套餐制的付费解决方案,集成了多种支付渠道、会员等级管理和使用统计功能。该系统采用前后端分离架构,后端使用Koa.js + Prisma构建,前端使用UniApp Vue3开发。
系统核心功能包括:
该项目采用模块化组织结构,主要分为以下层次:
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
图表来源
章节来源
系统提供四个层级的套餐,每个套餐都有独特的功能组合和定价策略:
| 套餐等级 | 月付价格 | 年付价格 | Token配额 | 主要功能 |
|---|---|---|---|---|
| 免费版 | ¥0 | ¥0 | 5,000/月 | 基础音色、标准音质 |
| 基础版 | ¥9.9 | ¥99 | 10,000/月 | 全部音色、高清音质 |
| 专业版 | ¥29.9 | ¥299 | 20,000/月 | 无损音质、API访问 |
| 旗舰版 | ¥99 | ¥999 | 50,000/月 | 批量处理、团队管理 |
系统支持三种支付方式,每种都有完整的集成方案:
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[完成订阅]
图表来源
系统采用混合计费模式,结合包月配额和按量超支:
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[更新余额]
图表来源
章节来源
系统采用分层架构设计,确保各组件职责清晰、耦合度低:
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
图表来源
系统的关键特性包括:
章节来源
支付模块是整个订阅系统的核心,负责处理各种支付渠道的集成和回调处理。
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 : 支付结果
图表来源
系统实现了完善的支付回调处理机制,确保支付状态的准确性和一致性:
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
图表来源
章节来源
订阅管理模块负责处理用户的订阅生命周期,从创建到取消的完整流程。
stateDiagram-v2
[*] --> 待支付
待支付 --> 已支付 : 支付成功
待支付 --> 已取消 : 支付失败
已支付 --> 激活中 : 激活订阅
激活中 --> 已激活 : 订阅生效
已激活 --> 已过期 : 到期时间到
已激活 --> 已取消 : 用户取消
已过期 --> 待续费 : 自动续费
待续费 --> 已激活 : 续费成功
待续费 --> 已取消 : 续费失败
已取消 --> [*]
已激活 --> [*]
已过期 --> [*]
图表来源
系统实现了灵活的计费规则,支持包月配额和按量超支的混合模式:
章节来源
使用统计模块跟踪用户的Token使用情况,为计费和配额管理提供数据支持。
flowchart TD
A[用户发起请求] --> B[检查Token余额]
B --> |余额充足| C[计算消耗量]
B --> |余额不足| D[拒绝请求]
C --> E[扣除Token]
E --> F[记录使用日志]
F --> G[更新统计信息]
G --> H[返回成功]
D --> I[返回错误信息]
图表来源
章节来源
前端采用UniApp框架开发,提供了完整的用户界面和交互体验。
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
图表来源
章节来源
系统采用模块化依赖设计,各模块之间的依赖关系清晰明确:
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
图表来源
系统使用Prisma进行数据建模,实体间的关系设计合理:
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
图表来源
章节来源
系统在设计时充分考虑了性能优化,采用了多种策略来提升用户体验:
支付宝支付失败
微信支付二维码无法生成
Token过期
用户状态异常
连接失败
查询超时
章节来源
订阅付费系统是一个功能完整、架构清晰的商业化解决方案。系统的主要优势包括:
该系统为音频内容生成平台提供了坚实的商业基础,能够有效支撑业务的持续发展和用户增长。
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 - 支付宝应用IDALIPAY_PRIVATE_KEY - 支付宝私钥WECHAT_APP_ID - 微信应用IDWECHAT_MCH_ID - 微信商户IDAUTH_ENABLED - 是否启用认证DATABASE_URL - MySQL连接字符串