Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[新问题] 【终极解决方案】QQ互联登录connect_error_code_20003错误,code_0错误

[复制链接]
bugx 发表于 2015-9-7 14:10:17 | 显示全部楼层 |阅读模式
本帖最后由 bugx 于 2015-9-30 10:06 编辑

最新出现这个connect_error_code_20003问题,主要原因是QQ登录OAuth1.0的服务变得极不稳定了。
OAuth2.0的服务,安全性,便捷性都要比1.0强。这个也是早晚的事情。但是由于discuz官方提供的方案不是对所有的网站都有效,很多站长就碰到了各种问题。
经过排查调试,对这个错误通过一些解决方法,供大家在解决中参考。
重要的事情放在前面:
1、开启OAuth2.0登录方式,见猴子的置顶帖。执行那个升级就可以了。(不知道为什么我执行了2次才成功)
2、PHP开启curl方法和openssl。在phpinfo中可以查看到如下。




接下来就是特殊的事,也是问题的集中的地方:
如果你的论坛是X3.2 (X3.1应该也差不多,没分析),那么本身是支持OAuth2.0的登录的。采用猴子的置顶帖的方法是完全可以的。


如果你是X3 或者以下.X3可以直接使用下面方法,X2.5行数需要自己找一下,或者参考96楼的给出的方法。X2.5以下的只能作为参考,还需要修改其他的相关地方。(本身插件不支持OAuth2.0)
第一步、下载X3.2的源码,把里面的plugin里的qqconnect文件夹,去替换你网站上的,并且去后台系统插件里升级,升级后,数据库里2个表会多2个字段,具体如果升级后找不到字段问题,论坛上有解决方法的,搜一下就可以解决,不难。
第二步、执行下猴子置顶帖中的那个升级程序。
https://discuz.dismall.com/thread-3664310-1-1.html

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

第四步,做一些兼容的代码改动
主要是针对多出来的conuintoken这个字段做兼容。
  1. member_connect_logging.php
  2. 25行:
  3. $conuintoken = $this->connect_guest['conuintoken'];

  4. 33行:
  5. //if ($conuin && $conopenid) {
  6. if ($conopenid) {


  7. member_connect_register.php

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

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

  14. 改为

  15.         if(!$_G['setting']['connect']['oauth2']) {
  16.                 if (!$conuin || !$conuinsecret || !$conopenid) {
  17.                         showmessage('qqconnect:connect_get_request_token_failed');
  18.                 }
  19.         } else {
  20.                 if (!$conuintoken || !$conopenid) {
  21.                         showmessage('qqconnect:connect_get_request_token_failed');
  22.                 }
  23.         }


  24. 102增加
  25. 'conuintoken' => $conuintoken,

复制代码
  1. class_cloud.php
  2. 43行
  3. $file = DISCUZ_ROOT . ‘/api/manyou/' . implode('/', $items) . '.php';

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

  6. 关键一步
  7. DX3.2中的function_filesock 替换 source/function中的 function_filesock.php
复制代码



最后,对小白用户,提供一个检测脚本,解压缩后把里面的qqtest.php 放到bbs根目录,然后url中打开就可以。
如果没有出现 YOU should install and open Curl_PHP 的提示,那么你的环境是正确的。CURL和ssl都是可以用的。



附:判断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%2Fdiscuz.dismall.com%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
复制代码


9月30日更新(9月8号的补丁qqconnect复制的时候放错了一个老版本。member目录下文件错误问题已经修正了,漏掉了一个目录,居然这么多人没发现。。。。)。做成了一个补丁文件,不会改的直接用。里面有说明,此补丁只适用X3



另外一个环境问题:
不少人在升级QQ互联插件后,显示502 Bad Gateway的错误。
这种错误是PHP扩展冲突引起的,某个php和某个openssl版本之间冲突
一般是curl插件和openssl引起的。
表现在curl请求https的时候出现php崩溃。在日志里可能可以看到错误。

网上有很多解决方法,都可以试试
1、重新编译PHP,禁用SQLITE模块。
2、升级新版本PHP


参考:
http://bbs.51cto.com/thread-1077956-1-1.html
http://stackoverflow.com/questio ... request-a-https-url
https://bugs.php.net/bug.php?id=19301
https://bugs.php.net/bug.php?id=47616




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

6

查看全部评分

ARCHY` 发表于 2015-9-7 14:27:43 | 显示全部楼层
支持下

如果是X3以上版本出现错误,可以参考下最近QQ互联问题 的整体解决思路和具体方案
http://bbs.zb7.com/thread-529717-1-1.html

回复

使用道具 举报

monkeye 发表于 2015-9-7 14:36:04 | 显示全部楼层
conuintoken 的部分本来就是字段缺失,补充上就是了,说复杂了!
回复

使用道具 举报

asp/php/.net 发表于 2015-9-7 14:53:43 | 显示全部楼层
楼主,你通过上面的办法,解决问题了吗。 这算官方的方案吗

我是 x2.5 貌似改的地方还挺多的。
回复

使用道具 举报

asp/php/.net 发表于 2015-9-7 14:57:23 | 显示全部楼层
monkeye 发表于 2015-9-7 14:36
conuintoken 的部分本来就是字段缺失,补充上就是了,说复杂了!

字段缺失啥意思?  管理员这个方案可以采纳不,需要备份啥东西吗,我是x25
回复

使用道具 举报

 楼主| bugx 发表于 2015-9-7 15:09:13 | 显示全部楼层
monkeye 发表于 2015-9-7 14:36
conuintoken 的部分本来就是字段缺失,补充上就是了,说复杂了!

针对不同的版本,官方应该出一个补丁包嘛。这个毕竟是一个大问题
回复

使用道具 举报

继续莣竨妳 发表于 2015-9-7 15:10:45 | 显示全部楼层
终于看到管理员跟帖了
回复

使用道具 举报

asp/php/.net 发表于 2015-9-7 15:11:00 | 显示全部楼层
bugx 发表于 2015-9-7 15:09
针对不同的版本,官方应该出一个补丁包嘛。这个毕竟是一个大问题

那就等补丁包了
回复

使用道具 举报

kp_dcr 发表于 2015-9-7 15:15:44 | 显示全部楼层
感动于楼主的热心和孜孜以求精神,终于为大家做了一件天大的好事。
回复

使用道具 举报

乄慕灬幽羽 发表于 2015-9-7 15:29:27 | 显示全部楼层
请问第四步是修改哪个文件
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 08:38 , Processed in 0.028822 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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