重要声明:前提与风险提示

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

整合原理

ECShop 和 Discuz! 本身是两个独立的系统,通过 UCenter 这个“中间人”,我们可以将它们连接起来:

ecshop整合discuz教程
(图片来源网络,侵删)
  • 用户统一:用户在 ECShop 注册的账号,会自动同步到 UCenter,并同步到 Discuz!;反之亦然。
  • 单点登录:用户在 ECShop 登录后,访问 Discuz! 论坛时会自动处于登录状态,无需再次输入账号密码。
  • 数据互通:除了用户,还可以同步积分、等级等信息(需要额外开发或插件支持)。

整个流程的核心是 UCenter,它像一个用户信息管理中心,ECShop 和 Discuz! 都向它“报到”和“获取”用户数据。


第一步:安装 UCenter

  1. 下载 UCenter

    • 访问 Comsenz 官网下载 UCenter 1.6 最新版。
    • 下载地址:https://www.comsenz.com/downloads/upinfo/uc_server
  2. 上传并安装

    • 将下载的 uc_server 压缩包解压。
    • 将解压后的文件夹(uc_server)内的所有文件,通过 FTP 上传到你的网站根目录下。注意:不要和 ECShop 或 Discuz! 的文件夹混在一起,建议放在一个独立的位置,http://www.yourdomain.com/uc_server/
  3. 运行安装程序

    ecshop整合discuz教程
    (图片来源网络,侵删)
    • 在浏览器中访问 http://www.yourdomain.com/uc_server/
    • 你会看到 UCenter 的安装向导,按照提示操作:
      • 环境检测:确保你的 PHP 和 MySQL 版本符合要求。
      • 协议同意:点击“我同意”。
      • 运行环境:再次确认环境。
      • 数据库配置
        • 数据库地址:通常是 localhost
        • 数据库用户名:你的数据库用户名。
        • 数据库密码:你的数据库密码。
        • 数据库名强烈建议为 UCenter 创建一个全新的数据库yourdomain_uc,不要和 ECShop 或 Discuz! 共用同一个数据库,以保证数据安全和独立。
        • 数据库表前缀:可以使用默认的 uc_
      • 管理员信息:设置 UCenter 的管理员用户名和密码,请务必记住。
      • 安装完成:点击“安装”即可。
  4. 记录 UCenter 信息 安装成功后,请务必记下以下信息,稍后配置 ECShop 和 Discuz! 时需要用到:

    • UCenter URL: http://www.yourdomain.com/uc_server/
    • UCenter 数据库信息: 你刚刚设置的数据库地址、用户名、密码、数据库名。
    • UCenter 管理员账号密码

