一.登陆QQ互联,创建网站应用or移动应用

地址:http://connect.qq.com/

1.获取appid和app key

2.设置网站地址和回调地址,注:回调地址是用户在网页中登陆QQ后,导航到本网站来处理登陆逻辑的地址

3.可以在不审核通过的时候,设定多个协作者来测试登陆

二.参考OAuth2.0开发文档,分四步获取用户信息

地址:点击打开链接

  • 第一步 根据appid 获取 Authorization Code
  • 第二步 根据Authorization Code 获取Access Token (忽略,自动续期refresh_token)
  • 第三步 根据access_token 获取 OpenID
  • 第四步 根据OpenID 调用OpenAPI 获取用户信息

重要参数说明:

state:client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。

access_token:access_token有3个月有效期。

openid:用户的ID,与QQ号码一一对应。

openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。

注:

1.调用get_user_info接口 参数、返回值说明地址:点击打开链接

2.获取用户的Access Token和OpenID,之后通过调用OpenAPI进行获取用户信息,并进行分享、发表微博或日志、上传图片等更多操作。

其他可用API地址:点击打开链接

三、WebForm代码示例:

1.回调地址处理

    /// <summary>/// QQLoginashx 的摘要说明/// </summary>public class QQLoginashx : IHttpHandler, IRequiresSessionState{RequestHelper _Request = new RequestHelper();LogHelper.LogHelper _log = new LogHelper.LogHelper();private string appid = "101201650";private string appkey = "3aedba9180bf1bc2c88779476c57e7b2";public void ProcessRequest(HttpContext context){HttpResponse resp = context.Response;HttpRequest req = context.Request;HttpServerUtility server = context.Server;HttpSessionState session = context.Session;string thisUrl = req.Url.AbsoluteUri;string code = _Request.GetStringQuery("code");//第一次访问if (code == ""){#region 第一步 根据appid 获取 Authorization CodeStringBuilder builder = new StringBuilder(500);builder.Append("https://graph.qq.com/oauth2.0/authorize?");builder.AppendFormat("response_type={0}", "code");builder.AppendFormat("&client_id={0}", appid);builder.AppendFormat("&redirect_uri={0}", server.UrlDecode(thisUrl));builder.AppendFormat("&state={0}", "weilanliuxue");//用于自身验证builder.AppendFormat("&scope={0}", "do_like");//builder.AppendFormat("&display={0}", "mobile"); moblie浏览器使用resp.Redirect(builder.ToString(),false);return;#endregion}string state = _Request.GetStringQuery("state");//第二次访问if (code != "" && state == "weilanliuxue"){#region 第二步 根据Authorization Code 获取Access TokenStringBuilder builder = new StringBuilder(500);builder.Append("https://graph.qq.com/oauth2.0/token?");builder.AppendFormat("grant_type={0}", "authorization_code");builder.AppendFormat("&client_id={0}", appid);builder.AppendFormat("&client_secret={0}", appkey);builder.AppendFormat("&code={0}", code);builder.AppendFormat("&redirect_uri={0}", server.UrlDecode(thisUrl));//1.获取并解析 access_token 例如:access_token=***&expires_in=***&refresh_token=***string result = NetHelper.Get(builder.ToString());string access_token = "";try{access_token = result.Split('&').FirstOrDefault().Split('=')[1];}catch (Exception ex){throw new Exception("解析 access_token 是出错:" + ex.Message);}#endregion#region 第三步 根据access_token 获取 OpenIDstring getOpenIDUrl = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token;//1.解析返回结果 中的openidresult = NetHelper.Get(getOpenIDUrl);List<string> resultList = RegexHelper.Matchs(result, "(?<=\")\\w+(?=\")");string openid = resultList.Last();#endregion#region 第四步 根据OpenID 调用OpenAPI 获取用户信息//第四步 获取用户信息builder.Clear();builder.Append("https://graph.qq.com/user/get_user_info?");builder.AppendFormat("access_token={0}", access_token);builder.AppendFormat("&oauth_consumer_key={0}", appid);builder.AppendFormat("&openid={0}", openid);string userinfo = NetHelper.Get(builder.ToString());#endregiontry{QQInfo info = userinfo.JsonDeserialezer<QQInfo>();if (info == null){throw new Exception("内部错误:反序列化获取QQInfo对象时失败!");}if (info.ret == "0"){//获取数据成功,进行其他逻辑处理_log.WriteLine(userinfo);//保存sessionsession["openid"] = openid;session["qqinfo"] = info;//返回数据或跳转resp.Redirect("~/view/QQInfoShow.aspx", false);}else{throw new Exception(info.msg);}}catch (Exception ex){//获取用户对象出错//{"ret":-1,"msg":"client request's parameters are invalid, invalid openid"},可能原因:参数为空string msg = "获取用户信息失败,当时的qqinfo:" + userinfo + "---------出错原因:" + ex.Message;_log.WriteLine(msg);}}}public bool IsReusable{get{return true;}}}

