问题原因
是否发现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,懂的可以自己改数据库:
1 2 3 4 5 6 7 8 |
<?php $connect = C::t('common_setting')->fetch('connect', true); $connect['oauth2'] = 1; C::t('common_setting')->update('connect', serialize($connect)); include_once libfile('function/cache'); updatecache('setting'); showmessage('Switch oAuth to oAuth2', $_G['siteurl']); ?> |
执行 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_connect、common_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块换成:
1 2 3 4 5 6 7 8 9 |
if (!$_G['setting']['connect']['oauth2']) {//整个if替换了 wbb change 2015.09.09 if (!$conuin || !$conuinsecret || !$conopenid) { showmessage('qqconnect:connect_get_request_token_failed'); } } else { if (!$conuintoken || !$conopenid) { showmessage('qqconnect:connect_get_request_token_failed'); } } |
若你觉得这样太啰嗦,可以直接换成:
1 2 3 |
if (!$conuintoken || !$conopenid) { showmessage('qqconnect:connect_get_request_token_failed'); } |
③ /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
该论坛已实现:发帖自动发微博(可带图)、手动微博分享(可带图),且兼容远程附件。