天天看點

QQ登入功能實作

原因:公司的注冊與登入不再像以前那樣子使用自定義的賬号密碼登入了,要改成友善的微信掃碼登入與QQ登入了

教程開始

需要用到的網址:

  1. https://connect.qq.com/index.html QQ網際網路站
  2. http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token  API文檔

準備工作:

1. 登入你的QQ互聯背景

QQ登入功能實作

2. 建立網站應用

QQ登入功能實作

3. 弄個開發者認證吧,沒有開發者認證啥都做不了

QQ登入功能實作

4. 應用基本資訊

QQ登入功能實作

5. 填寫網絡位址(網站域名),填寫網站回調域,這裡的網站回調域就是具體到QQ登入功能的位址(TP5 例: 域名/子產品/控制器/方法)

QQ登入功能實作

6. 檢視應用接口中有沒有 get_user_info(API)接口

QQ登入功能實作

正式開發

1. 發送擷取CODE參數請求,浏覽器打開網址

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=appid&redirect_uri=redirect_uri

參數 是否必須 說明
response_type code 固定參數
client_id APPID 建立應用後所獲得
redirect_uri 網站回調域

2. 擷取CODE參數

QQ登入功能實作
參數 說明
code 擷取ACCESS_TOKEN需要的參數

3. 發送擷取ACCESS_TOKEN的請求

這裡需要寫CURL方法擷取資料

//php curl(GET)請求
public function curlGet($url){
    if(empty($url)){
        return false;
    }
    $output = '';

    $ch = curl_init();
    $str =$url;
    curl_setopt($ch, CURLOPT_URL, $str);
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    $output = curl_exec($ch);
    return $output;
}
           

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=appid&client_secret=appkey&code=$codeInfo[code]&redirect_uri=redirect_uri

參數 是否必須 說明
grant_type  refresh_token 固定參數
client_id APPID
client_secret APPKEY(建立應用所産生的APPKEY)
code 上一步所擷取的code
redirect_uri 網站回調域

4. 擷取ACCESS_TOKEN參數

QQ登入功能實作

這裡騰訊傳回的資料是一個字元串需要我們寫一個自定義函數來擷取參數,以下是本人寫的一個方法

/**
 * @name 解析位址欄參數
 * @auth Sam
 * @param $str
 * @return array|bool
 */
public function formateUrlParam($str)
{
    if(empty($str) || !is_string($str)){
        return false;
    }

    $arr = explode('&',$str);

    $keyValue = array();
    $newArr = array();
    foreach($arr as $k=>$v){
        $keyValue = explode('=',$v);

        $newArr[$keyValue[0]] = $keyValue[1];

        $keyValue = array();

    }

    return $newArr;
}
           
參數 說明
access_token 授權令牌,Access_Token
expires_in 該access token的有效期,機關為秒
refresh_token 在授權自動續期步驟中,擷取新的Access_Token時需要提供的參數

5. 發送擷取OPENID請求

 https://graph.qq.com/oauth2.0/me?access_token=access_token

參數 是否必須 說明
access_token access_token

6. 擷取OPENID參數

QQ登入功能實作

這裡傳回的資料也是一串字元串,但與上面格式又不同,是以需要自己自定義函數擷取參數

//獲得使用者openID
$openId = $this->curlGet("https://graph.qq.com/oauth2.0/me?access_token=$accToken[access_token]");

$openId = trim($openId,"callback( ");

$openId = explode(')',$openId); 
$openId = trim($openId[0],' ');


$openId = json_decode($openId,true);
           

7. 發送擷取使用者資訊請求

https://graph.qq.com/user/get_user_info?access_token=access_token&oauth_consumer_key=appid&openid=openid

參數 是否必須 說明
access_token access_token
oauth_consumer_key APPID
openid OPENID

8. 擷取使用者資訊

參數 說明
ret 傳回碼
msg 對應錯誤資訊
is_lost 是否丢失
nickname QQ呢稱
gender 性别
province 省份
city 城市
year 年份
figureurl 30X30的頭像圖檔位址
figureurl_1 50X50的頭像圖檔位址
figureurl_2 100X100的頭像圖檔位址
figureurl_qq_1 40X40的頭像圖檔位址
figureurl_qq_2 100X100的頭像圖檔位址
is_yellow_vip 黃鑽使用者
vip 黃鑽使用者
yellow_vip_level 黃鑽等級
level 黃鑽等級
is_yellow_year_vip 是否為年費黃鑽使用者

結語

坑爹騰訊,兩次傳回的資料格式都不同,每次都要自己寫函數,覺得做API開發最好的就是阿裡了,幾乎沒有難度

轉載于:https://my.oschina.net/u/3554366/blog/1507092

php