首发于学习

网站应用接入QQ登陆(QQ互联)

接入QQ登陆(QQ互联)

官方文档:

https://wiki.connect.qq.com/%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c_oauth2-0

接入步骤:

1. 申请appid和appkey

传送门:connect.qq.com/manage.h

登陆成功后,创建一个新的应用(网站应用)



申请成功后可以看到:appid 和 appkey

2.放置QQ登陆按钮

1. 下载“QQ登录”按钮图片,并将按钮放置在页面合适的位置

按钮图片下载: 点击这里下载 。按照UI规范,将按钮放置在页面合适的位置:点击这里查看

2.为“QQ登录”按钮添加前台代码

用户在页面上点击“QQ登录”按钮,将触发QQ登录对话框,效果如下图所示

登陆按钮链接地址:

graph.qq.com/oauth2.0/a

之后等待审核,审核通过进行第三步

3.使用code获取Access_Token

参数说明:

获取代码
 /**
  * qq getAccessToken
  * @param code
  * @return
  */
 private String getAccessToken(String code){
     CloseableHttpClient client = HttpClients.createDefault();
     HttpGet get = new HttpGet(tokenUri + "?grant_type=authorization_code&fmt="+fmt + "&client_id="+appid + "&client_secret="+secret+"&code="+code+"&redirect_uri="+redirectUri);
     CloseableHttpResponse response = null;
     try {
         response = client.execute(get);
         HttpEntity entity = response.getEntity();
         String data = EntityUtils.toString(entity, "utf8");
         return JSON.parseObject(data).getString("access_token");
     }catch (IOException ignored){
 
     }finally {
         try {
             client.close();
             if (response != null){
                 response.close();
             }
         } catch (IOException ignored) {
         }
     }
     return null;
 }

4.获取用户OpenID_OAuth2.0

参数说明:

获取代码
 /**
  * qq getOpenId
  * @return
  */
 private String getOpenId(String accessToken){
     CloseableHttpClient client = HttpClients.createDefault();
     HttpGet get = new HttpGet("https://graph.qq.com/oauth2.0/me?fmt="+fmt +"&access_token="+accessToken);
     CloseableHttpResponse response = null;
     try {
         response = client.execute(get);
         HttpEntity entity = response.getEntity();
         String data = EntityUtils.toString(entity, "utf8");
         return JSON.parseObject(data).getString("openid");
     }catch (IOException ignored){
 
     }finally {
         try {
             client.close();
             if (response != null){
                 response.close();
             }
         } catch (IOException ignored) {
         }
     }
     return null;
 }

5.获取用户信息

参数说明:

获取代码
 private JSONObject getUserInfo(String accessToken,String openId){
     String u = "https://graph.qq.com/user/get_user_info?access_token=YOUR_ACCESS_TOKEN&oauth_consumer_key=YOUR_APP_ID&openid=YOUR_OPENID";
     u = u.replace("YOUR_ACCESS_TOKEN",accessToken).replace("YOUR_APP_ID",appid).replace("YOUR_OPENID",openId);
     CloseableHttpClient client = HttpClients.createDefault();
     HttpGet get = new HttpGet(u);
     CloseableHttpResponse response = null;
     try {
         response = client.execute(get);
         HttpEntity entity = response.getEntity();
         String data = EntityUtils.toString(entity, "utf8");
         return JSON.parseObject(data);
     }catch (IOException ignored){
 
     }finally {
         try {
             client.close();
             if (response != null){
                 response.close();
             }
         } catch (IOException ignored) {
         }
     }
     return null;
 }

返回示例:

 {
 "ret":0,
 "msg":"",
 "nickname":"Peter",
 "figureurl":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/30",
 "figureurl_1":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/50",
 "figureurl_2":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100",
 "figureurl_qq_1":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/40",
 "figureurl_qq_2":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/100",
 "gender":"男",
 "is_yellow_vip":"1",
 "vip":"1",
 "yellow_vip_level":"7",
 "level":"7",
 "is_yellow_year_vip":"1"
 }

来源:

发布于 2021-02-15 19:30