一、问题背景
从 Discuz! X3.5 版本升级至 Discuz! X5 版本后之前的”QQ互联插件“功能失效(不修改QQ互联后台已设置的回调地址),使用新“第三方登录后”QQ互联的出现100010 redirect uri is illegal回调地址非法错误,核心原因如下:
-
Discuz! X3.5 版本QQ互联回调地址:
https://域名/connect.php?mod=login&op=qq&type=callback -
Discuz! X5 版本改用新的账号通体系,QQ互联回调地址变更为:
https://域名/api/qq/callback.php -
QQ互联官方加强回调地址校验,要求授权跳转的回调地址与后台填写的地址完全一致,不允许跳转、重定向
-
无法在QQ互联后台修改填写的旧回调地址,导致新地址校验不通过,报错100010
二、报错详情
https://graph.qq.com/oauth2.0/show?which=error&display=pc&error=100010&which=Login&display=pc&response_type=code&client_id=XXXXXX&state=XXXXXX&scope=get_user_info&redirect_uri=https%3A%2F%2Fwww.eleok.com%2Fapi%2Fqq%2Fcallback.php redirect uri is illegal [appid: XXXXXXXXXXX] (100010)
初期改用中转跳转后,还出现常量重复定义、文件路径加载失败、open_basedir权限限制等报错,均为路径和环境冲突导致。
三、适用场景
-
Discuz! X3.5 升级至 Discuz! X5 版本
-
QQ互联后台无法修改旧回调地址
-
出现QQ互联100010回调非法错误
- 卸载X3.5的QQ互联插件使用X5版本自带的“第三方登录”功能
四、完整解决方案(分步实操)
第一步:修改QQ授权跳转地址(核心)
打开文件:
source/class/account/account_qq.php1、找到登录授权的回调地址配置(约48-52行):
$query_data = [ 'response_type' => 'code', 'client_id' => $this->conf['clientId'], 'state' => uniqid(), 'scope' => 'get_user_info', 'redirect_uri' => $this->conf['callbackUrl'], ];
将最后一行的
redirect_uri替换为旧回调地址,修改后:$query_data = [ 'response_type' => 'code', 'client_id' => $this->conf['clientId'], 'state' => uniqid(), 'scope' => 'get_user_info', 'redirect_uri' => $_G['siteurl'] . 'connect.php?mod=login&op=qq&type=callback', ];
2、找到获取Token的回调地址配置(约214行):
private function _getToken() {
$createConnection = new qq_connection();
return $createConnection->getAccessToken($this->conf['clientId'], $this->conf['clientSecret'], $this->code, $this->conf['callbackUrl']);
}
将最后一个参数替换为旧回调地址,修改后:
private function _getToken() {
$createConnection = new qq_connection();
return $createConnection->getAccessToken($this->conf['clientId'], $this->conf['clientSecret'], $this->code, $_G['siteurl'] . 'connect.php?mod=login&op=qq&type=callback');
}
第二步:创建根目录中转文件(关键)
在论坛根目录(与config、source文件夹同级),新建connect.php文件,填入以下代码,彻底解决路径、权限、常量报错:
<?php /** * Discuz! X5 QQ互联旧回调中转 * 解决100010错误、路径报错、权限限制、常量重复问题 */ // 切换工作目录,修复相对路径错乱问题 chdir(__DIR__ . '/api/qq/'); // 加载官方新回调文件,完成登录流程 require 'callback.php'; exit(); ?>
第三步:清空论坛缓存
登录Discuz! X5后台,依次点击:工具 - 清空缓存,清理完成后,再清除浏览器缓存,即可测试QQ登录。
五、方案优势
-
无需修改QQ互联后台任何配置,沿用旧的回调地址
-
彻底解决100010回调非法错误,通过QQ严格校验
-
无常量重复、无路径报错、无open_basedir权限限制
-
内部静默加载,浏览器地址栏不变,登录流程无感知
-
适配Discuz! X5全新账号通体系,兼容PHP 8.0+环境
六、验证效果
-
点击论坛QQ登录按钮,正常弹出QQ扫码/快捷登录界面
-
扫码授权后,无任何报错,自动跳转并完成论坛登录
-
全程无报错,QQ互联校验完全通过,登录功能恢复正常





