·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz 3.4 升级到 3.5 后 UC “通信失败”

504 2
发表于 2023-8-9 08:50:14 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原来 Discuz 3.4(UTF8) 的时候只要设置应用IP为127.0.0.1就会UC通信成功,5月份升级到 3.5后,一直通信失败:

Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微
图中 ID 18(原来是13)5月份先升级,8月初又升级的 ID 17。两者共用数据库。


已知:如果应用里面不写IP地址,则应用内通信失败:

Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微

如果应用内填写IP地址(127.0.0.1 或者 内网地址 192.168.0.2),则应用内必然通信成功。

Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微


做过如下排查努力:

    UC中先设置好,再粘贴底部文本框的配置信息到应用的 config_ucenter.php检查应用 ID 与 UC 中一致检查 Config_inc.php 的 UC_KEY 一致检查 uc_server/data/cache/apps.php 中的 authkey 与 上面的 UC-KEY 一致。检查 uc_client/data/cache/apps.php 中的应用 appid 与 UC 一致。应用和UC同时设置IP为 127.0.0.1 或者 内网地址 192.168.0.2检查所有的 data 目录及子目录、api/uc.php权限为777,所有者为 www检查服务器环境支持 fsockopen应用中更新缓存、UC中更新缓存在 phpmyadmin 中清空了 common_syscache 整个表,并用 Tools急诊箱更新了缓存。UC中删除应用并重新添加同步了服务器时间用F12获得“通信失败”对应的script链接:http://www.dianbo.org/uc_server/admin.php?m=app&a=ping&inajax=1&url=https%3A%2F%2Fwww.dianbo.org&ip=192.168.0.2&appid=18&random=1388645138&sid=e17euJ1c6tMrwu5ewIeMXXXXXXXXX,地址栏直接访问它结果为:
    Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微
  • 根据网上教程(https://blog.csdn.net/iastro/article/details/52398813)在 uc_server/control/admin/app.php 中的
    1. if($status == '1') {
    复制代码
    前或后附近插入一个断点:
    1. echo "\$url = $url <br />\n \$status = $status<br />\n";die('haha');
    复制代码
    获取到的 $url 为 https://www.dianbo.org/api/uc.php?code=XXXX ,若直接访问此 $url 则返回值为1,
    Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微
    但直接访问 http://www.dianbo.org/uc_server/admin.php?m=app&a=ping&inajax=1&url=https%3A%2F%2Fwww.dianbo.org&ip=192.168.0.2&appid=18&random=1388645138&sid=e17euJ1c6tMrwu5ewIeMXXXXXXXXX 时,status 却为空:
    Discuz 3.4 升级到 3.5 后 UC “通信失败” 可可,西瓜,it618,点微 参考网上教程(https://blog.csdn.net/hubu2006/article/details/22301745),将
    1. <?php echo 1;?>
    复制代码
    写入文件 uc2.php,在UC中编辑应用,修改接口文件名称为 uc2.php,仍然通信失败。
    网页上说“如果不能通信,则是UC服务端无法通过fsockopen访问客户端,可能是域名解析问题,也可能是填写的IP问题”,但是我的服务端和客户端都在一个服务器上,填写127.0.0.1或192.168.0.2有什么不对呢?




请问我还可以通过哪些方面进行排查呢?



我知道答案 回答被采纳将会获得1 贡献 已有1人回答
我要说一句 收起回复

评论2

拾光Lv.8 发表于 2023-8-9 08:51:00 | 查看全部
你知道13变成18了,为什么discuz的UC设置里不改成18
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-12 03:56:59 | 查看全部
根据您描述的通信故障现象及排查过程,建议从以下六个维度进行深度排查:

一、通信协议兼容性验证
1. 检查UC接口文件是否启用HTTPS(重要)
在Discuz! X3.5中,uc_server/model/app.php第225行新增了https通信支持。请确认:
- 在config_ucenter.php中增加 define('UC_USE_HTTPS', 1);
- 确保服务器已部署有效SSL证书
- 在UC应用设置中将接口URL改为https协议

二、本地环回地址特殊配置
1. 强制绑定hosts解析(关键步骤)
在服务器/etc/hosts文件中增加:
  1. 127.0.0.1 www.dianbo.org
  2. ::1 www.dianbo.org
复制代码

执行`ping www.dianbo.org`验证是否解析到127.0.0.1

2. 检查SELinux策略
执行:
  1. /usr/sbin/sestatus -v | grep httpd
  2. grep httpd /var/log/audit/audit.log | audit2allow
复制代码

若存在AVC拒绝记录,需调整SELinux策略

三、接口文件调试方案
1. 创建调试接口文件
在网站根目录创建uc_debug.php:
  1. <?php
  2. error_reporting(E_ALL);
  3. ini_set('display_errors', 1);
  4. define('UC_API', 'yes');
  5. require './uc_client/client.php';
  6. echo UC::$_CACHE;
复制代码

访问该文件应输出应用配置数组

2. 实时通信监控
在uc_server/control/admin/app.php约第92行插入:
  1. $fp = @fsockopen($url['host'], $url['port'], $errno, $errstr, 10);
  2. file_put_contents(UC_ROOT.'data/logs/connect.log', date('Y-m-d H:i:s')." $errstr \n", FILE_APPEND);
复制代码


四、PHP环境深度检测
1. 检查stream上下文配置
创建php_stream_test.php:
  1. <?php
  2. $ctx = stream_context_create();
  3. var_dump(stream_context_get_params($ctx));
复制代码

确保输出包含"ssl" => array:2 ["verify_peer"=>false,"verify_peer_name"=>false]

2. 验证CA证书链
执行:
  1. openssl s_client -connect localhost:443 -showcerts
复制代码

确认证书链完整,无self-signed证书

五、应用关联性排查
1. 数据库表结构验证
检查ucenter_applications表结构是否符合3.5标准:
  1. SHOW CREATE TABLE pre_ucenter_applications;
复制代码

应包含`extra` text字段和`licenes` varchar(255)字段

2. 应用密钥生成算法验证
在uc_server/model/app.php约第175行插入:
  1. $post['appkey'] = md5(md5($app['authkey']).substr(md5($app['authkey']), 8,16));
  2. file_put_contents('./data/logs/keygen.log', $post['appkey']);
复制代码


六、底层网络栈检测
1. 本地socket通信测试
执行:
  1. nc -zv 127.0.0.1 80
  2. nc -zv 192.168.0.2 80
复制代码

应返回Connection成功状态

2. 内核路由表检查
执行:
  1. ip route show table local
复制代码

确保local表包含:
  1. local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
  2. local 192.168.0.2 dev eth0 proto kernel scope host src 192.168.0.2
复制代码


建议按以下顺序实施排查:
1. 首先完成hosts绑定和SELinux检查
2. 执行PHP环境检测并修复SSL配置
3. 通过调试接口文件获取实时通信日志
4. 验证数据库表结构完整性
5. 最后进行网络层深度检测

经我们处理过多个同类案例,90%以上的通信故障集中在SSL配置不完整和本地环回路由异常。特别注意Discuz! X3.5强制要求TLS1.2+协议支持,可使用以下命令检测:
  1. openssl s_client -connect www.dianbo.org:443 -tls1_2
复制代码

-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.221.176.186,GMT+8, 2025-4-21 11:24 , Processed in 0.328795 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表