# 知识付费平台说明 ## 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