重要声明:前提与风险提示
- 版本兼容性:本教程基于 ECShop 2.7.3 和 Discuz! 7.2(或 X1.5/X2)编写,这两个版本是经过大量实践验证的经典组合,兼容性最好,如果你使用的是更新版本的 ECShop 或 Discuz,可能会遇到代码不匹配的问题,需要自行调整。
- 备份!备份!备份!:在进行任何文件修改和数据库操作之前,务必备份你的 ECShop 和 Discuz! 的网站文件以及数据库,这是最重要的步骤,可以防止操作失误导致网站崩溃。
- 本地测试:强烈建议在本地服务器(如 phpStudy、XAMPP)上完整演练一遍,确认无误后再在生产环境中操作。
- 安全第一:修改完配置文件后,请将
config_ucenter.php等敏感文件的权限设置为644或604,防止被恶意访问。
整合原理
ECShop 和 Discuz! 本身是两个独立的系统,通过 UCenter 这个“中间人”,我们可以将它们连接起来:

(图片来源网络,侵删)
- 用户统一:用户在 ECShop 注册的账号,会自动同步到 UCenter,并同步到 Discuz!;反之亦然。
- 单点登录:用户在 ECShop 登录后,访问 Discuz! 论坛时会自动处于登录状态,无需再次输入账号密码。
- 数据互通:除了用户,还可以同步积分、等级等信息(需要额外开发或插件支持)。
整个流程的核心是 UCenter,它像一个用户信息管理中心,ECShop 和 Discuz! 都向它“报到”和“获取”用户数据。
第一步:安装 UCenter
-
下载 UCenter
- 访问 Comsenz 官网下载 UCenter 1.6 最新版。
- 下载地址:
https://www.comsenz.com/downloads/upinfo/uc_server
-
上传并安装
- 将下载的
uc_server压缩包解压。 - 将解压后的文件夹(
uc_server)内的所有文件,通过 FTP 上传到你的网站根目录下。注意:不要和 ECShop 或 Discuz! 的文件夹混在一起,建议放在一个独立的位置,http://www.yourdomain.com/uc_server/。
- 将下载的
-
运行安装程序
(图片来源网络,侵删)- 在浏览器中访问
http://www.yourdomain.com/uc_server/。 - 你会看到 UCenter 的安装向导,按照提示操作:
- 环境检测:确保你的 PHP 和 MySQL 版本符合要求。
- 协议同意:点击“我同意”。
- 运行环境:再次确认环境。
- 数据库配置:
- 数据库地址:通常是
localhost。 - 数据库用户名:你的数据库用户名。
- 数据库密码:你的数据库密码。
- 数据库名:强烈建议为 UCenter 创建一个全新的数据库,
yourdomain_uc,不要和 ECShop 或 Discuz! 共用同一个数据库,以保证数据安全和独立。 - 数据库表前缀:可以使用默认的
uc_。
- 数据库地址:通常是
- 管理员信息:设置 UCenter 的管理员用户名和密码,请务必记住。
- 安装完成:点击“安装”即可。
- 在浏览器中访问
-
记录 UCenter 信息 安装成功后,请务必记下以下信息,稍后配置 ECShop 和 Discuz! 时需要用到:
- UCenter URL:
http://www.yourdomain.com/uc_server/ - UCenter 数据库信息: 你刚刚设置的数据库地址、用户名、密码、数据库名。
- UCenter 管理员账号密码。
- UCenter URL:
第二步:配置 ECShop (ECShop 作为应用)
-
准备 ECShop
- 确保你的 ECShop 网站已经可以正常访问。
- 将 ECShop 目录下的
api文件夹重命名为uc_client,这是 Discuz! 识别 ECShop 为 UCenter 应用的关键。- 原路径:
/ecshop/api/ - 修改后:
/ecshop/uc_client/
- 原路径:
-
修改 ECShop 配置文件
-
打开 ECShop 根目录下的
config.php文件。
(图片来源网络,侵删) -
找到并修改以下配置项:
// 定义是否启用UCHome define('ENABLED_UC', 1); // UCenter 的URL地址 define('UC_API', 'http://www.yourdomain.com/uc_server/'); // UCenter 数据库信息 (必须和 UCenter 安装时的一致) define('UC_DBHOST', 'localhost'); define('UC_DBUSER', 'your_uc_db_user'); // UCenter 数据库用户名 define('UC_DBPW', 'your_uc_db_password'); // UCenter 数据库密码 define('UC_DBNAME', 'your_uc_db_name'); // UCenter 数据库名 define('UC_DBCHARSET', 'gbk'); // 如果你的网站是UTF-8编码,这里可以尝试 'utf8' define('UC_DBTABLEPRE', '`your_uc_db_name`.uc_'); // 格式: `数据库名`.`表前缀` // UCenter 的通信密钥 (非常重要!) define('UC_KEY', 'your_uc_key'); // 请替换成你在 UCenter 后台生成的通信密钥 // UCenter 的IP地址 (如果和 UCenter 在同一台服务器,可以留空或填 127.0.0.1) define('UC_IP', ''); // 是否开启 Discuz! 整合 define('ENABLED_DISCUZ', true); -
如何获取
UC_KEY?- 登录你的 UCenter 后台 (
http://www.yourdomain.com/uc_server/)。 - 点击左侧菜单的 应用管理 -> 添加新应用。
- 在 应用类型 中选择 ECShop。
- 填写应用名称(如“我的商城”)、应用 URL(你的 ECShop 地址,如
http://www.yourdomain.com/ecshop/)。 - 点击提交,系统会自动生成一个 应用主 URL、应用主 IP 和最重要的 通信密钥。
- 将这个“通信密钥”复制到 ECShop 的
config.php文件的UC_KEY处。
- 登录你的 UCenter 后台 (
-
-
修改 ECShop 数据库
- 登录你的 ECShop 数据库管理工具(如 phpMyAdmin)。
- 执行以下 SQL 语句,修改
ecs_admin_user表,将管理员账号添加到 UCenter 中,使其拥有同步用户的权限。INSERT INTO `ecs_admin_user` (`user_id`, `user_name`, `email`, `password`, `add_time`, `last_login`, `last_ip`, `action_list`, `navlist`) VALUES ('1', 'admin', 'admin@yourdomain.com', 'e10adc3949ba59abbe56e057f20f883e', '1289251200', '1289344800', '127.0.0.1', 'all', '');user_id和user_name(admin) 应该和你的 ECShop 管理员一致。password是123456的 MD5 值,如果你的管理员密码不是123456,请先用 MD5 工具生成你的密码哈希值再替换。email填写你的管理员邮箱。
-
更新 ECShop 配置
- 登录你的 ECShop 后台 (
http://www.yourdomain.com/ecshop/admin/)。 - 点击左侧菜单的 商店设置 -> 基本设置。
- 在页面底部,你会看到一个 “Discuz! 论坛设置” 的区域。
- 将 UCenter 后台生成的 应用主 URL 和 应用主 IP 填写进去,然后点击 “更新” 按钮。
- 登录你的 ECShop 后台 (
第三步:配置 Discuz! (Discuz! 作为应用)
-
准备 Discuz!
- 确保你的 Discuz! 论坛已经可以正常访问。
- 将 Discuz! 目录下的
api文件夹重命名为uc_client。- 原路径:
/discuz/api/ - 修改后:
/discuz/uc_client/
- 原路径:
-
修改 Discuz! 配置文件
- 打开 Discuz! 根目录下的
config_ucenter.php文件。 - 这个文件在 UCenter 安装时可能已经生成,或者你需要手动创建/修改它,内容如下:
<?php define('UC_CONNECT', 'mysql'); // 连接 UCenter 的方式, 默认为 MYSQL define('UC_DBHOST', 'localhost'); // UCenter 数据库地址 define('UC_DBUSER', 'your_uc_db_user'); // UCenter 数据库用户名 define('UC_DBPW', 'your_uc_db_password'); // UCenter 数据库密码 define('UC_DBNAME', 'your_uc_db_name'); // UCenter 数据库名 define('UC_DBCHARSET', 'gbk'); // 编集 define('UC_DBTABLEPRE', '`your_uc_db_name`.uc_'); // UCenter 数据库表前缀 define('UC_CHARSET', 'gbk'); // Discuz! 默认语言 define('UC_APPID', '2'); // 应用ID, 在 UCenter 后台应用管理中查看 define('UC_KEY', 'your_uc_key'); // 通信密钥, 和 ECShop 中的必须一致 define('UC_API', 'http://www.yourdomain.com/uc_server/'); // UCenter 的 URL define('UC_IP', ''); // UCenter 的 IP define('UC_PPP', 20); // 每次向 UCenter 发送通知的数量 ?> - 关键点:
UC_DB*信息必须和 UCenter 安装时完全一致。UC_KEY必须和 ECShop 的config.php中的一致。UC_APPID:这个 ID 是你在 UCenter 后台添加 Discuz! 应用时自动分配的,登录 UCenter 后台,点击 应用管理 -> 添加新应用,这次选择 Discuz!,填写应用名称和 URL,提交后记下 应用 ID,填入此处。
- 打开 Discuz! 根目录下的
-
更新 Discuz! 缓存
- 登录你的 Discuz! 后台 (
http://www.yourdomain.com/discuz/admincp/)。 - 点击左侧菜单的 工具 -> 更新缓存。
- 勾选所有缓存项,然后点击 “执行”,这一步至关重要,可以让 Discuz! 重新读取
config_ucenter.php的配置。
- 登录你的 Discuz! 后台 (
第四步:最终验证与测试
-
验证 UCenter 应用状态
- 回到 UCenter 后台 (
http://www.yourdomain.com/uc_server/)。 - 点击左侧菜单的 应用管理。
- 你应该能看到 ECShop 和 Discuz! 两个应用,并且它们的 “状态” 都应该是 “正常”,如果不是,请检查前面的配置步骤,特别是 URL 和通信密钥。
- 回到 UCenter 后台 (
-
测试用户同步
- 从 ECShop 注册:访问你的 ECShop 网站,点击“注册新用户”,填写信息并提交,注册成功后,登录 UCenter 后台,点击 “用户管理”,你应该能看到新注册的用户。
- 从 Discuz! 注册:访问你的 Discuz! 论坛,点击“注册”,填写信息并提交,注册成功后,再次查看 UCenter 的用户管理,用户也应该存在。
-
测试单点登录
- 方案A:ECShop 登录 -> 访问 Discuz!
- 在 ECShop 网站退出登录。
- 在 ECShop 网站使用刚才注册的账号登录。
- 登录成功后,在新的浏览器标签页中打开你的 Discuz! 论坛首页。
- 如果页面顶部显示你已经登录,并且是你的用户名,那么恭喜你,单点登录成功了!
- 方案B:Discuz! 登录 -> 访问 ECShop
- 在 Discuz! 论坛退出登录。
- 在 Discuz! 论坛使用同一个账号登录。
- 登录成功后,在新的浏览器标签页中打开你的 ECShop 首页。
- 如果页面右上角显示你已经登录,那么反向的单点登录也成功了!
- 方案A:ECShop 登录 -> 访问 Discuz!
如果以上所有测试都通过,ECShop 和 Discuz! 的整合就大功告成了!
常见问题排查
-
问题:UCenter 中应用状态显示“通信失败”或“安装失败”。
- 原因:通常是配置文件中的 URL、IP 或通信密钥不正确。
- 解决:仔细核对 ECShop 的
config.php和 Discuz! 的config_ucenter.php中的UC_API,UC_IP,UC_KEY是否与 UCenter 后台添加应用时生成的信息完全一致,特别注意不要有多余的空格。
-
问题:用户无法同步。
- 原因:
- ECShop 的
ecs_admin_user表里没有管理员记录。 - UCenter 的应用状态不正常。
- ECShop 或 Discuz! 的缓存没有更新。
- ECShop 的
- 解决:检查以上几点,确保数据库操作正确,并重新更新缓存。
- 原因:
-
问题:单点登录不生效。
- 原因:
uc_client文件夹没有正确重命名,或者config_ucenter.php没有被 Discuz! 正确读取。 - 解决:确认
api文件夹已重命名为uc_client,并确保 Discuz! 后台的缓存已更新。
- 原因:
-
问题:出现乱码。
- 原因:ECShop 和 Discuz! 的字符集(GBK/UTF-8)与 UCenter 的配置
UC_DBCHARSET和UC_CHARSET不匹配。 - 解决:如果你的网站是 UTF-8 编码,尝试将
UC_DBCHARSET和UC_CHARSET的值从gbk修改为utf8,如果不行,请确保所有系统(ECShop, Discuz!, UCenter)使用统一的字符集。
- 原因:ECShop 和 Discuz! 的字符集(GBK/UTF-8)与 UCenter 的配置
希望这份详细的教程能帮助你顺利完成整合!祝你成功!
