OAuth2.0 的服務,安全性,便捷性都要比 1.0 強。這個也是早晚的事情。但是由於 discuz 官方提供的方案不是對所有的網站都有效,很多站長就碰到了各種問題。
薇曉朵官網近期也出現了這個問題,已經嘗試過很多方法,一直沒成功。經過排查調試,對這個錯誤通過一些解決方法,供大家在解決中參考。
重要的事情放在前面:
1 、開啓 OAuth2.0 登錄方式,見猴子的置頂帖。執行那個升級就可以了。
2 、 PHP 開啓 curl 方法和 openssl 。在 phpinfo 中可以查看到如下。


接下來就是特殊的事,也是問題的集中的地方:
如果你的論壇是 X3.2(X3.1 應該也差不多,沒分析),那麼本身是支持 OAuth2.0 的登錄的。
在確保此功能正常的情況下,下載本帖所附的附件,更新到 QQ 互聯插件目錄 (source/plugin/qqconnect),然後訪問 URL 。
如您不瞭解如何開啓此功能,請聯繫您的服務商解決。
http://yourwebsite/plugin.php?id=qqconnect:oauth_switch 切換到 oAuth2 模式
切換完畢後刪除 oauth_switch.inc.php 文件
qqconnect_oauth_switch.zip
如果你是 X3 或者以下。 (本身插件不支持 OAuth2.0)
第一步、下載 X3.2 的源碼,把裏面的 plugin 裏的 qqconnect 文件夾,去替換你網站上的,並且去後台系統插件裏升級,升級後,數據庫裏 2 個表會多 2 個字段,具體如果升級後找不到字段問題,論壇上有解決方法的,搜一下就可以解決,不難。
第二步、在確保此功能正常的情況下,下載本帖所附的附件,更新到 QQ 互聯插件目錄 (source/plugin/qqconnect),然後訪問 URL 。
如您不瞭解如何開啓此功能,請聯繫您的服務商解決。
http://yourwebsite/plugin.php?id=qqconnect:oauth_switch 切換到 oAuth2 模式
切換完畢後刪除 oauth_switch.inc.php 文件
qqconnect_oauth_switch.zip
第三步、把 X3.2 的源碼裏的 plugin/manyou 這個插件放到你的網站的對應 plugin 裏的位置。
這個 manyou 是雲服務的一些方法在裏面。 X3 是在 api/manyou 裏,所以我估計替換 manyou/Server 這個文件夾也是可行的。
第四步,做一些兼容的代碼改動
主要是針對多出來的 conuintoken 這個字段做兼容。
- 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');
- }
- }
- 90 行左右增加
- '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
附:判斷 OAuth2.0 是否啓用的方法。點擊 qq 登錄後跳到的地址是下面這個,就是 1.0 的
- http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize?oauth_consumer_key=xxxxxx&oauth_token=xxxxxx
跳到下面這個地址,就是 2.0 的
- http://openapi.qzone.qq.com/oauth/show?which=Login&display=pc&response_type=code&client_id=xxxx&redirect_uri=http%3A%2F%2Fwww.weixiaoduo.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