QQ互聯登入PHP-SDK invalid openid錯誤—解決方法
阿新 • • 發佈:2019-02-10
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