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

discuz阅读模式

一、问题背景

从 Discuz! X3.5 版本升级至 Discuz! X5 版本后之前的”QQ互联插件“功能失效(不修改QQ互联后台已设置的回调地址),使用新“第三方登录后”QQ互联的出现100010 redirect uri is illegal回调地址非法错误,核心原因如下:
  1. Discuz! X3.5 版本QQ互联回调地址:https://域名/connect.php?mod=login&op=qq&type=callback
  2. Discuz! X5 版本改用新的账号通体系,QQ互联回调地址变更为:https://域名/api/qq/callback.php
  3. QQ互联官方加强回调地址校验,要求授权跳转的回调地址与后台填写的地址完全一致,不允许跳转、重定向
  4. 无法在QQ互联后台修改填写的旧回调地址,导致新地址校验不通过,报错100010

升级Discuz! X5使用“第三方登录后”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行):
$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+环境

六、验证效果

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

 
discuz运营一些常用sql语句 discuz

discuz运营一些常用sql语句

清零所有附件下载次数 UPDATE pre_forum_attachment SET downloads = 0 清零所有附件下载用户记录 同:清空所有用户的积分变化的记录 清零所有帖子的访问次数 U...