您的位置:首页 > 其它

QQ登录功能实现

2017-08-12 00:00 288 查看
原因:公司的注册与登录不再像以前那样子使用自定义的账号密码登录了,要改成方便的微信扫码登录与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_typecode 固定参数
client_idAPPID 创建应用后所获得
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_typerefresh_token 固定参数
client_idAPPID
client_secretAPPKEY(创建应用所产生的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_tokenaccess_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_tokenaccess_token
oauth_consumer_keyAPPID
openidOPENID
8. 获取用户信息

参数说明
ret返回码
msg对应错误信息
is_lost是否丢失
nicknameQQ呢称
gender性别
province省份
city城市
year年份
figureurl30X30的头像图片地址
figureurl_150X50的头像图片地址
figureurl_2100X100的头像图片地址
figureurl_qq_140X40的头像图片地址
figureurl_qq_2100X100的头像图片地址
is_yellow_vip黄钻用户
vip黄钻用户
yellow_vip_level黄钻等级
level黄钻等级
is_yellow_year_vip是否为年费黄钻用户
结语
坑爹腾讯,两次返回的数据格式都不同,每次都要自己写函数,觉得做API开发最好的就是阿里了,几乎没有难度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QQ登录 QQ 登录