2.可获取QQ信息对象

    /// <summary>/// QQ 用户的信息对象/// </summary>public class QQInfo{//返回码public string ret { get; set; }//如果ret<0,会有相应的错误信息提示,返回数据全部用UTF-8编码。public string msg { get; set; }//用户在QQ空间的昵称public string nickname { get; set; }//大小为30×30像素的QQ空间头像URL。public string figureurl { get; set; }//大小为50×50像素的QQ空间头像URL。public string figureurl_1 { get; set; }//大小为100×100像素的QQ空间头像URL。public string figureurl_2 { get; set; }//大小为40×40像素的QQ头像URL。public string figureurl_qq_1 { get; set; }//大小为100×100像素的QQ头像URL。需要注意,不是所有的用户都拥有QQ的100x100的头像,但40x40像素则是一定会有。public string figureurl_qq_2 { get; set; }//性别。 如果获取不到则默认返回"男"public string gender { get; set; }}

QQ登陆,获取QQ用户信息相关推荐

  1. php 只需qq 获取用户信息,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

    //里客云资源站,likeyunba.com //BY TANKING // header header("Content-Type:application/json"); err ...

  2. 通过QQ号获取QQ昵称、头像等信息

    本文讲解如何通过QQ号获取QQ昵称.头像等信息. 效果如下图: 详情访问我的个人网站:https://www.xubingtao.cn/2020/07/02/get_qq_info_by_qq

  3. Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo

    目录 微信扫码登录介绍 开发步骤 微信扫码登录示例 微信开放文档 遇到的问题 使用第三方工具实现网站微信扫码登录 开发前介绍 开发步骤 微信扫码登录获取微信用户信息Demo实现流程 实现效果 实现过程 ...

  4. SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中

    这是Jerry 2020年的第87篇文章,也是汪子熙公众号总共第269篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  5. SpringBoot中获取微信用户信息竟然这么简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  6. 网页授权 根据 code 获取请求用户信息的 accessToken

    private static final Logger LOGGER = Logger.getLogger(XXX.class);/*** 网页获取请求用户信息的access_token** @par ...

  7. 获取微信用户信息java开发_Java微信公众平台开发(十二)--微信用户信息的获取

    前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...

  8. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

  9. java微信获取用户信息_SpringBoot中获取微信用户信息的方法

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  10. 利用oauth2.0获取微信用户基本信息 java_Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息...

    使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根 ...

最新文章

  1. 人脑计划:大脑研究如何对超级计算提出新要求
  2. c++容器vector
  3. 利用Runtime类,来操作电脑关机。。
  4. 基础002_V7-CLB
  5. Direct ByteBuffer学习
  6. 免费字典api ,查询汉字完整信息
  7. 您的API是什么情况?
  8. 用好href的target, base href
  9. unity技能框架_如何使用指导框架学习新技能
  10. centos 7 源码方式安装mysql5.6
  11. CRM系统开发过程中的CRUD模板
  12. 【mysql优化 2】索引条件下推优化
  13. Liist Object ? 获取方式
  14. JS双引号替换单引号
  15. get_digits
  16. hibernate 二级缓存 处理
  17. 使用js实现简单的动画效果
  18. 用C语言实现C++ 继承与多态
  19. 通用能力-《即兴演讲》-樊登读书总结
  20. 解决TextView中文英文数字混排导致的自动换行问题

热门文章

  1. 硬件知识 UART硬件介绍
  2. QVGA、WVGA、VGA、WQVGA、SQVGA等几种手机分辨率扫盲
  3. 转:张五常:比知识更重要的,是思维方式
  4. 安森美为何「上热搜」?汽车业务增量背后的隐忧已经出现
  5. 用户登录(使用Spring AOP记录登录日志)
  6. Android 上面的定位和Poi检索
  7. c语言和mysql实现超市的管理_C语言编写的超市管理系统
  8. 我看到西电通院考试——学生应该做的事情?
  9. photoshop去掉图片白边的方法
  10. Centos7 安装DB2