
简介这款易优第三方商家会员变商家商城插件面向易优CMS电商平台运营者及PHP开发者用于将普通会员升级为入驻商家解决平台多商户管理、商品发布和订单处理等需求。压缩包共包含526个文件以JS、CSS、PNG、HTM为主辅以GIF、PHP、SQL及字体文件整体大小约7.47MB结构清晰便于部署与定制。已有135人学习/下载对于需要快速搭建多商家商城的中小平台较有参考价值。包内application目录承载核心业务逻辑与控制器、模型template目录提供商家后台及商品展示模板weapp目录则支持微信小程序端同步管理可帮助开发者完成会员转商家、资质审核、商品上架、订单处理及移动端适配等完整流程适合作为二次开发基础或功能参考。1. 易优第三方商家插件让普通会员直接变身店铺掌柜在易优CMS里跑一个单商家商城不难但要做成多商家平台一般都得改角色、加表、动权限一套下去少说两三天。这个第三方商家插件解决了最头疼的一环把注册会员变成商家前台申请、后台审核审核通过后自动获得商家中心能发商品、管订单、走结算。我亲测过装上就能用省掉找开发重复造轮子的时间。适合已经在用易优、又不想换系统的站长也适合外包交付后需要快速给客户加多商家能力的开发者。下面把原理、安装、踩坑都过一遍。2. 会员变商家的核心逻辑角色切换与权限分配2.1 插件的角色模型从会员表到商家表的映射易优默认的users表存着所有会员插件并没有去破坏这套表结构而是新增了一张商家扩展表一般叫ey_shop或ey_merchant通过user_id和 users 表关联。转换流程是这样前台会员提交商家入驻申请时插件向商家表插入一条记录状态为待审核管理员在后台通过后再把 users 表里对应用户的user_type字段改成 2或者新增字段 identity 标识商家。这里的关键是 user_type 不能乱改因为系统很多地方会根据它判断用户能不能登录后台、能不能发文章商品等。如果你拿到的插件包里没看到独立的商家表也别急有的版本是把商家信息直接存在 users 表的扩展字段里。判断方法是打开后台的商家管理如果能看到入驻时间、店铺名称、主营类目几个字段说明走的是扩展字段方案要是商家列表和会员列表分开管理那就是独立表方案。两种方案都能跑但独立表方案后期做多商家数据统计时更清晰我一般优先选独立表版本。2.2 商家后台的菜单权限是怎么挂上去的易优后台的菜单权限存在auth_rule表里插件安装时会自动插入一批商家中心菜单的规则记录。比如“商家中心-商品列表”对应的 rule 值通常是shop/goods/index。前台用户登录后系统先判断用户的商家状态再加载对应的菜单树。如果你发现会员已经是商家身份了但前台商家中心里空空如也八成是auth_rule表里没有匹配的规则或者规则状态没开启。这里有个细节容易踩商家菜单的父级 ID 一定要挂在某个固定的顶级菜单下否则菜单会被系统当作孤立节点直接丢弃。我处理过一家客户的插件安装后商家中心只有一级菜单点进去是空白排查发现是auth_rule里的 pid 字段没有指向顶级节点导致路由无法解析。遇到这种情况直接修改数据库里对应记录的 pid 为商城主菜单的 ID 就行不用动代码。2.3 数据库变更需要新增哪些字段和表装上插件后数据库会新增或修改一些内容。如果你是接手别人项目先跑一下 SQL 对比-- 检查商家表是否存在 SHOW TABLES LIKE ey_shop%; -- 典型的商家表结构不同插件略有差异 CREATE TABLE ey_shop ( id int(11) NOT NULL AUTO_INCREMENT, user_id int(11) NOT NULL COMMENT 关联会员ID, shop_name varchar(100) NOT NULL COMMENT 店铺名称, status tinyint(1) DEFAULT 0 COMMENT 0待审核 1正常 2拒绝, apply_time int(11) DEFAULT 0 COMMENT 申请时间, PRIMARY KEY (id), KEY user_id (user_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这段 SQL 不是让你手动去执行而是用来理解插件底层结构。很多插件自带安装脚本后台安装时会自动创建。如果你的数据库前缀不是 ey_记得把表名前缀改成实际前缀不然插件运行时会报“表不存在”。另外建议把 SQL 放进插件的 install 目录这样下次换环境部署时可以直接用后台安装功能初始化。除了商家表一般还会给 users 表加一个字段比如is_shop或shop_status。这个字段用来快速判断用户是否有商家身份避免每次都要 JOIN 商家表查询。字段不要乱起名也不要改成和系统已有字段冲突的名字否则会导致用户更新资料时 SQL 报错。3. 安装与部署从上传插件包到前台注册开店3.1 环境确认版本兼容和 PHP 扩展检查安装前先确认你的易优版本。这个第三方商家插件是围绕易优的会员体系和路由规则开发的原作者一般会声明适用版本范围。我拿到的版本适配的是 ThinkPHP 5.0 内核的易优 1.5.x 系列如果你的站点已经升级到 2.x先看插件文件夹里有没有application、router等目录有的话大概率是覆盖式安装需要严格比对文件差异。PHP 版本建议 7.1 以上因为插件里可能用到匿名函数、空合并运算符等语法PHP 5.6 会直接白屏。另外确认fileinfo扩展已开启这个影响商品图片上传的 mime 校验。可以用下面的命令检查php -m | grep fileinfo php -r echo PHP_VERSION;第一行有输出说明 fileinfo 没问题第二行看版本号低于 7.1 就得先升级 PHP 再装插件。很多新手上来就传插件结果后台安装按钮点了没反应多半是 PHP 版本太低导致语法错误页面显示 500。3.2 安装步骤上传、解压、后台启用常见的插件包结构是application/、public/、sql/三个目录。我一般的做法是先把后台切到开发者模式如果易优后台有调试开关然后用 FTP 或宝塔文件管理整包上传到站点根目录再后台找到“易优插件管理”或“应用中心”看到这个插件后点击安装。# 假设你在站点根目录以宝塔或命令行方式解压 unzip shop_plugin.zip -d . chown -R www:www application public sql # 按你实际web用户调整解压后要立刻改权限否则插件创建缓存目录和日志文件时会失败表现就是安装成功但前台访问商家中心打不开。安装完成后后台菜单里会出现“商家管理”或“店铺管理”点击能看到申请表列表说明插件已挂载成功。3.3 参数配置审核开关、佣金比例、提现门槛每个插件在后台都会有几个核心配置项我列一份常见的参数表参数名默认值作用说明商家审核开关开启会员申请后需要管理员手动审核才变成商家商品审核开关关闭商家发布的商品是否需要平台二次审核平台佣金比例5订单成交后平台按销售额比例抽成单位是百分比提现最低金额100商家累计可提现余额达到这个值才能申请提现商家协议页空前台申请开店时展示的入驻协议内容支持 HTML如果你做的是二手平台或小规模内购建议把商品审核开启避免商家乱发违规品。佣金比例别一上来就设太高不少商家会因为算不清账直接跑路我一般推荐 3–5 起手跑顺了再加。3.4 验证安装走通一个会员开店流程装完以后不要只盯着后台看菜单一定要从前台走一遍完整流程。注册一个全新会员然后在用户中心找到“成为商家”入口填写店铺名称、主营类目、上传营业执照如果开了资质选项提交申请后去后台通过审核再用同一个账号刷新前台用户中心看是否出现“商家中心”菜单。这个流程要是卡住十有八九是环节配置问题。比如审核通过后没有跳转检查用户中心模板里是否引用了商家的入口链接又比如提交申请时报“店铺名称已存在”但明明没有同名店铺那可能是插件在查询数据库时没有过滤 status-1 的已拒绝记录需要改代码或者清理测试数据。4. 实战运营商品发布、订单流转与结算4.1 商家发布商品流程及数据表写入商家中心里的商品发布功能本质上是往商品表goods里插入数据同时插入商家 ID用于区分商品归属。发布页面通常包含基本信息、图片、价格库存、详情描述四块。保存时调用的控制器一般是shop/goods/insert核心写入逻辑类似$goods [ user_id $this-user_id, // 从session取当前商家用户ID goods_name input(goods_name), shop_price input(shop_price), stock input(stock), status $this-shop_config[goods_verify] 1 ? 0 : 1, ]; Db::name(goods)-insert($goods);注意这里的user_id存的是商家对应的会员 ID不是商家表的主键。因为前台下单时系统会根据商品关联的用户 ID 去计算订单归属如果存的是商家表 ID后面订单详情里查不到会员信息会导致发货通知发送失败。我建议你在二次开发时给商品表加一个shop_id字段冗余商家店铺 ID方便列表页展示店铺名称但归属判断仍以user_id为准。4.2 用户下单后订单状态如何推送给商家用户在前台购买商家商品时订单表order里会写入seller_id字段表示这笔订单属于哪个商家。下单成功后插件一般通过两种方式通知商家一种是站内消息写入message表一种是邮件或短信需要额外配置短信接口。这里最容易出问题的是“支付成功”回调。易优原生支付回调里通常只会更新订单状态不会主动去标记商家待发货。所以第三方插件一般会在回调逻辑里追加一段处理支付成功时把订单的send_status改为 0待发货并向商家中心发送待办提醒。如果你发现用户付了款商家后台却看不到订单基本就是回调代码没覆盖到检查application/pay目录下对应回调控制器是否引入了插件的钩子方法。订单流转状态建议用整数状态机管理0 待付款、1 待发货、2 待收货、3 已完成、4 退款/售后。插件事务逻辑都围绕这几个状态推进别自己加一个状态值容易和插件自带的对账脚本冲突。4.3 结算与提现平台抽成怎么算结算模块是这类插件最容易被吐槽的部分。以我测过的这个插件为例它的结算逻辑是订单确认收货后把实付金额按照佣金比例计算平台抽成剩下的进入商家的可提现余额。-- 计算某订单的佣金 SELECT order_id, order_amount, ROUND(order_amount * 佣金比例 / 100, 2) AS commission, order_amount - ROUND(order_amount * 佣金比例 / 100, 2) AS seller_income FROM ey_order WHERE order_id 1001;这段 SQL 只是用来核对数据用的实际插件内部是用 PHP 处理的。但你可以通过它来验证佣金参数是否生效。如果计算出的商家收入是负数或者和前台展示的店铺余额对不上多半是订单金额里包含了运费而运费也被抽成了。正常的方案是抽成只算商品总金额运费全额归商家。你要在后台配置里确认“抽成基数是否含运费”这个选项多数插件默认含运费需要手动改成不含。提现流程一般是商家在前台发起提现申请平台后台审核后线下打款然后把状态改成已打款。这个环节没有自动接口别指望插件帮你对接微信支付宝转账它只做记录和状态管理。建议每笔提现生成一个提现单号后台审核时核对该单号对应的订单明细防止刷单套现。5. 避坑指南亲测中遇到的五个典型问题5.1 现象后台插件列表里看不到安装按钮插件上传到application/plugins目录后后台插件管理页面一片空白没有出现新插件。原因是部分插件包的目录结构不符合易优的插件命名规范比如插件标识符必须在config/plugin.php或plugin_info.php里声明。解决方法是查看插件根目录有没有plugin_info.php并检查文件里的name字段是否和目录名一致。5.2 现象会员审核通过后在用户中心点“商家中心”报 404原因auth_rule里菜单规则对应的控制器不存在或者路由缓存没更新。解决步骤后台清除缓存如果还不行就去application/shop/controller目录确认 IndexController 是否存在。有的插件把商家中心控制器放在application/seller/controller下但菜单 rules 写成了shop/index需要修改规则或重命名控制器。5.3 现象商品图片上传时提示“文件类型不允许”原因后台的上传配置里没有给商家角色分配图片上传权限或者fileinfo扩展未开启。解决到易忧后台“系统设置-上传配置”中把允许的扩展名加上 jpg、png、gif并确认 PHP 已开启 fileinfo。如果你改完还是报错看下 public 目录有没有写入权限有的环境上传目录是uploads权限为 755 会导致无法写入。5.4 现象订单确认收货后商家余额没有增加原因结算逻辑写在订单发布事件里但确认收货时没有触发该事件。解决检查订单控制器中确认收货的方法是否调用了插件提供的settleOrder($order_id)函数。如果确实调用了就在数据库里看shop_money_log表有没有记录没有说明事务回滚了翻一下 PHP 日志看是不是 SQL 里某个字段名写错导致整条更新失败。5.5 现象商家中心前台模板样式错乱或加载不出 JS原因插件的前台模板使用了自己的 CSS/JS 文件但没有按照易优的模板目录规范放置。解决把public/shop目录复制到当前模板所在的public/template目录下并在模板头部手动引入。别直接改全局 header因为会影响普通会员访问用户中心最好用条件判断加载。6. 进阶二次开发常用的三个改造点6.1 自定义商家审核通知插件默认只在站内消息里通知用户审核结果如果你想同时发送邮件或短信需要改application/shop/controller/ShopController.php里的audit方法。在审核通过的地方加上邮件发送函数我用的是易优自带的邮箱类if ($status 1) { $user Db::name(users)-where(user_id, $userId)-find(); send_email($user[email], 开店审核通过, 恭喜你的店铺已开通); }注意邮件文案别写死最好从语言包读取避免后期改市场话术时还要翻代码。6.2 给商家中心添加自定义菜单商家中心的菜单在auth_rule表中新增一个菜单只需要插入一条记录。比如加一个“商家公告”功能INSERT INTO ey_auth_rule (pid, name, title, module, status) VALUES (商家主菜单ID, shop/notice/index, 商家公告, shop, 1);插入后记得清一下后台缓存否则菜单不会立刻显示。如果你还要限制只有部分商家能看到这个菜单需要写一个权限判断插件在模板里做if判断这属于定制功能了。6.3 结算脚本的定时任务化插件默认是订单确认收货时实时结算但如果平台单量很大实时计算会给数据库增加压力。我改成每天凌晨跑一次批量结算脚本你可以在宝塔 cron 里添加任务php /www/wwwroot/你的站点/addons/shop/cron/settle.php结算脚本会扫描昨天之前确认收货且未结算的订单逐单计算佣金并写入商家余额。加上日志记录方便对账。从那以后我每次部署这类插件都会先把结算逻辑梳理一遍看它是实时还是定时再决定要不要加队列免得后续大促的时候数据库卡死。易优类似的角色类插件不少但真正能直接跑通、不折腾的第三方商家插件不多希望这篇笔记能帮到你少走点弯路。本文还有配套的精品资源点击获取