仰望星辰工作室

better-staridc-MNBT

Z zfhsh first commit 2 天前
1---
2title: 插件系统总览
3description: MNBT 插件系统(V1.81)总览:快速启用、目录结构、核心 API、钩子、页面与 AJAX 入口、官方示例与安全约定
4---
5
6# MNBT 插件系统(V1.81)
7
8PHP 业务插件目录。与宝塔侧 `plugins/mnbt_connector`(Python 节点代理)**无关**。
9
10| 文档 | 说明 |
11|------|------|
12| **[插件开发手册](./guide.md)** | 插件开发手册(新建、API、钩子、安全、FAQ) |
13
14完整项目说明见 [../../guide/intro.md](../../guide/intro.md)。
15
16---
17
18## 快速启用
19
201. 将插件文件夹放入 `app_plugins/{slug}/`(需 `plugin.json` + `bootstrap.php`)
212. 后台 → 系统管理 → **插件管理** → 安装 → 启用
223. **整页刷新**后台;侧栏出现「插件」分组(若注册了菜单)
234. 已有站点可执行 `update/update_v181_plugin.sql`(或首次访问自动建表)
24
25---
26
27## 目录结构
28
29```
30app_plugins/{slug}/
31 plugin.json # 必填:名称、版本等
32 bootstrap.php # 必填:注册钩子/菜单/AJAX
33 install.sql # 可选
34 uninstall.sql # 可选
35 admin/ # 可选后台页
36 user/ # 可选用户页
37 assets/ # 可选静态资源
38```
39
40---
41
42## 核心 API(摘要)
43
44| API | 说明 |
45|-----|------|
46| `mnbt_plugin_register` | 注册元信息 |
47| `mnbt_add_action` / `mnbt_do_action` | 事件 |
48| `mnbt_add_filter` / `mnbt_apply_filters` | 过滤 |
49| `mnbt_register_ajax('user'\|'admin', $gn, $cb)` | AJAX,`gn` 建议 `p_{slug}_*` |
50| `mnbt_register_page` / `mnbt_register_menu` | 页面与菜单 |
51| `mnbt_plugin_option_get/set` | 插件配置 |
52| `mnbt_plugin_path` / `mnbt_plugin_url` | 路径与资源 URL |
53| `mnbt_register_widget` | 仪表盘小部件 |
54| `mnbt_register_settings_tab` | 插件管理页快捷入口 |
55| `mnbt_http_get` / `mnbt_http_post` | 安全出站 HTTP |
56| `mnbt_register_home` | 首页接管(`/` 路径,P2) |
57| `mnbt_register_route` | 通用路由,支持路径参数(P2) |
58| `mnbt_register_payment` | 注册支付插件(P3) |
59| `mnbt_pay_settle_order` | 支付成功后统一结算订单(P3) |
60| `mnbt_pay_log` | 记录支付日志(P3) |
61| `mnbt_get_enabled_payment_methods` | 读取已启用的付款方式(P3) |
62
63完整参数与示例见 **[插件开发手册](./guide.md)**,支付系统见 **[支付插件系统](./payment.md)**。
64
65---
66
67## 钩子(摘要)
68
69| 钩子 | 时机 |
70|------|------|
71| `boot` | 插件加载后 |
72| `init.admin` / `init.user` | 已登录 |
73| `host.created` / `paused` / `unpaused` / `renewed` / `deleted` | 主机生命周期 |
74| `order.paid` | 支付成功 |
75| `cron` | `jk_monitor.php` 末尾 |
76| `menu.*` / `dashboard.*.widgets` / `settings.admin.tabs` | UI 扩展 |
77
78完整钩子一览与数据库说明见 **[钩子与数据库](./hooks.md)**。
79
80---
81
82## 页面与 AJAX 入口
83
84| 类型 | 地址 |
85|------|------|
86| 管理页 | `admin/plugin.php?p={slug}&page={page}` |
87| 用户页 | `user/plugin.php?p={slug}&page={page}` |
88| 管理 AJAX | `POST admin/ajax.php`,`gn=...` |
89| 用户 AJAX | `POST user/ajax.php`,`gn=...` |
90
91---
92
93## 官方示例
94
95| 插件 | 说明 |
96|------|------|
97| `hello_demo/` | 菜单、配置、Ping、主机/订单事件日志 |
98| `home_demo/` | P2 示例:首页接管 + 通用路由 |
99| `webhook_notify/` | Webhook 推送(URL + HMAC + 事件开关 + 测试) |
100| `epay/` | P3 示例:易支付插件(支付宝/微信/QQ 钱包,MD5 签名) |
101| `alipay_official/` | P3 示例:支付宝官方 API(PC 电脑网站支付 + 当面付扫码,RSA2 签名) |
102| `user_info/` | 用户中心插件(独立账户系统、登录/注册/资料/密码) |
103| `balance/` | 余额插件(依赖 user_info;后台余额列表、用户充值/消费日志) |
104| `hosting_shop/` | 主机商店插件(依赖 user_info + balance;套餐下单、自动开通) |
105| `domain_shop/` | 域名商店插件:二级域名售卖 + DNSPod DNS 解析 + `host.created` 钩子自动建 A 记录;接管原核心 `ymgm` 业务与 `MN_ym` 表的售卖/绑定逻辑 |
106
107各插件详细文档见 **[内置插件](./builtin/)** 目录(user_info、balance、hosting_shop、epay、alipay_official、webhook_notify、home_demo、hello_demo、shop_frontend)。
108
109Webhook 验签:请求头 `X-MNBT-Signature: sha256=<hex>`,
110`hash_hmac('sha256', raw_body, secret) === hex`。
111
112---
113
114## 安全约定
115
116- 仅管理员可安装/启用/卸载
117- 插件文件必须在 `app_plugins/{slug}/` 内
118- 配置只用 option 表,勿改 `MN_config` 结构
119- 不覆盖核心文件;不远程执行代码
120- 详见 [钩子与数据库 §9](./hooks.md#9-安全清单)