小樱 发表于 2019/5/9 14:00

discuz论坛QQ互联登陆账号 提示详细错误:connect_error_code_0 排查 解决方法

问题:点击QQ互联登录按钮,提示下面的错误信息。
抱歉,当前存在网络问题或服务器繁忙,详细错误:connect_error_code_0,错误代码:,请您稍候再试。

分析,discuz的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,需要留空。

我这遇到的问题是,QQ互联官方graph.qq.com接口的103.7.30.64服务器ip挂了,只能在服务器中手动指向hosts到另一个ip即可,因为代码中在后台没有设置OAuth2.0的IP地址功能,正好遇到OAuth2.0故障,就导致了失败。


页: [1]
查看完整版本: discuz论坛QQ互联登陆账号 提示详细错误:connect_error_code_0 排查 解决方法