# 插件扩展面 + 支付 / 内容付费 — 功能清单

## 状态
- 对应 SPEC：`docs/specs/plugin-extension-commerce/SPEC.md`
- 最近更新：2026-08-13 03:40

## 完成项

### 核心扩展面
- [x] `Hook::collect` / `Hook::filter`
- [x] `ArticleAccess` 决策（作者/admin、密码、filter 只许变严）
- [x] `BlogController::show` 改用 ArticleAccess；密码 POST 解锁后再 resolve
- [x] 试读+购买主题模板（default；example fallback）
- [x] API show 经 ArticleAccess；响应含 `access`；受限无全文
- [x] RSS 受限文无全文
- [x] `ArticleForm` / Table / Create+Edit 挂载 filament.article.* 扩展点
- [x] `plugin.json`：`requires` / `optional` / `docs`
- [x] `PluginManager::enable` 依赖校验 + `isEnabled`
- [x] 后台插件卡片：依赖展示 + 查看说明
- [x] 使用说明按 locale 选择 `README.zh_CN.md`，Markdown 渲染为 HTML 侧栏弹层（非 Notification 纯文本）

### payment
- [x] 插件 migrations + `loadMigrationsFrom`
- [x] models：Order / OrderItem / Entitlement / PaymentTransaction
- [x] StubGateway 建单 → 确认页 → 入账 → entitlement → `order.paid`
- [x] 重复有效权益拒绝建单
- [x] Filament OrderResource + 标记已支付 + 设置/说明页（插件内注册）
- [x] 迁出/替换核心 `PaymentPluginPage` 骨架（导航隐藏）
- [x] README + lang

### paid-content
- [x] 插件骨架 + PSR-4 + `requires: larablog/payment`
- [x] `article_products` migration/model
- [x] 表单 Section 注入 + after_save 落库
- [x] 与 `read_password` 互斥校验
- [x] `article.access` 收紧 + 试读截断（渲染后 chars）
- [x] 表列「付费」标识
- [x] README + lang

### Review 修复（Bugbot 2026-08-12）
- [x] `HtmlTeaser` 恒截断，永不返回全文（含 trial ≥ 正文长度）
- [x] `article.access` 用 `tightenWith` 逐个折叠，只许变严
- [x] `PluginManager::docsPath` 限制在插件目录内（防路径穿越）
- [x] 建单/`markPaid` 事务内复核权益 + pending 单复用 + 跨单重复支付拦截
- [x] checkout 仅接受 `visible`+`published` 文章
- [x] 复用 pending 单时按当前价格重新定价（避免旧价成交）

### 文档与测试
- [x] `docs/plugins.md` 扩展点 / requires
- [x] OpenAPI + ApiV1Test 同步（破坏性说明写入 openapi）
- [x] PHPUnit：依赖、access 矩阵、Stub、重复下单、API/RSS 防泄露
- [x] 破坏性变更说明（匿名 API/RSS 不再泄密码/付费全文）

## 变更记录
| 时间 | 原因 | 变更 |
|------|------|------|
| 2026-08-12 00:17 | SPEC 定稿后初版 | 创建功能清单 |
| 2026-08-12 00:35 | 实现完成 | 勾选全部完成项 |
| 2026-08-12 01:01 | Bugbot review 5 项发现 | 新增「Review 修复」分组并全部完成 |
| 2026-08-12 01:12 | 用户确认「复用刷新为当前价」 | 补充 pending 单重新定价完成项 |
| 2026-08-13 03:40 | 使用说明英文且无排版 | 中文 README + Markdown 弹层渲染 |
