web实现QQ第三方登录
开放平台-web实现QQ第三方登录
应用场景
操作步骤
登录流程
实现方式
SDK使用
案例实战
1 本地开发环境准备
2 登录跳转页面
<html><head><title>QQ登录跳转</title><script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js" type="text/javascript"></script><script type="text/javascript">//切割字符串转换参数表function toParamMap(str){var map = {};var segs = str.split("&");for(var i in segs){var seg = segs[i];var idx = seg.indexOf('=');if(idx < 0){continue;}var name = seg.substring(0, idx);var value = seg.substring(idx+1);map[name] = value;}return map;}//隐式获取url响应内容(JSONP)function openImplict(url){var script = document.createElement('script');script.src = url;document.body.appendChild(script); }//获得openid的回调function callback(obj){var openid = obj.openid;$("#openid").text(openid);//跳转服务端登录urlvar resulturl = "@{openapi.QQs.login_result()}"; var accessToken = $("#accessToken").text();//向服务端传输access_token及openid参数document.location.href=resulturl + "?access_token=" + accessToken + "&openid=" + openid;}</script></head><body><p>AccessToken:<span id="accessToken"></span>--ExpireIn<span id="expire"></span></p><p>OpenID:<span id="openid"></span></p><!-- 执行脚本 --><script type="text/javascript">//应用的APPIDvar appID = "101207268";//登录授权后的回调地址,设置为当前urlvar redirectURI = "@@{openapi.QQs.login()}";//初始构造请求if (window.location.hash.length == 0){var path = 'https://graph.qq.com/oauth2.0/authorize?';var queryParams = ['client_id=' + appID,'redirect_uri=' + redirectURI,'scope=' + 'get_user_info,list_album,upload_pic,add_feeds,do_like','response_type=token'];var query = queryParams.join('&');var url = path + query;window.location.href= url;}//在成功授权后回调时location.hash将带有access_token信息,开始获取openidelse{//获取access tokenvar accessToken = window.location.hash.substring(1);var map = toParamMap(accessToken);//记录accessToken$("#accessToken").text(map.access_token);$("#expire").text(map.expires_in);//使用Access Token来获取用户的OpenIDvar path = "https://graph.qq.com/oauth2.0/me?";var queryParams = ['access_token='+map.access_token, 'callback=callback'];var query = queryParams.join('&');var url = path + query;openImplict(url);}</script></body> </html>
https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} )
3 server端获取用户信息
/*** 登录结果** @param access_token* @param openid*/public static void login_result(String access_token, String openid) {//调用api获取qq用户信息QQUserInfo user = QQApi.getUserInfo(access_token, openid);//此时若取得user信息,则可以进行保存,并执行用户登录操作....//登录成功后跳转redirect(xxx);}
/*** QQ互联API* * <pre>* 登录流程:* * 1 前端跳转qq授权页面* 2 js获得access_token* 3 通过jsonp方式获得openid* 4 server端根据上传的access_token及openid获取用户信息,如昵称、头像* * 参考文档:* http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_client-side#Step2.EF.BC.9A.E8.8E.B7.E5.8F.96AccessToken* </pre>* * @author xxx* @createDate 2015年3月10日* */ public class QQApi {public static String appId = "xxx";public static String appSecret = "xxx";public static String baseUrl = "https://graph.qq.com";protected static final String URL_GET_USERINFO = baseUrl+ "/user/get_user_info?access_token=%s&oauth_consumer_key=%s&openid=%s";protected static final long ACCESS_TIMEOUT = 15;protected static final String DEF_APP_TOKEN_EXPIRE = "3h";/*** 获取用户信息* * <pre>* http://wiki.connect.qq.com/get_user_info* * * 调用地址:* https://graph.qq.com/user/get_user_info* 参数* access_token=*************&* oauth_consumer_key=12345&* openid* * 返回结果如下:* {* "ret": 0,* "msg": "",* "is_lost": 0,* "nickname": "小吞",* "gender": "女",* "province": "广东",* "city": "广州",* "year": "1993",* "figureurl": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/30",* "figureurl_1": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/50",* "figureurl_2": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/100",* "figureurl_qq_1": "http://q.qlogo.cn/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/40",* "figureurl_qq_2": "http://q.qlogo.cn/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/100",* "is_yellow_vip": "0",* "vip": "0",* "yellow_vip_level": "0",* "level": "0",* "is_yellow_year_vip": "0"* }* </pre>* * @param accessToken* @return*/public static QQUserInfo getUserInfo(String accessToken, String openid) {if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(openid)) {return null;}String url = String.format(URL_GET_USERINFO, accessToken, appId, openid);String resultString = DefaultHttp.get(url, ACCESS_TIMEOUT, GlobalConstants.UTF_8);Logger.debug("[sso-qq]get userinfo. use url '%s'", url);QQUserInfo userinfo = JsonUtil.fromJson(resultString, QQUserInfo.class);if (userinfo == null || !userinfo.hasGot()) {Logger.debug("[sso-qq]get userinfo failed, with result of '%s'", resultString);return null;}Logger.debug("[sso-qq]get userinfo success, with result of '%s'", resultString);return userinfo;}
常见问题
web实现QQ第三方登录相关推荐
- Java Web 实现 QQ第三方登录
java web 实现QQ第三方登录功能 首先点击该链接进入腾讯开放平台 ,注册成为开发者 2.注册成功后到这个页面 3.创建web应用 4.填写基本信息(以前的这里会让你填写回调地址 ,现在改了) ...
- maven的web工程QQ第三方登录HTML、
声明.使用JDK9.idea2018.02 .maven3.5.4.tomcat9 maven的web工程QQ第三方登录接口引入,听起来简单,做完以后也很简单,这里使用 java SDK : 写的文 ...
- web接入QQ第三方登录
原文地址:https://blog.csdn.net/cwfjimogudan/article/details/54135957 这是第三方登录的第二篇,关于web接入微博第三方登录可以参考我之前的博 ...
- web实现QQ第三方登录 开放平台-web实现QQ第三方登录
应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com/ 2 准备一个可访问的域名,如dev.foo.com 3 ...
- springmvc web网站QQ第三方登录实现
首先 申请需要用到的 app_ID 和 app_KEY 具体步骤看这个 https://connect.qq.com/index.html 再申请的时候会有一个框让你输入 ...
- web接入微博第三方登录
微博第三方登录 最近刚好在学习第三方登录,这里先做一下微博第三方登录的记录,因为qq第三方登录必须要完成网站备案后才能进行,后面再进行补充. 大致可以分成下面几个步骤 下面根据我自己的实现过程做一下总 ...
- QQ第三方登录认证流程
一.注册成为QQ开发者 1.进入注册网站:https://connect.qq.com/index.html 2.登录QQ号,点击头像进入认证页面 3.选择"个人开发者",并如实填 ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样 openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一 ...
- QQ第三方登录报错error=-1
qq 第三方登录报错error=-1 再次实例化qc类.
最新文章
- 如何判断 cxgrid 双击了哪一列_唐卡的价值主要体现在哪 如何判断唐卡的价值
- linux kernel内存映射实例分析
- 12c PDB自启动
- python逐行读取json_如何用python读取json文件里指定的数据
- android sdk入门(1)
- 由浅入深剖析go channel
- ARC 101 D - Median of Medians
- SAP CRM HANA report filter的工作原理
- windows文件路径大于MAX_PATH
- 封装动态数组类Array
- js时间对象相关函数
- minecraft_如何使用MultiMC管理Minecraft实例和模组
- 安利个数据库工具dbeaver
- Sublime Text 比较2个文件不同
- 并发并行、串行并行、串口并口的区别
- Access2016删除主键列(图文操作)错误提示:若要删除主键,请在“设计”视图中打开该表并删除主键字段
- c# 阿拉伯数字转成中文
- jquery 自动触发a 标签的click()方法
- AMAX 深度学习服务器重装系统
- 类似快手短视频播放器
热门文章
- 中国社会信任的解体及其结果(zt)
- 华为特聘PPT设计师年薪百万:改变你的不是打卡,而是坚持
- 数据中心的直流电源与交流电源
- 深入剖析FP-Growth原理
- JSP网上鞋子商城网站
- 通信工程专业考研考c语言吗,通信工程专业考研考什么
- Java 的锁-老王女儿的爱情
- java word导出带背景_Java 用Freemarker完美导出word文档(带图片)
- 校验功能算eo还是ilf_CMMI之功能点估算法---内部逻辑文件和外部接口文件
- 【转】Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系