第二步:配置 ECShop (ECShop 作为应用)

  1. 准备 ECShop

    • 确保你的 ECShop 网站已经可以正常访问。
    • 将 ECShop 目录下的 api 文件夹重命名为 uc_client,这是 Discuz! 识别 ECShop 为 UCenter 应用的关键。
      • 原路径:/ecshop/api/
      • 修改后:/ecshop/uc_client/
  2. 修改 ECShop 配置文件

    • 打开 ECShop 根目录下的 config.php 文件。

      ecshop整合discuz教程
      (图片来源网络,侵删)
    • 找到并修改以下配置项:

      // 定义是否启用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 处。
  3. 修改 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_iduser_name (admin) 应该和你的 ECShop 管理员一致。
      • password123456 的 MD5 值,如果你的管理员密码不是 123456,请先用 MD5 工具生成你的密码哈希值再替换。
      • email 填写你的管理员邮箱。
  4. 更新 ECShop 配置

    • 登录你的 ECShop 后台 (http://www.yourdomain.com/ecshop/admin/)。
    • 点击左侧菜单的 商店设置 -> 基本设置
    • 在页面底部,你会看到一个 “Discuz! 论坛设置” 的区域。
    • 将 UCenter 后台生成的 应用主 URL应用主 IP 填写进去,然后点击 “更新” 按钮。

第三步:配置 Discuz! (Discuz! 作为应用)

  1. 准备 Discuz!

    • 确保你的 Discuz! 论坛已经可以正常访问。
    • 将 Discuz! 目录下的 api 文件夹重命名为 uc_client
      • 原路径:/discuz/api/
      • 修改后:/discuz/uc_client/
  2. 修改 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,填入此处。
  3. 更新 Discuz! 缓存

    • 登录你的 Discuz! 后台 (http://www.yourdomain.com/discuz/admincp/)。
    • 点击左侧菜单的 工具 -> 更新缓存
    • 勾选所有缓存项,然后点击 “执行”,这一步至关重要,可以让 Discuz! 重新读取 config_ucenter.php 的配置。

第四步:最终验证与测试

  1. 验证 UCenter 应用状态

    • 回到 UCenter 后台 (http://www.yourdomain.com/uc_server/)。
    • 点击左侧菜单的 应用管理
    • 你应该能看到 ECShop 和 Discuz! 两个应用,并且它们的 “状态” 都应该是 “正常”,如果不是,请检查前面的配置步骤,特别是 URL 和通信密钥。
  2. 测试用户同步

    • 从 ECShop 注册:访问你的 ECShop 网站,点击“注册新用户”,填写信息并提交,注册成功后,登录 UCenter 后台,点击 “用户管理”,你应该能看到新注册的用户。
    • 从 Discuz! 注册:访问你的 Discuz! 论坛,点击“注册”,填写信息并提交,注册成功后,再次查看 UCenter 的用户管理,用户也应该存在。
  3. 测试单点登录

    • 方案A:ECShop 登录 -> 访问 Discuz!
      1. 在 ECShop 网站退出登录。
      2. 在 ECShop 网站使用刚才注册的账号登录。
      3. 登录成功后,在新的浏览器标签页中打开你的 Discuz! 论坛首页。
      4. 如果页面顶部显示你已经登录,并且是你的用户名,那么恭喜你,单点登录成功了!
    • 方案B:Discuz! 登录 -> 访问 ECShop
      1. 在 Discuz! 论坛退出登录。
      2. 在 Discuz! 论坛使用同一个账号登录。
      3. 登录成功后,在新的浏览器标签页中打开你的 ECShop 首页。
      4. 如果页面右上角显示你已经登录,那么反向的单点登录也成功了!

如果以上所有测试都通过,ECShop 和 Discuz! 的整合就大功告成了!


常见问题排查

  • 问题:UCenter 中应用状态显示“通信失败”或“安装失败”。

    • 原因:通常是配置文件中的 URL、IP 或通信密钥不正确。
    • 解决:仔细核对 ECShop 的 config.php 和 Discuz! 的 config_ucenter.php 中的 UC_API, UC_IP, UC_KEY 是否与 UCenter 后台添加应用时生成的信息完全一致,特别注意不要有多余的空格。
  • 问题:用户无法同步。

    • 原因
      1. ECShop 的 ecs_admin_user 表里没有管理员记录。
      2. UCenter 的应用状态不正常。
      3. ECShop 或 Discuz! 的缓存没有更新。
    • 解决:检查以上几点,确保数据库操作正确,并重新更新缓存。
  • 问题:单点登录不生效。

    • 原因uc_client 文件夹没有正确重命名,或者 config_ucenter.php 没有被 Discuz! 正确读取。
    • 解决:确认 api 文件夹已重命名为 uc_client,并确保 Discuz! 后台的缓存已更新。
  • 问题:出现乱码。

    • 原因:ECShop 和 Discuz! 的字符集(GBK/UTF-8)与 UCenter 的配置 UC_DBCHARSETUC_CHARSET 不匹配。
    • 解决:如果你的网站是 UTF-8 编码,尝试将 UC_DBCHARSETUC_CHARSET 的值从 gbk 修改为 utf8,如果不行,请确保所有系统(ECShop, Discuz!, UCenter)使用统一的字符集。

希望这份详细的教程能帮助你顺利完成整合!祝你成功!