phpcms QQ登錄無法正常登錄
來源:程序員人生 發布時間:2015-05-21 16:07:27 閱讀次數:13174次
現在大家應該發現。所有phpcms的網站,QQ互聯也就是QQ一鍵登錄都用不了的。不知道大家發現一個問題沒有,官方的phpcms.cn網站之前都是可以用QQ登陸的,現在也不行了,原因是騰訊有更新,而官方phpcms系統更新太慢,不知道那些大爺在干什么。
首頁,我們來看看騰訊有啥子更新呢
對于大家這個更新如果沒玩過QQ互聯的大家也許不懂,我來解釋下

上圖所示,左邊是QQ互聯申請的后臺地址,右邊是phpcms后臺填寫的回調地址。
phpcms回調地址必須填寫http://網站域名/index.php?m=member&c=index&a=public_qq_loginnew才能使用
而現在呢,騰訊qq的回調地址不允許帶參數,否則無法提交,并且要與phpcms地址的回調地址一致,才能使用。qq互聯回調地址和phpcms管理中心的回調地址不一樣導致qq登錄報錯:redirect uri is illegal(100010)
那么問題來了,phpcms必須要帶參數才能使用,而騰訊帶上參數又不讓使用,這不是很矛盾嗎。到底如何解決這個問題呢,肯定不能讓騰訊修改規則,而phpcms官方更新太慢。今天下午我看網上有人搜索這個問題,自己研究了下,現在公布給大家
首頁第一步,將騰訊和phpcms后臺的qq回調地址統一設置成你自己的網站域名www.vxbq.cn(下面說明中,網站都以本網站www.vxbq.cn做說明,你自己填寫的時候,寫上你自己的網站域名即可)。
經過第一步后,點擊自己網站上面的QQ登陸按鈕,會顯示登陸成功,并且登陸后直接返回了首頁(其實沒有登陸成功,只是讀取了騰訊openid的數據,返回到了網站首頁,phpcmss沒有做任何登陸操作)
第二步,將第一步的中,騰訊qq和phpcms的網站回調地址改成www.vxbq.cn/qqcode
重復第一步登陸QQ,登陸成功后,返回首頁,大家注意瀏覽器url地址為。www.vxbq.cn/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62
現在接下來的目標是,將www.vxbq.cn/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62 這個地址,指向http://www.vxbq.cn/index.php?m=member&c=index&a=public_qq_loginnew&code=3CD919E33C50BAC0D6D56ABAC926CA62
這樣phpcms才會處理騰訊返回過來的qq信息
第三步,偽靜態處理
將更目錄下.htaccess文件 加入
RewriteCond %{QUERY_STRING} ^code=(.*)$
RewriteRule ^qqcode index.php?m=member&c=index&a=public_qq_loginnew&code=%1 [L]
這里不同的服務器規則不一樣,我的是apache
現在大家明白第二步中URL為什么后臺加個尾巴qqcode了吧,只是為了方便寫偽靜態而已,沒有別的作用
經過第三步后,大家刷新自己的網站,用QQ登陸,可以顯示登陸成功,也跳轉到了補充信息頁面。
說明:如果你到了這個步驟,如果登陸后頁面是空百的
你的服務器可能因為file_get_contents無法請求https連接。
解決方案有3:
1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;刪掉,重啟服務就可以了。
2.linux下的PHP,就必須安裝openssl模塊,安裝好了以后就可以訪問了。
3.如果服務器你不能修改配置的話,那么就使用curl函數來替代file_get_contents函數,當然不是簡單的替換,還有相應的參數配置才能正常使用curl函數。
我的網站就出現了空白,用網上搜索的方法一解決的,如果你網站不是空白,請忽略上面的文字,直接看下面圖片吧,更坑爹呢

尼瑪,好不容到了這步了,為啥用戶名和昵稱是亂碼。
解決方法:
在phpcms/modules/member/index.php 大概第1348行
$connect_username = $user['nickname']; 改成$connect_username = $user;
if里面兩個地方都要改

然后再重復登陸操作
這樣就正常了。按道理來說,這里注冊后,綁定QQ就能登陸了。可是,尼瑪,不管輸入什么都是說系統已經存在!!
真的是一步一個坑啊,今天研究到這里,后面的慢慢來弄吧,希望大家踴躍給我留意,把下面的問題一起來解決
持續更新中(已解決上述問題)
首先感謝各位網友對這篇文章的支持
上述ajaxValidator表單驗證出錯的原因是,啟用了偽靜態,導致ajax提交地址出錯
修改方法:
打開網站文件/templates/default/member/connect.html
找到下面代碼
-
- url : "",
- data :"m=member&c=index&a=public_checkname_ajax",
- 替換成
- url : "http://www.vxbq.cn/index.php?m=member&c=index&a=public_checkname_ajax",
- data :"http://www.vxbq.cn/index.php?m=member&c=index&a=public_checkname_ajax",
-
-
- url : "",
- data :"m=member&c=index&a=public_checkemail_ajax",
- 替換成
- url : "http://www.vxbq.cn/index.php?m=member&c=index&a=public_checkemail_ajax",
- data :"http://www.vxbq.cn/index.php?m=member&c=index&a=public_checkemail_ajax",
-
-
- url : "",
- data :"m=member&c=index&a=public_checknickname_ajax",
- 替換成
- url : "http://www.vxbq.cn/index.php?m=member&c=index&a=public_checknickname_ajax",
- data :"http://www.vxbq.cn/index.php?m=member&c=index&a=public_checknickname_ajax",
總共需要提供的地方有三個,分別是用戶名驗證,郵箱驗證,昵稱驗證,代碼分別在第202行,第221行和238行左右

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