请在Chrome、Firefox、IE8+等现代浏览器浏览本站。 本博客所有文章为原创,图片不加水印,随意转载,但请注明来源,谢谢!

DiscuzX论坛 – QQ登陆时不时20003的解决方案

后端 kxjhwbb 1796℃ 0评论

问题原因

是否发现dz最近时常出现Error20003错误? 但有时候又可以??

并不是Dz官方论坛说的你服务器问题或是你改错了什么,而是Oauth1.0已经不再被腾讯支持。

其实傻子都知道,原本可以,什么都没改,某段时间开始不行,肯定是接口方的问题,当然了,Dz官方论坛的版主基本都会说是你服务器的问题。

其实腾讯开放平台官方早就宣布2013年开始放弃Oauth1.0,但到现在依然弄的半死不活的,X3.2虽然以及有2.0的接口,但程序用的是1.0。

即不完全关闭Oauth1.0,间歇性可用,也不完整的把Dz从Oauth1.0过渡到Oauth2.0(即便是dz官方论坛,腾讯微博分享也是废的,不信自己试试)。

原因是什么不清楚,暂且猜测是故意这样拖泥带水,让大部分小白论坛管理用不了吧。

解决方案:手动升级到2.0

无论什么版本,需要你的环境支持OpenSSL以及Curl

你可以随便建立一个php文件,执行phpinfo()来查看是否支持。

随后,用以下代码自行建立一个切换2.0文件oauth_switch.inc.php,放在/source/plugin/qqconnect,懂的可以自己改数据库:

执行 http://yourwebsite/plugin.php?id=qqconnect:oauth_switch 切换到 oAuth2 模式,这仅仅是改了配置,改动后请注意删掉文件

如果你是最新版的DiscuzX,且环境无问题,那么QQ登陆到此完成升级,你会发现登陆界面和原来的不一样了。

X3.0或以下

因为程序代码本来没有支持Oauth2,需要修改很多东西,没有基础或探索能力的童鞋建议找人帮忙。

步骤:

1、准备好最新版本的DiscuzX,提取出里面的

/source/plugin/qqconnect

/source/plugin/manyou

/source/function/function_filesock.php

2、备份好以下数据库:common_member_connectcommon_connect_guest,这两个数据库将会升级,各增加一个字段conuintoken

这里介绍一下升级的本质:

Oauth1.0需要字段:conopenid、conuin、conuinsecret

Oauth2.0需要字段:conopenid、conuintoken, 这将使你更好的理解后续文件改动。

3、把最新版提取出来的两个文件夹都放到你网站的/source/plugin/,建议备份原有的qqconnect以防不测。manyou不必,旧版在/api/里。

4、function_filesock.php文件替换你网站同目录的文件,function_filesock.php非常关键,否则你将看到error_0

5、到你的网站后台=》应用,升级你的QQ互联插件。这时数据库将被添加字段。

6、基本文件已经支持Oauth2.0,系统设置也已经是2.0,接下来作一些剩余的修改,非常关键;

/source/module/member/member_connect_logging.php

找到$conopenid = $this->connect_guest['conopenid'];

在下一行加入$conuintoken = $this->connect_guest['conuintoken'];

找到if ($conuin && $conopenid)

修改为if ($conopenid),是否可以加入conuintoken,有待研究。

/source/module/member/member_connect_register.php

同样找到$conopenid = $this->connect_guest['conopenid'];

在下一行加入$conuintoken = $this->connect_guest['conuintoken'];

找到if (!$conuin || !$conuinsecret || !$conopenid) {

将整个if块换成:

若你觉得这样太啰嗦,可以直接换成:

/source/class/class_cloud.php

找到$file = DISCUZ_ROOT . '/api/manyou/' . implode('/', $items) . '.php';

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

这是为了对接新版本的manyou转移到了plugin里,你可以选择不改这里,把manyou丢到api里。

7、这样就完成了。

关于腾讯微博同步

实际上接口是可用的,不过最新版的DiscuzX也用不了,因为同步部分依然是1.0,大家知道该怎么做了。

即便是DiscuzX2.5也可以实现,不过需要改动更多: http://www.zuimc.com

该论坛已实现:发帖自动发微博(可带图)、手动微博分享(可带图),且兼容远程附件。

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址