为什么需要插件
行业模块 = UM 官方出品的"80% 通用方案",覆盖主流场景。
插件 = 第三方开发的"20% 个性方案",覆盖长尾场景。
—— UM 永远做不完所有需求,必须靠插件生态。
服装行业举例:
- UM 官方:服装模块(退货拦截、AI 上新、私域管家)
- 第三方插件:
- 杭州丝绸商家:
silk-cert-plugin(丝绸认证)
- 广州牛仔商家:
colorfast-plugin(色牢度检测)
- 童装商家:
kids-age-plugin(年龄段合规)
- 汉服商家:
original-protect-plugin(原创保护)
插件分类(6 大类)
| 分类 |
说明 |
典型示例 |
| 工具插件 |
解决单一工具需求 |
图片压缩、批量打单、PDF 生成 |
| 营销插件 |
营销玩法 |
拼团、秒杀、砍价、抽奖 |
| 数据插件 |
数据分析 |
神策对接、GA4、GrowingIO |
| AI 插件 |
AI 能力 |
AI 主图、AI 视频、AI 客服训练 |
| 集成插件 |
对接外部系统 |
ERP 对接、WMS 对接、CRM 对接 |
| 主题/模板 |
前端样式 |
控制台主题、登录页模板、商品页模板 |
插件开发:5 大原则
- 单一职责:一个插件只解决一个问题
- 标准 API:只能通过 UM 公开的 Hook/API 接入,不允许改主系统
- 沙箱运行:插件代码在沙箱中执行,崩溃不影响主系统
- 声明式:插件需声明权限、依赖、数据范围,用户可见可管
- 版本化:所有插件必须支持版本管理,可升级可回滚
插件目录结构
um-plugins/
├── silk-cert-plugin/ # 插件根目录
│ ├── plugin.json # 插件清单(必填)
│ ├── README.md # 文档
│ ├── LICENSE # 许可证
│ ├── src/ # 源代码
│ │ ├── Plugin.php # 插件主类
│ │ ├── Hooks/ # Hook 监听
│ │ ├── Api/ # 暴露的 API
│ │ └── Admin/ # 后台页面
│ ├── assets/ # 前端资源
│ │ ├── icon.png # 插件图标
│ │ ├── screenshot-1.png # 截图
│ │ └── admin.js
│ ├── views/ # 后台模板
│ ├── migrations/ # 数据库变更
│ ├── tests/ # 测试用例
│ └── CHANGELOG.md # 变更日志
plugin.json 规范
{
"name": "silk-cert-plugin",
"title": "杭州丝绸认证",
"version": "1.0.0",
"description": "为丝绸商家提供权威认证标识和质检报告",
"author": {
"name": "杭州丝绸协会",
"email": "support@hz-silk.cn",
"url": "https://hz-silk.cn"
},
"license": "Commercial",
"um": {
"min_version": "1.2.0",
"max_version": "2.x"
},
"category": "tool",
"industries": ["clothing"],
"permissions": [
"user.read",
"user.write",
"order.read",
"config.write"
],
"hooks": [
"user.login.after",
"order.create.after",
"admin.menu.render"
],
"apis": [
{
"method": "GET",
"path": "/api/silk-cert/check",
"handler": "Api\\CheckController@check"
}
],
"admin_pages": [
{
"title": "丝绸认证",
"path": "silk-cert/index",
"icon": "🌸"
}
],
"pricing": {
"model": "subscription",
"price": 99,
"currency": "CNY",
"period": "month"
}
}
插件主类(Plugin.php)
<?php
namespace Plugin\SilkCert;
use UM\Plugin\BasePlugin;
class Plugin extends BasePlugin
{
/**
* 插件安装
*/
public function install(): bool
{
// 创建插件专用表
$this->migration->run('create_cert_records_table');
return true;
}
/**
* 插件激活
*/
public function activate(): bool
{
// 注册 Hook 监听
$this->hooks->on('order.create.after', [$this, 'onOrderCreate']);
return true;
}
/**
* 插件停用
*/
public function deactivate(): bool
{
$this->hooks->off('order.create.after', [$this, 'onOrderCreate']);
return true;
}
/**
* Hook 处理:订单创建后自动申请认证
*/
public function onOrderCreate($order)
{
if ($this->isSilkProduct($order['sku'])) {
$this->api->call('silk/cert/request', [
'order_id' => $order['id'],
'sku' => $order['sku']
]);
}
}
}
UM 核心 Hook 清单(开放 30+)
| 分类 |
Hook 名 |
触发时机 |
| 用户 |
user.register.before |
注册前(可拦截) |
user.register.after |
注册后 |
user.login.before |
登录前(可拦截) |
user.login.after |
登录后 |
user.logout |
登出 |
user.update.after |
用户资料更新后 |
| 订单 |
order.create.before |
下单前 |
order.create.after |
下单后 |
order.pay.after |
支付后 |
order.refund.after |
退款后 |
| 营销 |
marketing.coupon.issue |
发券时 |
marketing.campaign.start |
活动开始 |
marketing.seckill.before |
秒杀前 |
| AI |
ai.text.generate.before |
AI 文案生成前(可注入上下文) |
ai.chat.message.in |
用户消息进入 |
ai.chat.message.out |
AI 消息发出 |
| 系统 |
admin.menu.render |
后台菜单渲染 |
api.request.before |
API 请求前(可拦截) |
api.response.after |
API 响应后 |
cron.daily |
每日定时 |
完整 Hook 清单见 下方附录。
插件 API 调用
// 在插件代码中调用 UM 核心 API
$user = $this->api->user->get($userId);
$order = $this->api->order->create($data);
$this->api->ai->generate('text', [
'prompt' => '写一段丝绸产品描述',
'context' => ['brand' => '杭州丝绸']
]);
$this->api->notify->send($userId, '微信', $templateId, $data);
插件市场(UM Plugin Market)商业模式核心
市场机制
| 维度 |
规则 |
| 上架审核 |
UM 官方审核,3~5 工作日 |
| 质量要求 |
必须通过安全扫描 + 兼容性测试 |
| 定价方式 |
免费 / 一次性 / 订阅 / 按量 |
| 分润比例 |
开发者 70% / UM 平台 30% |
| 结算周期 |
每月 10 号结算 |
| 退款政策 |
7 天无理由退款(订阅按月) |
收入分润示例
某插件定价 ¥99/月
商家购买:1000 商家 × ¥99 = ¥99000/月 GMV
开发者收入:¥99000 × 70% = ¥69300/月
UM 平台收入:¥99000 × 30% = ¥29700/月
1 个爆款插件,开发者月入 7w,年入 80w+
UM 平台月入 3w,规模化后(1w 插件)月入数百万
插件分级与认证
| 等级 |
标识 |
条件 |
权益 |
| 官方 |
🟦 官方 |
UM 官方团队开发 |
最高信任 |
| 认证 |
🟩 认证 |
通过安全审计 + 100+ 商家使用 |
推荐位 |
| 热门 |
🟨 热门 |
1000+ 商家使用 |
曝光加权 |
| 普通 |
⬜ 普通 |
正常上架 |
标准曝光 |
| 测试 |
🟪 Beta |
早期版本 |
仅测试商家可见 |
插件安全与权限
3 道防线
- 声明式权限:插件必须声明所需权限,用户安装时确认
- 沙箱执行:插件在受限 PHP 命名空间运行
- 审计日志:所有插件操作记录到
um_plugin_audit 表
权限分级
| 权限 |
风险 |
用户感知 |
user.read |
低 |
需告知 |
user.write |
中 |
需二次确认 |
order.read |
低 |
需告知 |
config.write |
高 |
需管理员审批 |
data.export |
高 |
需管理员审批 + 短信验证 |
system.shell |
极高 |
默认禁止,需 UM 团队审批 |
插件开发快速上手
1. 安装开发脚手架
composer global require um/um-plugin-cli
um-plugin create my-plugin --template=basic
cd my-plugin
2. 编辑 plugin.json
{
"name": "my-plugin",
"title": "我的第一个插件",
"version": "0.1.0",
"category": "tool"
}
3. 实现主类
namespace Plugin\MyPlugin;
use UM\Plugin\BasePlugin;
class Plugin extends BasePlugin
{
public function activate()
{
$this->hooks->on('user.login.after', function($user) {
$this->logger->info("User logged in: " . $user['id']);
});
}
}
4. 本地测试
um-plugin test
um-plugin install --local
5. 打包发布
um-plugin pack
um-plugin publish --market
附录:完整 Hook 清单
用户域(6 个)
user.register.before // 注册前,可拦截
user.register.after // 注册后
user.login.before // 登录前,可拦截
user.login.after // 登录后
user.logout // 登出
user.update.before // 资料更新前
user.update.after // 资料更新后
user.password.change // 密码修改
user.delete // 用户删除
user.tag.add // 标签增加
user.tag.remove // 标签移除
user.merge // UMID 合并
订单域(8 个)
order.create.before // 下单前
order.create.after // 下单后
order.pay.before // 支付前
order.pay.after // 支付后
order.ship // 发货
order.confirm // 确认收货
order.refund.before // 退款前
order.refund.after // 退款后
order.cancel // 取消订单
order.complete // 订单完成
营销域(10 个)
marketing.coupon.issue
marketing.coupon.use
marketing.campaign.start
marketing.campaign.end
marketing.seckill.before
marketing.seckill.during
marketing.group.before
marketing.group.success
marketing.reward.give
marketing.points.change
AI 域(8 个)
ai.text.generate.before
ai.text.generate.after
ai.image.generate.before
ai.image.generate.after
ai.chat.message.in
ai.chat.message.out
ai.agent.run.before
ai.agent.run.after
系统域(10+ 个)
admin.menu.render
admin.page.render
api.request.before
api.request.after
api.response.before
api.response.after
cron.daily
cron.hourly
plugin.install
plugin.activate
plugin.deactivate
plugin.upgrade
plugin.uninstall
总计 50+ 开放 Hook,覆盖 UM 全业务流程。
插件生态飞轮
插件越多 → 商家越离不开 UM
│
↑ ↓
开发者分润高 商家效率提升
↑ ↓
更多开发者加入 ← 更多插件 ← 更多商家付费
目标:3 年内 UM Plugin Market 达到 10,000+ 插件,
头部开发者年入 100w+,
UM 平台 GMV 10 亿+/年。
为什么"积木 + 插件"是终极壁垒
| 对手 |
他们的做法 |
为什么 UM 强 |
| 有赞/微盟 |
全家桶 SaaS |
UM 是平台:插件生态覆盖长尾 |
| Taro/uni-app |
开发框架 |
UM 是运行时 + 插件 + 业务 |
| Coze/扣子 |
Bot 编辑器 |
UM Bot + 行业模块 + 插件 = 更垂直 |
| Shopify |
App Store |
UM 不只电商,是用户层 OS |
| WordPress |
插件市场 |
UM 更现代 + AI 化 + 中国本地化 |
最深护城河:插件生态一旦形成,
商家离开 UM = 失去所有插件
开发者离开 UM = 失去所有商家
UM = 平台,躺着赚钱
关键决策(已确认)
| 决策 |
已确认 |
原因 |
| 开源协议 |
核心 AGPL / 插件专有 |
核心开源 + 插件商业化 |
| 插件分润 |
70/30(开发者/UM) |
吸引头部开发者 |
| 插件市场 |
官方审核 + 沙箱 |
质量 + 安全 |
| 插件商店 |
第一年 100 插件目标 |
冷启动 + 样板 |