升级Discuz! X3.1后QQ互联提示connect_error_code_0的问题排查

问题表现

升级后,点击QQ互联登录按钮,提示下面的错误信息。

抱歉,当前存在网络问题或服务器繁忙,详细错误:connect_error_code_0,错误代码:,请您稍候再试。

原因分析

Discuz! X3.1的QQ互联集成了OAuth1.0和OAuth2.0的接口,升级脚本判断如果服务器支持ssl,就会使用OAuth2.0接口。
出现此问题的站点属于切换到了OAuth2.0接口后导致的。

source\plugin\manyou\Service\Client\OAuth.php

	public function dfsockopen($requestURL, $queryString = array(), $files = false) {
		return dfsockopen($requestURL, 0, $queryString, '', false, $this->_apiIp, 15, TRUE, !$files ? 'URLENCODE' : 'FORMDATA', true, 0, $files);
	}

注意这里请求url的使用,使用了$this->_apiIp参数,看下这个参数是在哪里定义的。

source\plugin\manyou\Service\Client\ConnectOAuth.php

	public function __construct($connectAppId = '', $connectAppKey = '', $apiIp = '') {

		if(!$connectAppId || !$connectAppKey) {
			global $_G;
			$connectAppId = $_G['setting']['connectappid'];
			$connectAppKey = $_G['setting']['connectappkey'];
		}
		$this->setAppkey($connectAppId, $connectAppKey);
		if(!$this->_appKey || !$this->_appSecret) {
			throw new Exception('connectAppId/connectAppKey Invalid', __LINE__);
		}

		if(!$apiIp) {
			global $_G;
			$apiIp = $_G['setting']['connect_api_ip'] ? $_G['setting']['connect_api_ip'] : '';
		}

		if($apiIp) {
			$this->setApiIp($apiIp);
		}
	}

这里可以看到使用的是后台设置的互联接口IP。

Discuz! 后台诊断工具里的互联接口IP是设置的OAuth1.0接口的域名,即http://openapi.qzone.qq.com。
而OAuth2.0接口的域名变更为了https://graph.qq.com,但是接口里使用的IP仍为OAuth1.0的,所以就导致无法请求,继而导致上述报错。

解决方法

上诊断工具里,去掉设置的互联接口IP即可。

2013年12月17日更新:
看到Discuz! 官网很多人反馈出现网络繁忙的问题,记日志看了下是请求用户openId这步报错了,应该是空间的接口有问题,静待官方解决。

2013年12月18日更新:
已经修复。

标签: Discuz, QQ互联

仅有一条评论

  1. 小飞 小飞

    discuz x3.1的使用QQ互联登陆,提示:抱歉,当前存在网络问题或服务器繁忙,详细错误:connect_error_code_0,错误代码:,请您稍候再试。会出现这种错误,在后台云诊断工具里,也没有设置ip,不过网站有防火墙,怎么办。

添加新评论