javaweb应用网站实现第三方QQ登入过程

腾讯开发文档入口

今天实现了web应用第三方QQ登入,由于我当时只看了开发文档中实现登入的流程,没有看SDK中的demo,所以SDK中的工具我没有用到。其实只要知道流程,完全可以不借助它的SDK也能实现第三方登入。当然,既然是别人自家开发的,用起来一般比我们自己编写要高效得多。下面我就将实现的流程及遇到的问题分享一下,由于代码涉及到个人应用私密信息故没有上传,望谅解

下面五步是准备工作:

第一步:在腾讯开发平台注册成为开发者,这里不多说

 

第二步:创建应用等待审核通过:

网站地址:你的网站域名或ip

回调地址:当用户QQ登入成功时会请求你指定处理数据的URL

主办单位名称:你的服务器备案的主办单位名称

网站备案号:服务器的备案号

 

第三步:审核通过后就会给你的应用分配APP ID和APP Key,这些是后续申请要用的,不要轻易透露给他人

 

第四步:在开发平台下载java SDK,将里面的jar包放到web应用的lib文件夹,qqconnectconfig.properties为配置文件放到src下就行(如图)

ps:如果你懂得了登入的流程并可以自己实现其实可以忽略第4步和第5步,实现登入的流程在后面。

 

第五步:修改qqconnectconfig.properties配置文件的前四行:

app_ID和app_KEY:你申请到的APP ID和APP Key

redirect_URL:你前面应用申请时填写的回调地址

scope:获取用户的哪些权限,一般没有额外申请权限就只能获取用户的基本信息,即get_user_info

 

准备工作完成了,接下来就要开始操作了!

 

第一步:自己写个简单的网页,实现QQ登入的跳转,图标可以在腾讯开放平台下载;

跳转的链接为:

https://graph.qq.com/oauth2.0/authorize?
response_type=code&
client_id=你的APPID&
redirect_uri=回调地址&    //纯数字英文可以不编码,但还是推荐编码,用URLEncoder.encode(url);
state=test&              //state可以自定义值,它是用来防止CSRF攻击,如果成功会原样带回
scope=get_user_info

第二步:跳转后进入到请求登入界面:

用户登入成功后QQ会请求回调地址并在后面带回参数,如:

http://xxxxxxx/qqlogin?code=9A5F************************06AF&state=test

参数说明:

code:就是Authorization Code,后面申请授权令牌要用到,有效期为10分钟

state:是在第一步中传入的state,我们一定要判断这个state是否和第一步的state相等

 

第三步:获得了Authorization Code后,我们在后台请求下面的URL来获取到access_token授权令牌,可以用来获取openID的

https://graph.qq.com/oauth2.0/token?
grant_type=authorization_code&
client_id=你的APPID&
client_secret=你的APPKEY&
code=上一步得到的AuthorizationCode&
redirect_uri=你的回调地址        //纯英文数字可以不编码

请求成功后会返回一个数据包(腾讯开发文档上写的是请求成功后会再次跳转到回调地址,测试后并不会跳转而是返回数据包),如下:

access_token=FE04************************CCE2&        //得到授权令牌
expires_in=7776000&                //令牌有效时间(默认3个月)
refresh_token=88E4************************BE1        //重新获取新的授权令牌需要提供的参数

第四步:获取access_token后,我们再次在后台请求下面的URL来获取openid

https://graph.qq.com/oauth2.0/me?access_token=上一步获取的授权令牌

请求成功后会返回一个数据包,如下:

callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );

这个openid是与用户QQ号唯一对应的,也是我们最终要得到,我们可以将它绑定到用户从而来识别用户;

同时我们可以用这个openid来获取用户QQ上的信息。

第五步:通过openid来获取用户的基本信息,请求URL如下:

https://graph.qq.com/user/get_user_info?
access_token=用户授权令牌&
oauth_consumer_key=你的APPID&
openid=上一步获取到的openid

请求成功返回以下JSON数据包:


"ret": 0, 
"msg": "", 
"is_lost":0, 
"nickname": "可乐配鸡翅_",         //用户昵称
"gender": "男",                    //性别
"province": "广东", 
"city": "深圳", 
"year": "1999",
 "constellation": "",
 "figureurl": "http:\/\/qzapp.qlogo.cn\/qzapp\/xxxxxxx\/30", 
"figureurl_1": "http:\/\/qzapp.qlogo.cn\/qzapp\/101759515\/xxxxxxxx\/50", 
"figureurl_2": "http:\/\/qzapp.qlogo.cn\/qzapp\/101759515\/xxxxxx\/100", 
"figureurl_qq_1": "http://thirdqq.qlogo.cn/g?b=xx&k=xxxx&s=xx&t=xxxxxx",     //这个是用户40x40像素的头像URL
"figureurl_qq_2": "http://thirdqq.qlogo.cn/g?b=xxx&k=xxxxx&s=xx&t=xxxxxx", //这个是用户100x100像素的头像URL
"figureurl_qq": "http://thirdqq.qlogo.cn/g?b=xxx&k=xxxx&s=xxxx&t=xxxxxxx", 
"figureurl_type": "1", 
"is_yellow_vip": "0", 
"vip": "0", 
"yellow_vip_level": "0", 
"level": "0",
 "is_yellow_year_vip": "0" 
}

我们就可以获取到用户的基本信息了,实现统一登入体验;

如需获取用户更多信息可以在腾讯开放平台申请,具体操作自行查看。

腾讯开放平台入口

 

PS:同一QQ用户的移动应用和网站应用的openid是不一样的,如果我们有移动和网站应用时就不能区别是否是同一用户。

如果要实现用户统一登入体验,可以获取用户的unionid,同一QQ用户下它在移动应用和网站应用都是一样的,请求URL如下:

https://graph.qq.com/oauth2.0/me?access_token=用户的授权令牌&unionid=1

请求成功返回数据包:

callback(
{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unionid":"YOUR_UNIONID"
}
);

我是程序小白,每次进步一丢丢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值