Files
gitlab-instance-0a899031_wxh5/README_KNOWLEDGE.md
2026-03-11 10:26:40 -05:00

81 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 知识付费平台说明
## Markdown 内容结构
内容统一放在 `public/markdown/` 目录,支持**文件引用**和**字符串**两种方式:
```
public/markdown/
├── README.md # 说明
├── course/ # 课程配套文章
│ ├── 1/1.md, 2.md, 3.md
│ └── 2/1.md, 2.md
└── ebook/ # 电子书章节
├── 1/1.md, 2.md, 3.md
└── 2/1.md, 2.md
```
**引用格式**(数据库 `article_markdown` / `content` 字段):
- `@file:course/1/1` → 加载 `course/1/1.md`
- `@file:ebook/2/3` → 加载 `ebook/2/3.md`
- 直接写 Markdown 字符串 → 内联渲染
**配置**`src/markdown/config.js` 中维护 `MARKDOWN` 映射,新增章节时在此添加。
## 功能概览
- **首页(游客模式)**:无需登录即可浏览电子书专栏和课程专栏
- **电子书**:支持 Markdown 内容免费章节可读VIP 章节需开通
- **课程**:视频支持本地文件或 CDN 链接,免费试看 + VIP 全看
- **VIP**:月卡/年卡/终身卡,开通后可解锁全部内容
- **暗黑模式**:右上角灯泡切换
## Supabase 数据表
在 Supabase SQL Editor 中执行 `supabase/migrations/001_knowledge_tables.sql` 创建表结构。
### 表说明
| 表名 | 说明 |
|------|------|
| wxgzh_ebooks | 电子书专栏 |
| wxgzh_ebook_chapters | 电子书章节content 存 Markdown |
| wxgzh_courses | 课程专栏 |
| wxgzh_course_chapters | 课程章节video_url 支持 /path 或 https:// |
| wxgzh_vip_users | VIP 用户user_id, expire_at |
### 添加 VIP 用户
```sql
INSERT INTO wxgzh_vip_users (user_id, expire_at)
VALUES ('用户UUID', '2026-12-31 23:59:59+00');
```
## 视频 URL 格式
- **CDN**`https://your-cdn.com/video.mp4`
- **本地**`/videos/lesson1.mp4`(放在 `public/videos/` 下)
## 支付接入
已接入 payjsapi 后端,支持 **PC / 手机浏览器 / 微信内** 三种场景,**zpay / xorpay** 两种渠道。
### 场景与渠道
| 场景 | 渠道 | 行为 |
|------|------|------|
| PC 浏览器 | zpay | 展示微信扫码二维码,轮询支付状态 |
| 手机浏览器 | zpay | 新窗口打开支付页 |
| 微信内 | xorpay默认 | 当前页表单提交,收银台支付 |
### 配置
- **wxH5**:在 `.env` 中设置 `VITE_PAYMENT_API_URL`payjsapi 地址,默认 `http://127.0.0.1:8700`
- **payjsapi**:需为 wxH5 配置 `SUPABASE_URL``SUPABASE_SERVICE_KEY`,支付成功后同步 Supabase `wxgzh_vip_users`
### 支付流程
1. 用户登录后点击「开通 VIP」→ 选择套餐 → 发起支付
2. 返回地址 `/paid`,轮询订单状态,成功后刷新 VIP 状态
3. payjsapi 异步通知写入 PocketBase + Supabase