找回密码
 注册
查看: 2|回复: 0

升级Discuz! X5使用“第三方登录后”QQ互联100010回调错误完美解决教程

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
一、问题背景

从 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.php
1、找到登录授权的回调地址配置(约48-52行):
  1. $query_data = [
  2.         'response_type' => 'code',
  3.         'client_id' => $this->conf['clientId'],
  4.         'state' => uniqid(),
  5.         'scope' => 'get_user_info',
  6.         'redirect_uri' => $this->conf['callbackUrl'],
  7. ];
复制代码
将最后一行的redirect_uri替换为旧回调地址,修改后:
  1. $query_data = [
  2.         'response_type' => 'code',
  3.         'client_id' => $this->conf['clientId'],
  4.         'state' => uniqid(),
  5.         'scope' => 'get_user_info',
  6.         'redirect_uri' => $_G['siteurl'] . 'connect.php?mod=login&op=qq&type=callback',
  7. ];
复制代码

2、找到获取Token的回调地址配置(约214行):
  1. private function _getToken() {
  2.     $createConnection = new qq_connection();
  3.     return $createConnection->getAccessToken($this->conf['clientId'], $this->conf['clientSecret'], $this->code, $this->conf['callbackUrl']);
  4. }
复制代码

将最后一个参数替换为旧回调地址,修改后:
  1. private function _getToken() {
  2.     $createConnection = new qq_connection();
  3.     return $createConnection->getAccessToken($this->conf['clientId'], $this->conf['clientSecret'], $this->code, $_G['siteurl'] . 'connect.php?mod=login&op=qq&type=callback');
  4. }
复制代码

第二步:创建根目录中转文件(关键)

在论坛根目录(与config、source文件夹同级),新建connect.php文件,填入以下代码,彻底解决路径、权限、常量报错:
  1. <?php
  2. /**
  3. * Discuz! X5 QQ互联旧回调中转
  4. * 解决100010错误、路径报错、权限限制、常量重复问题
  5. */
  6. // 切换工作目录,修复相对路径错乱问题
  7. chdir(__DIR__ . '/api/qq/');
  8. // 加载官方新回调文件,完成登录流程
  9. require 'callback.php';
  10. exit();
  11. ?>
复制代码


第三步:清空论坛缓存

登录Discuz! X5后台,依次点击:工具 – 清空缓存,清理完成后,再清除浏览器缓存,即可测试QQ登录。


五、方案优势

  • 无需修改QQ互联后台任何配置,沿用旧的回调地址
  • 彻底解决100010回调非法错误,通过QQ严格校验
  • 无常量重复、无路径报错、无open_basedir权限限制
  • 内部静默加载,浏览器地址栏不变,登录流程无感知
  • 适配Discuz! X5全新账号通体系,兼容PHP 8.0+环境


六、验证效果

  • 点击论坛QQ登录按钮,正常弹出QQ扫码/快捷登录界面
  • 扫码授权后,无任何报错,自动跳转并完成论坛登录
  • 全程无报错,QQ互联校验完全通过,登录功能恢复正常


2026年4月6日 老霍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|BC Morning Website ( Best Deal Inc. 001 )

GMT-8, 2026-11-1 22:41 , Processed in 0.012144 second(s), 16 queries .

Supported by BestDeal Online X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表