1. 程式人生 > >QQ互聯登入PHP-SDK invalid openid錯誤—解決方法

QQ互聯登入PHP-SDK invalid openid錯誤—解決方法

fayhot遊戲賬號改用社交登陸,支援微博,騰訊qq,人人網賬號登陸。

微博和人人的sdk都比較規範,呼叫方式和流程也比較一致。

QQ的就。。。流氓本色。難用到無以復加。基本沒法用。

一上來就出問題。

部署了PHP-SDK之後,出現有時能登入,有時不能登入的情況,錯誤提示是:-1 client request’s parameters are invalid, invalid openid

當時就傻眼了,情不自禁的冒出一句,”我操”,都不是”我擦”.

從readme到幫助文件,再到install和config配置以及example,這尼瑪那裡是個sdk啊,這根本就是個“騰訊臨時工”寫的測試指令碼吧。。。

為了相容人人和微博的流程與呼叫方式,重寫了qq聯合登陸的sdk,自己實現了oauth2.0授權。

但是針對標題中的問題,解決起來,其實比較簡單。關鍵是文件和編碼規範太差勁,才讓人覺得望而生畏。

尤其是畫蛇添足的弄一個config.inc和自動檔案儲存授權認證中間code,token等,簡直喪盡天良,程式碼強耦合,改都沒法改。

QQ和人人、微博社交正好登陸稍有區別,是在授權後並不返回使用者uid,取而代之是返回openid,用於標示使用者身份。

通過openid,access_token,appid來讀取介面資訊,比如get_user_info等等。

解決標題中說的問題,其實很簡單:

require_once("API/qqConnectAPI.php");

$qc = new QC();

$acs = $qc->qq_callback();//callback主要是驗證 code和state,返回token資訊,並寫入到檔案中儲存,方便get_openid從檔案中度

$oid = $qc->get_openid();//根據callback獲取到的token資訊得到openid,所以callback必須在openid前呼叫

$qc = new QC($acs,$oid);

$uinfo = $qc->get_user_info();

至於為什麼很多人都會遇到這個問題,就更簡單了,還是由於上面提到的那份喪盡天良的examples的demo.

QQ的sdk會自動檢測使用者是否填寫認證資訊,沒有填寫的話就自動去檔案裡讀取。而example裡沒有

$qc = new $qc->qq_openid();//沒有獲取到openid,請求api介面,所以會返回error,invalid openid