接入QQ第三方登录

一、登录QQ互联申请为开发者并创建网站应用

https://connect.qq.com/index.html
在这里插入图片描述
在这里插入图片描述
网站名称这儿必须填备案好的网站的那个名称!否则不予通过!
在这里插入图片描述
申请成功后appid和app key以及网站回调域就能使用:
在这里插入图片描述

二、放置登录按钮

在这里插入图片描述
给其加个超链接,通过http去访问一个接口。

三、获取Authorization Code值

请求地址:https://graph.qq.com/oauth2.0/authorize

参数是否必须含义
response_type必须滴写死的,值为“code”
client_id必须滴你应用的appid
redirect_uri必须滴回调地址
state必须滴client端的状态值(可随意如:test)
成功后返回:
在这里插入图片描述
code就是Authorization Code。

四、通过Authorization Code获取Access Token

请求地址:https://graph.qq.com/oauth2.0/token

参数是否必须含义
grant_type必须滴写死的,值为“authorization_code”
client_id必须滴你应用的appid
client_secret必须滴你应用的appkey
code必须滴上一步所获取的code值
redirect_uri必须滴你的回调地址
注意(有坑):grant_type值就为authorization_code(而不是code值!)
成功后返回:
在这里插入图片描述

五、通过Access Token获取openid

请求地址:https://graph.qq.com/oauth2.0/me

参数是否必须含义
access_token必须滴上一步所获取到的access_token
成功后返回:
在这里插入图片描述

六、通过access_token、appid、openid来获取用户信息

请求地址(有多个):https://graph.qq.com/user/get_user_info

参数是否必须含义
access_token必须滴上上一步所获取到的access_token
appid必须滴申请成功应用上的appid
openid必须滴上一步所获取到的openid
成功后返回:
在这里插入图片描述
至此,QQ第三方登录就完成了。

—————————————————————————————————————————
下面贴出我的回调地址文件中的代码,之前为了赶速度写的,没有进行优化,很乱,但是最终能返回用户的所有信息:

<?php
$code=$_GET['code'];
function curl($url,$postData=[],$headers=[]){
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);      //要访问的地址
    curl_setopt($ch,CURLOPT_HEADER,0);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);     //执行结果是否被返回,0返,1不返
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    if($postData){
        curl_setopt($ch,CURLOPT_TIMEOUT,60);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);
    }
    if(curl_exec($ch)==false){
        $data='';
    }
    else{
        $data=curl_multi_getcontent($ch);
    }
    curl_close($ch);javascript:;
    return $data;
}
$token=curl("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=xxxxxxxxx&client_secret=xxxxxxxxxxx&code=$code&redirect_uri=http://qq.wangchuangcode.cn/callback.php");
$arry = explode('&',$token);
$arr = array_values($arry);
$arrs = $arr[0];
$ar = explode('=',$arrs);
$access_token = $ar[1];
$datas = curl("https://graph.qq.com/oauth2.0/me?access_token=$access_token");

$result ="";
preg_match_all("/(?:\{)(.*)(?:\})/i",$datas, $result);
$opjs = $result[0][0];
$opjson = json_decode($opjs,true);
$client_id = $opjson["client_id"];
$openid = $opjson["openid"];
$appid = 101551472;
$op_return = curl("https://graph.qq.com/user/get_user_info?access_token=$access_token&appid=$appid&openid=$openid");
$opjson = json_decode($op_return,true);
//$opjson是返回的用户所有信息
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 Java 中使用 QQ 第三方登录,你需要先在 QQ 互联网站上注册应用,并获取应用的 appId 和 appKey。 然后,你可以使用第三方库来处理 QQ 登录的流程。具体来说,你可以使用类似于 `qq-connect-sdk` 这样的库,它可以帮助你完成获取授权码、获取令牌、获取用户信息等步骤。 以下是一个使用 `qq-connect-sdk` 进行 QQ 登录的简单示例: ```java import com.qq.connect.QQConnectException; import com.qq.connect.api.OpenID; import com.qq.connect.api.qzone.UserInfo; import com.qq.connect.javabeans.AccessToken; import com.qq.connect.javabeans.qzone.UserInfoBean; import com.qq.connect.oauth.Oauth; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class QQLoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取授权码 String authorizeCode = request.getParameter("code"); if (authorizeCode == null) { // 若用户尚未授权,则重定向到 QQ 授权页面 String redirectUrl = new Oauth().getAuthorizeURL(request); response.sendRedirect(redirectUrl); return; } // 获取令牌 AccessToken token; try { token = new Oauth().getAccessTokenByRequest(request); } catch (QQConnectException e) { throw new ServletException(e); } // 获取 OpenID OpenID openIDObj = new OpenID(token.getAccessToken()); String openID; try { openID = openIDObj.getUserOpenID(); } catch (QQConnectException e) { throw new ServletException(e); } // 获

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值