⚠️ 本页面为历史归档文档,最新文档请访问 /docs

🔌 UM 插件开发规范 v1.2

← API 文档 🎯 战略 🧩 策略 👕 服装

为什么需要插件

行业模块 = UM 官方出品的"80% 通用方案",覆盖主流场景。
插件 = 第三方开发的"20% 个性方案",覆盖长尾场景。
—— UM 永远做不完所有需求,必须靠插件生态。

服装行业举例:

插件分类(6 大类)

分类 说明 典型示例
工具插件 解决单一工具需求 图片压缩、批量打单、PDF 生成
营销插件 营销玩法 拼团、秒杀、砍价、抽奖
数据插件 数据分析 神策对接、GA4、GrowingIO
AI 插件 AI 能力 AI 主图、AI 视频、AI 客服训练
集成插件 对接外部系统 ERP 对接、WMS 对接、CRM 对接
主题/模板 前端样式 控制台主题、登录页模板、商品页模板

插件开发:5 大原则

  1. 单一职责:一个插件只解决一个问题
  2. 标准 API:只能通过 UM 公开的 Hook/API 接入,不允许改主系统
  3. 沙箱运行:插件代码在沙箱中执行,崩溃不影响主系统
  4. 声明式:插件需声明权限、依赖、数据范围,用户可见可管
  5. 版本化:所有插件必须支持版本管理,可升级可回滚

插件目录结构

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 道防线

  1. 声明式权限:插件必须声明所需权限,用户安装时确认
  2. 沙箱执行:插件在受限 PHP 命名空间运行
  3. 审计日志:所有插件操作记录到 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 插件目标 冷启动 + 样板