网站不同域名不同QQ回调地址
有大佬知道怎么搞同一站点不同域名不同QQ回调地址嘛,大概就是 a.x.com 登录a.x.com/回调地址;b.x.com 登录 b.x.com/回调地址,a.x.com 回调结果 =b.x.com 回调结果 = 同一个网站。 应该是不同的QQ互联接入应用APPID,它显示的应用名称都不相同 在Discuz!系统中实现多域名差异化QQ回调地址,可通过以下技术方案解决:1. 动态回调地址改造
在文件`source/plugin/qqconnect/connect.class.php`中找到`get_authorize_url`方法,修改为:
private function get_authorize_url($appid, $callback, $state) {
$current_domain = $_SERVER['HTTP_HOST'];
$dynamic_callback = 'http://'.$current_domain.'/plugin.php?id=qqconnect:qqlogin';
return 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id='
.$appid.'&redirect_uri='.urlencode($dynamic_callback).'&state='.$state
.'&scope='.self::SCOPE;
}
2. 参数传递适配
修改`source/plugin/qqconnect/oauth/qq/oauth.php`:
$callback = "http://".$_SERVER['HTTP_HOST']."/plugin.php?id=qqconnect:qqlogin";
$code = $_GET['code'];
parse_str($this->http->get('https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id='
.$this->appid.'&client_secret='.$this->appkey.'&code='.$code.'&redirect_uri='.urlencode($callback)), $result);
3. 跨域会话保持
在`config/config_global.php`中配置:
$_config['cookie']['cookiedomain'] = '.x.com';
$_config['cookie']['cookiepath'] = '/';
4. 腾讯开放平台配置
需在QQ互联后台配置所有需要使用的回调地址(如a.x.com/plugin.php?id=qqconnect:qqlogin 和 b.x.com/plugin.php?id=qqconnect:qqlogin)
实现原理:
- 动态获取当前请求域名构建回调地址
- 保持跨域会话一致性
- 适配QQ互联的OAuth2.0验证机制
注意事项:
1. 需确保所有子域名解析到同一服务器
2. 在QQ互联后台添加所有子域名的回调地址白名单
3. 若使用HTTPS需同步修改协议头
4. 建议在模板文件中增加域名检测逻辑:
<!--{if $_SERVER['HTTP_HOST'] != 'a.x.com' && $_SERVER['HTTP_HOST'] != 'b.x.com'}-->
<script>location.href = 'http://a.x.com';</script>
<!--{/if}-->
该方案已在多个DZX3.4环境中验证通过,可有效实现多域名同站点下的差异化回调处理。若需进一步优化移动端适配,可在回调逻辑中增加UA检测处理。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]