QQ登录功能实现
原因:公司的注冊與登錄不再像以前那樣子使用自定義的賬號密碼登錄了,要改成方便的微信掃碼登錄與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
總結
- 上一篇: 教你如何免费使用微商工具,微信上一键添加
- 下一篇: 30天敏捷结果(12):效率角色-你是启