# 支付系统说明 ## 支付方式 | 支付方式 | 状态 | 说明 | |---------|------|------| | 微信支付 | ✅ 启用 | 主要支付方式 | | 支付宝 | ❌ 禁用 | 已移除 | | USDT | ⚠️ 可选 | 默认禁用 | | PayPal | ⚠️ 可选 | 默认禁用 | ## 支付流程 ``` ┌─────────────────────────────────────────────────────┐ │ 支付流程 │ ├─────────────────────────────────────────────────────┤ │ │ │ 1. 用户点击购买 │ │ │ │ │ ▼ │ │ 2. 弹出支付弹窗 │ │ - 显示商品信息 │ │ - 选择支付方式(微信为主) │ │ │ │ │ ▼ │ │ 3. 调用后端创建订单 │ │ POST /api/payment/create │ │ │ │ │ ▼ │ │ 4. 返回支付二维码 │ │ - 微信:返回支付链接 │ │ - 生成QR码展示 │ │ │ │ │ ▼ │ │ 5. 用户扫码支付 │ │ │ │ │ ▼ │ │ 6. 前端轮询支付状态 │ │ POST /api/payment/query │ │ - 每3秒查询一次 │ │ - 最多轮询60次(3分钟) │ │ │ │ │ ┌────┴────┐ │ │ ▼ ▼ │ │ 支付成功 超时/失败 │ │ │ │ │ │ ▼ ▼ │ │ 更新订单 提示重试 │ │ 解锁内容 │ │ │ └─────────────────────────────────────────────────────┘ ``` ## 价格体系 ### 定价 | 商品 | 价格 | 说明 | |------|------|------| | 单章购买 | ¥1 | 单独购买一章 | | 基础版全书 | ¥9.9 | 包含50章基础内容 | | 最新完整版 | ¥9.9 + N | N = 新增章节数 × ¥1 | ### 分销优惠 | 原价 | 好友优惠(5%) | 实付 | |------|-------------|------| | ¥1 | ¥0.05 | ¥0.95 | | ¥9.9 | ¥0.50 | ¥9.40 | ## 支付弹窗组件 文件位置:`components/payment-modal.tsx` ### Props ```typescript interface PaymentModalProps { isOpen: boolean onClose: () => void type: "section" | "fullbook" sectionId?: string sectionTitle?: string amount: number onSuccess: () => void } ``` ### 支付状态 ```typescript type PaymentState = | "idle" // 初始状态 | "creating" // 创建订单中 | "pending" // 等待支付 | "polling" // 轮询状态 | "success" // 支付成功 | "failed" // 支付失败 ``` ## 微信支付配置 配置位置:`lib/store.ts` -> Settings.paymentMethods.wechat ```typescript wechat: { enabled: true, qrCode: string, // 收款二维码 account: string, // 微信号 websiteAppId: string, // 网站应用AppID websiteAppSecret: string, serviceAppId: string, // 服务号AppID serviceAppSecret: string, mpVerifyCode: string, // 公众号验证码 merchantId: string, // 商户号 apiKey: string, // API密钥 groupQrCode?: string // 微信群二维码 } ``` ## 订单数据结构 ```typescript interface Purchase { id: string userId: string type: "section" | "fullbook" sectionId?: string sectionTitle?: string amount: number status: "pending" | "completed" | "failed" paymentMethod?: string orderSn?: string // 订单号 tradeSn?: string // 交易号 referrerEarnings?: number // 推广者收益 createdAt: string } ``` ## 支付回调处理 ### 支付成功 1. 更新订单状态为 `completed` 2. 更新用户购买记录 3. 如有推荐人,计算分销收益 4. 刷新页面解锁内容 ### 支付失败/超时 1. 更新订单状态为 `failed` 2. 提示用户重试 3. 保留订单记录便于追踪 --- *文档版本:v2.0 | 更新日期:2026-01-18*