一句话定位:ShopWind 是广西南宁领众网络科技有限公司用 Yii2 写的多商户 B2B2C / O2O 商城,PC 端与后台在 Gitee 开源,H5、小程序、APP 属于商业版增值项。它最需要你先看清的不是功能表,而是授权口径:根目录 LICENSE 是 Apache-2.0 全文,可每个 PHP 文件开头写的却是「This is not free software,商用需购买授权」——两句话互相矛盾,商用前必须书面确认。
| 项 | 值 |
|---|---|
| 仓库地址 | https://gitee.com/shopwind/yii2-shopwind |
| 项目定位 | 基于 Yii2 的多商户电商系统标准版(平台 + 商家 + 买家三角色) |
| 运营主体 | 广西南宁领众网络科技有限公司(2018 年注册商标与软著) |
| 开源协议 | 根目录 LICENSE 为 Apache-2.0;源码文件头声明「非自由软件、商用需授权」;官网另有《开源协议》 |
| 服务端环境 | PHP 7.2.5 ~ 7.4(文档明确不支持 PHP 8)、MySQL 5.5 ~ 5.7、Redis |
| 后端框架 | Yii2 2.0.49.4(composer.lock),advanced 模板四应用结构 |
| 前端形态 | PC 端 Vue 3 + Vite + Element Plus 单页;视图层另有 Smarty 渲染 |
| 数据表 | 83 张,统一前缀 swd_ |
| 仓库体量 | 9817 个文件、5732 个 PHP 文件,全量 398 MB(vendor 目录 134 MB 已入库) |
| 仓库状态 | 1 个分支 master、12 个标签(最新 V5.0正式版)、447 次提交,最后提交 2026-11-01 |
| 社区热度 | Gitee 10.3K Star / 1K Fork / 1.8K Watch / 21 Open Issues / 1 PR(2026-11-10 查询) |
| 语言构成 | JavaScript 37.8% / PHP 36.4% / HTML 14.6% / Vue 8.6% / CSS 2.6% |
| 文档日期 | 2026-11-10 |
1. 项目是什么
它是「一个平台、多个商家、一群买家」的三端商城,不是一个单店网店程序。 装好之后你会看到三个后台和一个前台:平台方管全局(商家审核、类目、营销、结算),商家管自己的店(商品、订单、发货、售后),买家在前台下单。这个三角色结构决定了它的数据表、权限和订单流程都比单商户系统复杂一档。
三个入口的实际分工:
| 角色 | 入口 | 主要动作 |
|---|---|---|
| 平台方 | /admin | 商家入驻审核、类目品牌、营销插件、资金与提现、报表 |
| 商家 | /seller | 开店、上架商品、处理订单、发货、退款、店铺装修 |
| 买家 | 站点根路径与 /h5 | 浏览、加购、下单、支付、评价、售后 |
先认清三点,后面才不会预期错位:
- 开源的边界是 PC 端加后台。 README 原话:v4.x、v5.x 商业版包含 PC、H5、微商城、APP、微信小程序、头条小程序,「其中 PC 端为开源免费项目,移动端为增值项目」。仓库里
public/h5只是打好的静态产物(4.4 MB),没有 UNIAPP 源码。 - 它不是一份「框架骨架」,而是一套成品系统。 83 张表、5732 个 PHP 文件、35 个后台控制器、42 个 API 控制器,改造成本主要在读懂既有约定,而不是从零搭。
- 它是「插件化」路线。 营销、支付、短信、登录、上传、地图都放在
common/plugins下按基类扩展,官方主张「不需要的功能不塞进内核」,这一点在国产商城程序里算克制。
2. 核心特性
| 特性 | 说明 | 备注 |
|---|---|---|
| 多商户入驻 | 商家申请、平台审核、独立店铺与结算 | B2B2C 的基本盘 |
| 商品体系 | 商品、SKU 规格、属性、图集、品牌、类目、商品咨询 | 表结构齐全 |
| 订单流程 | 下单、支付、发货、收货、退款、订单日志 | 含货到付款与运费模板 |
| 支付插件 | 支付宝、微信支付、货到付款、余额支付 | common/plugins/payment |
| 营销插件 | 优惠券、拼团、限购秒杀、满减、满包邮、搭配购、积分、充值赠送、三级分销、专享价、现金卡 | 11 个,装在 plugins/promote |
| 资金账户 | 充值、提现、保证金、余额支付、资金流水 | 平台与商家两套账 |
| 三级分销 | 分销商、分销商品、分销订单、佣金设置 | 国产商城常见配置 |
| 页面 DIY | 可视化模板编辑、页面布局数据存表 | public/data/pagediy |
| IM 客服 | 自带 webim 与消息表 | 需配合长连接或轮询 |
| 微信能力 | 自定义菜单、自动回复、公众号设置 | WeixinController |
| 短信 | 阿里大于、短信中国两套适配 | 模板与发送日志入库 |
| 物流查询 | 快递 100 适配 | plugins/express/kuaidi100 |
| 第三方登录 | 支付宝、QQ、微信小程序 | plugins/connect |
| 报表 | 销售、商品、会员统计 | ReportController |
3. 技术架构
整体结构:Yii2 advanced 模板的典型四应用布局——backend(平台后台)、frontend(前台与 API,内部再分 home / api / mob)、console(命令行与队列)、common(模型、组件、插件、RBAC)。五个 web 入口都在 public 下,各自加载同一套 common/config 再叠加自己的配置。
| 层 | 技术 | 实际取值 |
|---|---|---|
| 框架 | Yii2 | 2.0.49.4(composer.lock 锁定) |
| 应用模板 | advanced | backend / common / console / frontend |
| PHP 要求 | 文档口径 | 7.2.5 ~ 7.4,不支持 PHP 8 |
| 视图 | Smarty | yii\smarty\ViewRenderer,模板后缀 .html |
| 路由 | urlManager | 开启美化 URL,统一 .html 后缀 |
| 缓存 | FileCache(默认) | 另配 Redis 组件(localhost:6379、db 0) |
| 购物车 | 自定义组件 | common\components\cart\Cart,存储走 DbSessionStorage |
| 队列 | yii2-queue | file 驱动,路径 @console/runtime/queue |
| 权限 | RBAC | yii\rbac\PhpManager,规则在 common/rbac 三个 PHP 文件 |
| 前端 | Vue 3 | vue 3.2、vite 2.9、element-plus 2.1、axios、vue-router 4 |
| 前端工程 | 独立目录 | template/pc,构建产物输出到 public/pc |
| 依赖源 | 阿里云镜像 | composer.json 里 repositories.packagist 指向 mirrors.aliyun.com |
插件机制是这套系统最值得看的设计。common/plugins 下先定义 12 个基类(支付、短信、促销、物流、登录、上传、地图、编辑器、取数、本地化、其他),再按类型建子目录:
| 插件类型 | 目录 | 内置实现 |
|---|---|---|
| 支付 | payment | alipay、wxpay、cod、deposit |
| 营销 | promote | cashcard、coupon、distribute、exclusive、fullfree、fullprefer、integral、limitbuy、mealbuy、rechargegive、teambuy |
| 短信 | sms | alidayu、smschinese |
| 登录 | connect | alipay、qq、weixinapp |
| 物流 | express | kuaidi100 |
| 上传 | uploader | webuploader |
几个关键取舍:
- 前台是「薄 Yii + 厚 Vue」:
frontend/home只有 6 个控制器(Default、Site、Diy、Delivery、Weixin、Crontab),public/index.php还配了catchAll到default/index,实际页面渲染交给public/pc的 Vue 单页,数据走/api。 - 视图层同时存在 Smarty 与 Vue:老页面与后台用 Smarty,PC 前台用 Vue,维护时要分清改哪一层。
- 队列用文件驱动:
yii2-queue的 file 驱动不需要额外中间件,但任务落在单机磁盘上,多机部署会各跑各的、任务不共享。 - RBAC 用 PHP 文件而不是数据库:权限项写在
common/rbac/items.php,改权限要改代码,适合固定角色,不适合频繁自定义角色的运营团队。
4. 目录结构
| 路径 | 用途 |
|---|---|
shopwind/ | 服务端源码根目录(上传到站点后作为程序目录) |
shopwind/index.php | 仓库根的这个文件是 HTML 说明页,不是入口 |
shopwind/public/index.php | 前台入口,合并 common + frontend/home 配置 |
shopwind/public/admin/index.php | 平台后台入口 |
shopwind/public/mob/index.php | 移动端(旧)入口 |
shopwind/public/pc/ | Vue 3 前台构建产物(index.html + assets) |
shopwind/public/h5/ | H5 构建产物(静态资源,无源码) |
shopwind/public/api/ | API 入口 |
shopwind/public/install/ | 安装程序与 structure.sql、initdata.sql |
shopwind/public/data/ | 运行期数据:config.php、setting.php、安装锁、DIY 页面 |
shopwind/backend/ | 平台后台:35 个控制器、视图、RBAC 相关模型 |
shopwind/frontend/home/ | 前台 Yii 应用(6 个控制器) |
shopwind/frontend/api/ | API 应用(42 个控制器) |
shopwind/frontend/mob/ | 移动端 Yii 应用 |
shopwind/common/models/ | 83 个 ActiveRecord 模型 |
shopwind/common/business/ | 订单、支付、配送的业务基类与子类型 |
shopwind/common/components/ | cart(购物车)、queue |
shopwind/common/library/ | 插件加载、设置、消息、分页、树、微信等工具 |
shopwind/common/plugins/ | 12 类插件基类与内置实现 |
shopwind/common/rbac/ | RBAC 项、分配、规则(PHP 文件) |
shopwind/console/ | 命令行入口 yii、队列消费、定时任务 |
shopwind/install/ | 安装控制器、structure.sql(83 张表)、initdata.sql(演示数据) |
shopwind/vendor/ | 依赖已随仓库提交(134 MB),另有 vendor.zip |
template/pc/ | PC 前端源码:src/pages、src/api、router、vite.config.js |
template/pc/env/ | 前端环境配置,升级时官方要求保留 |
安装必读.md、升级方法.md | 部署与升级说明 |
一个容易被忽略的事实:vendor 目录和 vendor.zip 都进了仓库。好处是下载即跑、不用配 composer 镜像;代价是 398 MB 的仓库、依赖版本锁死在提交里、composer update 可能直接覆盖作者改过的第三方代码。
5. 快速上手
前置条件
PHP 7.2 ~ 7.4(不要用 PHP 8)、MySQL 5.5 ~ 5.7、Redis、fileinfo 扩展,并关闭 open_basedir(安装必读明确要求,否则安装器读写受限)。
第一步:放源码、定运行目录
把仓库里 shopwind 文件夹的内容上传到站点目录,运行目录设为 public。用宝塔的话就是建站后进「网站目录」把运行目录改成 /public,再关掉防跨站攻击。
cd /www/wwwroot/你的站点目录
chown -R www:www .
chmod -R 755 public/data
chmod -R 777 runtime backend/runtime frontend/home/runtime frontend/api/runtime第二步:配伪静态
Nginx 下最少要有这两段:H5 交给静态文件,其余交给入口。
location /h5 {
try_files $uri $uri/ /h5/index.html;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}admin、api、mob、install 这几个子目录各自有 index.php,仓库里同时给了 nginx.rewrite、apache.rewrite、iis.rewrite 三个现成文件,直接对照抄即可。
第三步:跑安装器
浏览器打开 你的域名/install,按提示填数据库信息,安装器会导入 structure.sql 建 83 张表、可选导入演示数据。装完提示两个地址:
- 后台:
你的域名/admin - H5:
你的域名/h5
环境自检页在 你的域名/install/requirements.php。
第四步:装完先做三件事
# 1. 关掉调试模式(三个入口都要看)
grep -n 'YII_DEBUG' public/index.php public/admin/index.php public/mob/index.php
# 2. 删掉或改名安装目录
mv public/install public/install.bak
# 3. 启动队列消费(异步任务依赖它)
php console/yii queue/listen队列不启动时,短信、模板消息这类异步任务会一直躺在 console/runtime/queue 里不执行,这是部署后最常见的「功能没反应」原因。
第五步:清演示数据
后台 → 插件 → 其他工具 → 安装「一键清除」插件 → 执行「一键清除数据」或「重置系统」。别手动删表,83 张表之间的外键与初始配置很容易漏。
6. 功能模块清单
| 模块 | 能做什么 | 对应入口 |
|---|---|---|
| 商家管理 | 入驻审核、店铺等级、店铺结算 | StoreController、SgradeController |
| 商品管理 | 商品、规格、属性、图集、品牌、类目 | GoodsController、GoodspropController、BrandController |
| 订单管理 | 订单查询、发货、备注、订单日志 | OrderController |
| 退款售后 | 退款申请、退款留言、退款审核 | RefundController |
| 营销中心 | 11 个促销插件的安装与配置 | PromoteController、PluginController |
| 优惠券 | 券模板、券号、发放与核销 | CouponModel、CouponsnModel |
| 拼团 / 秒杀 | 团购活动、限时抢购 | TeambuyModel、LimitbuyModel |
| 分销 | 分销商、分销商品、佣金与订单 | DistributeController |
| 资金 | 充值、提现、保证金、余额流水 | DepositController、RechargeController |
| 积分 | 积分设置、积分商品、积分日志 | IntegralController |
| 会员 | 会员、等级、收货地址、收藏 | UserController、AddressModel |
| 客服 | IM 会话与消息 | WebimModel |
| 微信 | 菜单、自动回复、公众号设置 | WeixinController |
| 模板 DIY | 页面布局与可视化编辑 | TemplateController、DiyController |
| 应用市场 | 商业应用购买、续费记录 | AppmarketController |
| 报表 | 销售、商品、会员统计 | ReportController |
| 系统设置 | 站点参数、地区、运费模板、支付与短信 | SettingController、RegionController |
| 数据库工具 | 备份、恢复、优化 | DbController |
API 侧另有 42 个控制器(购物车、结算、地址、优惠券、拼团、分销、余额、货到付款等),是移动端与 PC Vue 前台共用的接口层。
7. 版本与授权
| 项 | 实际情况 |
|---|---|
| 版本 | 12 个 Git 标签,最新 V5.0正式版,往上依次 V4.8、V4.7、V4.5、V3.4.4 … V3.3.1 |
| 分支 | 只有 master 一个 |
| 提交 | 447 次,最后一次 2026-11-01(提交信息「修复已知问题」) |
| 根目录 LICENSE | Apache-2.0 全文,原样未填版权人 |
| 源码文件头 | This is not free software. Do not use it for commercial purposes. If you need commercial operation, please contact us to purchase a license. |
| README 口径 | 标准版可免费商用、可二次开发,但须保留 PHP 文件头部版权、不得包装成自研产品 |
| 官网另有 | 《开源协议》页面 shopwind.net/license/,README 让使用者遵守它 |
这三套说法必须放在一起看,因为它直接决定你能不能商用:
- LICENSE 文件是 Apache-2.0,按这份文本,你可以商用、闭源修改、对外分发,只需保留声明。
- 每个 PHP 文件头写的是相反的:非自由软件、商用需购买授权。
- README 与官网《开源协议》是第三种口径:标准版免费商用,但要保留版权头、不得宣称自研。
实践中,法院与客户都更可能看文件头的版权声明和官网协议,而不是仓库里那份没人填署名的 Apache 文本。结论:把它当「可免费试用的源码」而不是「明确 Apache-2.0 授权的软件」;商用前向官方要一份书面授权说明,并保留全部版权头。
8. 商业模式说明
这是典型的「开源标准版引流 + 商业版与增值服务收费」结构,只是边界划得比同类更靠前:
| 产品线 | 内容 | 性质 |
|---|---|---|
| 标准版 | PC 端 + 平台后台 + API,Gitee 开源 | 免费 |
| 企业版(V3 演示站) | 快递发货为主的完整商城 | 付费 |
| 旗舰版(V4 演示站) | 多商户、社区团购自提 | 付费 |
| 高级版(V5 演示站) | 同城配送(达达)、类外卖风格 | 付费 |
| 社区团购版 | 团长、自提、扫码核销 | 付费 |
| 移动端 | APP(Android / iOS)、微信小程序、头条小程序 | 增值项 |
| 增值服务 | 定制开发、运营维护、模板与插件 | 付费 |
仓库里能直接看到这套商业化的技术痕迹:swd_appmarket(应用市场)、swd_appbuylog(应用购买记录)、swd_apprenewal(应用续费)三张表,以及后台的 AppmarketController。也就是说插件与应用是可以按年收费的,开源的是内核,生态位留给商业应用。
官方在 README 里的说法是「商业版是公司主要收入来源,也是确保能持续运营开源项目的保障」,并称目标是把 ShopWind 做成「国内版的 WordPress」。这类表述属于官方宣传口径,是否成立要看版本迭代与商业版交付,不能当客观事实。
9. 生态与周边
| 项目 / 资源 | 作用 | 地址 |
|---|---|---|
| 官网 | 产品、报价、模板与插件 | shopwind.net |
| 开发文档 | 二次开发、插件开发说明 | developer.shopwind.net |
| API 文档 | 接口清单与调试 | ojrjoz6p7z.k.topthink.com/@shopwind/ |
| 论坛 | 安装教程、常见问题、交流 | shopwind.net/forum |
| 标准版演示 | 与 Gitee 版本对应的在线站 | test.shopwind.net |
| 企业版演示 | 商业版,快递发货 | v3.shopwind.net |
| 旗舰版演示 | 商业版,多商户 + 自提 | v4.shopwind.net |
| 高级版演示 | 商业版,同城配送 | pro.shopwind.net |
| 社区团购演示 | 商业版,团长核销 | cgb.shopwind.net |
| Yii 中国 | 框架社区与中文文档 | yiichina.com |
| 依赖生态 | composer 包:yii2-queue、yii2-redis、yii2-imagine、wechatpay、阿里云 OSS、七牛、2amigos/qrcode、HTMLPurifier | packagist 阿里云镜像 |
生态上要说清楚:没有官方 Docker 镜像、没有 Helm、没有公开的 issue 讨论文化(21 个 Open Issues、1 个 PR 与 10.3K Star 不成比例),技术支持主要走官网论坛与商务渠道。它的「生态」更像一家公司的产品体系,而不是社区共建项目。
10. 选型建议
适合你,如果:
- 你要做多商户平台(平台抽佣、商家入驻),而不是单店网店;
- 团队熟悉 PHP 与 Yii2,或者愿意按它的插件约定扩展;
- 你能接受「PC 端开源、移动端付费」的边界,预算里包含商业版或自研移动端;
- 你需要在国产商城程序里找一套插件化程度较高、内核不过度臃肿的底子。
不适合你,如果:
- 你的服务器只装 PHP 8——文档明确不支持,硬上要改大量代码;
- 你需要 Apache-2.0 那种「闭源商用无争议」的授权确定性;
- 你要的是 SaaS 多租户或跨境、多语言场景,这套是单站点多商户;
- 你没有 PHP 团队,只想要开箱即用的托管服务。
和同类怎么比:CRMEB、NIUSHOP、ShopXO 也都是 PHP 系多商户商城,差别主要在三点——技术栈(多数是 ThinkPHP,这套是 Yii2)、移动端策略(多数把 UNIAPP 源码一并开源,这套只给构建产物)、内核克制程度(这套把营销全部做成插件,代价是必须按它的插件基类写)。选型时把「移动端源码是否在你手上」和「授权是否书面明确」两条单独拉出来打分,比对比功能表更有意义。
11. 风险与坑
- 授权口径自相矛盾:LICENSE 是 Apache-2.0,文件头却写「非自由软件、商用需购买授权」。这不是文字瑕疵,而是法律风险。上线前要书面确认,并原样保留版权头。
- 调试模式默认开着:
public/index.php、public/admin/index.php、public/mob/index.php三个入口都硬编码了YII_DEBUG = true与YII_ENV = 'dev'。生产环境必须改成 false 与 prod,否则异常页会暴露路径、SQL 与配置。 - Cookie 校验密钥是示例值:
backend/config/main.php里cookieValidationKey写死为abcdefg1234567890,全网同一份。不换等于给伪造 Cookie 留门,部署第一步就该换成随机串。 - 安装目录留在 Web 根下:
public/install装完仍在,虽然有install.lock拦截,但安装器本身是攻击面,装完应删除或改名。 - PHP 版本窗口很窄:只支持 7.2 ~ 7.4,而 7.4 已于 2022 年底停止安全支持。这意味着你要长期跑一个不再收安全补丁的运行时,除非自己评估升级到 8.x 的改造量。
- 依赖整包入库:
vendor134 MB 提交在仓库里,另有vendor.zip。好处是免 composer,坏处是第三方库的版本与补丁状态由作者决定,你无法用composer audit之类手段常规跟进。 - 文件队列不支持多机:
yii2-queue用 file 驱动,任务落在console/runtime/queue的本机磁盘。上多台服务器时,异步任务会各跑各的,必须换 Redis 或数据库驱动。 - Redis 默认无密码、本机地址:
common/config/main.php里hostname = localhost、port = 6379、无 password,云服务器上要确认 Redis 未对外暴露。 - 升级靠人工比对 SQL:
升级方法.md让你用 BCompare 比structure.sql差异再手改表,没有 migration、没有版本号常量。跨大版本升级实际风险接近重装。 - 移动端只有产物没有源码:
public/h5是构建后的静态文件,template下只有pc。想改 H5 或小程序,要么走商业版,要么自己重写前端对接/api。 - 营销插件是商业闭环的一部分:应用市场、购买记录、续费三张表说明部分插件需付费授权,装之前先确认授权与到期时间。
- 演示数据与演示站点同源:
initdata.sql会灌入演示商品与账号,不清理就上线会出现占位图片与测试订单。 - 仓库体积与首屏信息:398 MB 的仓库 clone 不快;README 首屏大量商业版体验账号与广告,Star 数不代表标准版能力,判断项目状态请看提交记录。
- 商城类共性问题仍需自测:支付回调验签、超时关单、库存并发、退款对账这些不在「装完能用」的范围内,必须按自己的支付通道逐项压测。
12. 参考链接
本文基于 2026-11-10 对 master 分支的浅克隆源码(composer.json、composer.lock、common/config、backend/config、install/structure.sql、插件目录、template/pc/package.json)、README、安装必读.md、升级方法.md 与 Gitee 项目页整理;Star、Fork、Issues、标签与提交数均以该日为准。授权部分存在多套口径,商用前请以官方书面说明为准。