腾讯开发文档入口

今天实现了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"
}
);

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

javaweb应用网站实现第三方QQ登入过程相关推荐

  1. win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。

    #问题描述 win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退. #解决方案 开始卸载重装也不行 安装TiM也一样会发生,最后删除找到错误报告提示的c盘 ...

  2. webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法

    webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法..怎么做..求指导

  3. 43.【Java 实现验证码获取 C++实现密码加密和删除和QQ登入系统】

    Java实现验证码信息 (一).简要概述: 1.思路分析 2.代码展示: 3.效果展示: (二).密码加密C++操作 1.基本思路和解析: 2.代码展示: (三).QQ登入系统: 1.建设QQ登入系统 ...

  4. 利用java知识做一个模拟qq登入模拟界面

    qq模拟登入界面 一.设计概述 1.使用java所学知识,做一个qq登入模拟界面,如图所示. QQ登录界面整体可以看做一个容器窗口,使用JFrame容器来实现,从登录界面的布局效果和显示内容可以看出, ...

  5. SpringSecurity+SpringSocial 实现QQ登入(二)

    SpringSecurity+SpringSocial 实现QQ登入(二) 上节我们已经把基本代码写完,接着就是通过配置将其串联起来 配置文件编写 由于SpringBoot 1 跟SpringBoot ...

  6. (5.17)QQ登入视图

    //  ViewController.h //  qq登入器 // //  Created by pg on 14-5-17. //  Copyright (c) 2014年 mqd. All rig ...

  7. 25.【 C/C++ QQ登入系统 (人生中第一个趋形系统)】

    QQ登入系统 (一).建设QQ登入系统的背景. (二).基本头文件 代码展示: 效果展示: (三).总结 (一).建设QQ登入系统的背景. 因为自己有一颗对系统非常敏感的心,所以在本人大一下学期也就是 ...

  8. 仿QQ登入界面增加反应

    上次,咋们做了一个仿QQ登入界面,现在咋们的目标就是让这个界面上的组件有所反应. 这个交互功能需要监听器这个方法来实现. 监听器的实现三步骤 1.事件源:当前动作所发生的组件. 2.监听器:动作方法监 ...

  9. java仿qq gui_Java仿QQ登入页面

    1.[代码][Java]代码 package com.myqq.frame; import java.awt.BorderLayout; import java.awt.Color; import j ...

最新文章

  1. 编译原理:实验一练习
  2. 搭建可视化网页的software package_网页制作与网站搭建步骤教程
  3. iphone电池怎么保养_苹果iPhone手机怎么开启【优化电池充电】
  4. hibernate jpa_JPA / Hibernate:基于版本的乐观并发控制
  5. 从零开始学Go之并发(四):互斥
  6. 【TensorFlow实战】TensorFlow实现经典卷积神经网络之ResNet
  7. python123蟒蛇代码_[蟒蛇菜谱] Python封装shell命令
  8. matlab 小波滤波器,matlab小波滤波器使用
  9. OC中Runtime浅析
  10. 3月24 matlab函数polyfit(x,y,n)分析
  11. Base64编码解码(一)——介绍
  12. 【GANs学习笔记】目录
  13. 腾讯云物联网MQTT对接
  14. Github创建个人博客
  15. 硝烟四起!看三大移动操作系统终极较量
  16. android向apk的META-INF(签名信息)中添加渠道信息
  17. 关于聚类的一些经验及其在R中的实现
  18. Omni/USDT钱包对接PHP开发包
  19. OpenStack一小步,中国开源一大步
  20. 各种各样的资源!屯起来~

热门文章

  1. 计算机辅助设计英语怎么读,计算机辅助设计的英文缩写、计算机辅助设计英语怎么读?...
  2. 门控开关项目--整流桥分析,LED限流电阻选择
  3. PhysX开发环境配置
  4. 二维、三维 曲线曲率计算
  5. C/C++中关于int *p[n]、int(*p)[n]、int*p()和int(*p)()巨详细实例解释
  6. 畜牧业养殖方案SI24R2F+
  7. C++的sizeof函数
  8. 关于sizeof函数、memcpy函数以及结构体关于指针的问题汇总
  9. C++ 自学笔记 菜鸟驿站
  10. PHP反序列化漏洞-CTF实例