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互联后台

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开发最好的就是阿里了,几乎没有难度

原链接:

https://my.oschina.net/u/3554366/blog/1507092

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值