原因:公司的注冊與登入不再像以前那樣子使用自定義的賬号密碼登入了,要改成友善的微信掃碼登入與QQ登入了
教程開始
需要用到的網址:
- https://connect.qq.com/index.html QQ網際網路站
- http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token API文檔
準備工作:
1. 登入你的QQ互聯背景

2. 建立網站應用
3. 弄個開發者認證吧,沒有開發者認證啥都做不了
4. 應用基本資訊
5. 填寫網絡位址(網站域名),填寫網站回調域,這裡的網站回調域就是具體到QQ登入功能的位址(TP5 例: 域名/子產品/控制器/方法)
6. 檢視應用接口中有沒有 get_user_info(API)接口
正式開發
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參數
參數 | 說明 |
---|---|
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參數
這裡騰訊傳回的資料是一個字元串需要我們寫一個自定義函數來擷取參數,以下是本人寫的一個方法
/**
* @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參數
這裡傳回的資料也是一串字元串,但與上面格式又不同,是以需要自己自定義函數擷取參數
//獲得使用者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