找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7983|回复: 0

[知识库] 【终极解决方案】QQ互联登录connect_error_code_20003错误,code_0错误

[复制链接]
发表于 2015-9-7 21:36:55 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
最新出现这个connect_error_code_20003问题,主要原因是QQ登录OAuth1.0的服务变得极不稳定了。
OAuth2.0的服务,安全性,便捷性都要比1.0强。这个也是早晚的事情。但是由于discuz官方提供的方案不是对所有的网站都有效,很多站长就碰到了各种问题。
经过排查调试,对这个错误通过一些解决方法,供大家在解决中参考。
重要的事情放在前面:
1、开启OAuth2.0登录方式,见猴子的置顶帖(http://www.discuz.net/thread-3664310-1-1.html)。执行那个升级就可以了。(不知道为什么我执行了2次才成功)
2、PHP开启curl方法和openssl。在phpinfo中可以查看到如下。


接下来就是特殊的事,也是问题的集中的地方:
如果你的论坛是X3.2 (X3.1应该也差不多,没分析),那么本身是支持OAuth2.0的登录的。采用猴子的置顶帖的方法是完全可以的。
如果你是X3 或者以下。(本身插件不支持OAuth2.0)
第一步、下载X3.2的源码,把里面的plugin里的qqconnect文件夹(gbk版懒人包 X3.0bgk版本qq互联懒人包.zip (50.15 KB, 下载次数: 0, 售价: 100 金币) 压缩包里面的文件直接覆盖上传到论坛的根目录),去替换你网站上的,并且去后台系统插件里升级,升级后,数据库里2个表会多2个字段,具体如果升级后找不到字段问题,论坛上有解决方法的,搜一下就可以解决,不难。
第二步、执行下猴子置顶帖中的那个升级程序。
http://www.discuz.net/thread-3664310-1-1.html

第三步、把X3.2的源码里的plugin/manyou这个插件放到你的网站的对应plugin里的位置。
这个manyou是云服务的一些方法在里面。X3是在api/manyou里,所以我估计替换manyou/Server这个文件夹也是可行的。

第四步,做一些兼容的代码改动
主要是针对多出来的conuintoken这个字段做兼容。 X3.0 BGK懒人包: X3.0懒人包.zip (4.38 KB, 下载次数: 1, 售价: 200 金币) (压缩包里面的文件直接覆盖上传到论坛的根目录)
member_connect_logging.php
25行增加:
$conuintoken = $this->connect_guest['conuintoken'];

33行:
//if ($conuin && $conopenid) {
if ($conopenid) {


member_connect_register.php

63行,增加
$conuintoken = $this->connect_guest['conuintoken'];

69左右
        //if (!$conuin || !$conuinsecret || !$conopenid) {
        //        showmessage('qqconnect:connect_get_request_token_failed');
//        }

改为

        if(!$_G['setting']['connect']['oauth2']) {
                if (!$conuin || !$conuinsecret || !$conopenid) {
                        showmessage('qqconnect:connect_get_request_token_failed');
                }
        } else {
                if (!$conuintoken || !$conopenid) {
                        showmessage('qqconnect:connect_get_request_token_failed');
                }
        }


102增加
'conuintoken' => $conuintoken,
class_cloud.php
43行
$file = DISCUZ_ROOT . ‘/api/manyou/' . implode('/', $items) . '.php';

改为
$file = DISCUZ_ROOT . '/source/plugin/manyou/' . implode('/', $items) . '.php';

关键一步
DX3.2中的function_filesock 替换 source/function中的 function_filesock.php

最后,对小白用户,提供一个检测脚本,解压缩后把里面的qqtest.php 放到bbs根目录,然后url中打开就可以。
如果没有出现 YOU should install and open Curl_PHP 的提示,那么你的环境是正确的。CURL和ssl都是可以用的。
qqtest.php.zip (1.08 KB, 下载次数: 634)
附:判断OAuth2.0是否启用的方法。点击qq登录后跳到的地址是下面这个,就是1.0的
  1. http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize?oauth_consumer_key=xxxxxx&oauth_token=xxxxxx
复制代码
跳到下面这个地址,就是2.0的
  1. http://openapi.qzone.qq.com/oauth/show?which=Login&display=pc&response_type=code&client_id=xxxx&redirect_uri=http%3A%2F%2Fwww.discuz.net%2Fconnect.php%3Fmod%3Dlogin%26op%3Dcallback%26referer%3Dforum.php%253Fmod%253Dviewthread%2526tid%253D3195653%2526extra%253Dpage%25253D1%2526page%253D1&state=xxxxx&scope=get_user_info%2Cadd_share%2Cadd_t%2Cadd_pic_t%2Cget_repost_list
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 18:04 , Processed in 0.051441 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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