qq的授权登录,跟微信相似,不同的地方是:

1 申请appid与appkey的时候,注意填写回调地址。

2 这里可以在WebBrowser的是Navigated事件中直接得到Access Token,一般情况是通过Authorization Code获取Access Token。

3 获取用户信息,需要先根据Access Token获取用户的OpenID。

最后,在WebBrowser的DocumentCompleted事件中,完成所有的调用。

总结一下,分以下几步:

1 根据appid与appkey获取Authorization Code(这里忽略此步,直接到步骤2)。

2 根据code获取Access Token,这里可在WebBrowser的Navigated事件中,直接在网址中获取Access Token。

3 使用Access Token来获取用户的OpenID

4 根据Access Token和OpenID  调用OpenAPI获取各种信息,这里qq提供了具体的API文档。

需要的资料,都在qq互联-文档资料,非常的详细。

具体的过程如下:

1 在新的form中,拉一个WebBrowser控件,在属性-url,设置为

https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=你的appid&redirect_uri=你的回调地址&scope=get_user_info

同样,回调地址注意进行URLEncode。这样运行,可以进入到qq授权登录的界面。

2 在Navigated事件中,用list记录跳转的网址

ArrayList addressList2 = new ArrayList();

    private void webBrowser_QQ_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
string url = e.Url.ToString();
addressList2.Add(url);
}

3 遍历addressList2,找到含有access_token的网址,取出access_token

    //Step2:一般情况是通过Authorization Code获取Access Token,这里直接从网址获取Access Token
protected string Get_AccessToken()
{
string strTempToken = "";
// 获取含有Access_token的网址
foreach (string url in addressList2)
{
if (url.Contains("access_token"))
{
strTempToken = url;
break;
}
}
if (string.IsNullOrEmpty(strTempToken))
return null;
//qq最终获得的Access_token
string AccessToken = "";
int iStart = strTempToken.IndexOf("=");
int iEnd = strTempToken.LastIndexOf('&');
if (iStart < iEnd)
{
int codeLength = iEnd - iStart - ;
AccessToken = strTempToken.Substring(iStart + , codeLength);
}
return AccessToken;
}

3

    //Step3:使用Access Token来获取用户的OpenID
protected string Get_OpenID(string Access_token)
{
string callback = JsonHelper.GetJson("https://graph.qq.com/oauth2.0/me?access_token=" + Access_token);
int ibegin = callback.IndexOf("{");
int iEnd = callback.IndexOf("}");
int ilength = ;
if(ibegin<iEnd)
{
ilength = iEnd - ibegin;
}
string strOpenId = callback.Substring(ibegin, ilength + );
QQCallBack qqOpenId = JsonHelper.ParseFromJson<QQCallBack>(strOpenId);
string openId = qqOpenId.openid;
return openId;
}
  /// <summary>
/// QQ回调类,获取Openid
/// </summary>
public class QQCallBack
{
public string client_id { get; set; }
public string openid { get; set; }
}

4 先定义QQUser用户信息类,根据Access_token和openId获取用户信息

    /// <summary>
/// qq登录回调结果实体类
/// </summary>
public class QQUser
{
/// <summary>
/// 回调结果码(0成功,其他失败)
/// </summary>
public int ret { get; set; }
public string msg { get; set; }
public string is_lost { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string nickname { get; set; }
/// <summary>
/// 性别
/// </summary>
public string gender { get; set; } public string province { get; set; } public string city { get; set; } public string year { get; set; }
/// <summary>
/// 用户头像
/// </summary>
public string figureurl { get; set; } public string figureurl_2 { get; set; } public string figureurl_qq_2 { get; set; }
}

//Step4: 调用OpenAPI获取各种信息

 protected QQUser Get_qqUserInfo(string Access_token, string openId)
{
string userInfostr = JsonHelper.GetJson("https://graph.qq.com/user/get_user_info?access_token=" + Access_token + "&oauth_consumer_key=" + app_id + "&openid=" + openId);
QQUser qqUser = JsonHelper.ParseFromJson<QQUser>(userInfostr);
return qqUser;
}

最后,在WebBrowser的DocumentCompleted事件中,调用上述的函数。

    private void webBrowser_QQ_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string access_token = Get_AccessToken();
if (string.IsNullOrEmpty(access_token))
return;
string openid = Get_OpenID(access_token);
if (string.IsNullOrEmpty(openid))
{
return;
}
QQUser qqUser = Get_qqUserInfo(access_token, openid);

中间没有提到的相关的函数,在上篇微信中,都有提到,这里不再赘述。

C# winform C/S WebBrowser qq第三方授权登录的更多相关文章

  1. QQ第三方授权登录OAuth2.0实现(Java)

    准备材料 1.已经备案好的域名 2.服务器(域名和服务器为统一主体或域名已接入服务器) 3.QQ号 4.开发流程:https://wiki.connect.qq.com/%E5%87%86%E5%A4 ...

  2. .NET Core+QQ第三方授权登录

    安装包 dotnet add package AspNet.Security.OAuth.QQ 接上文GitHub第三方授权登录 申请过程不介绍了,申请者资料,个人也是可以申请成功的. 这时候有二个参 ...

  3. C# winform C/S WebBrowser 微信第三方登录

    网上很多的资料都是B/S结构的,这里是基于C# C/S 结构的微信第三方授权登录 一.准备知识 1 http Get和Post方法.做第三方授权登录,获取信息基本上都是用get和post方法,做之前需 ...

  4. 【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字 ...

  5. 【Android应用开发详解】实现第三方授权登录、分享以及获取用户资料

      由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相 ...

  6. 使用ShareSDK实现第三方授权登录、分享以及获取用户资料效果,项目中包含:源码+效果图+项目结构图

    [Android应用开发详解]第01期:第三方授权认证(一)实现第三方授权登录.分享以及获取用户资料   由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折, ...

  7. github 授权登录教程与如何设计第三方授权登录的用户表

    需求:在网站上想评论一篇文章,而评论文章是要用户注册与登录的,那么怎么免去这麻烦的步骤呢?答案是通过第三方授权登录.本文讲解的就是 github 授权登录的教程. 效果体验地址:http://biao ...

  8. SpringBoot基于JustAuth实现第三方授权登录

    1. 简介   随着科技时代日渐繁荣,越来越多的应用融入我们的生活.不同的应用系统不同的用户密码,造成了极差的用户体验.要是能使用常见的应用账号实现全应用的认证登录,将会更加促进应用产品的推广,为生活 ...

  9. SPA+.NET Core3.1 GitHub第三方授权登录 使用AspNet.Security.OAuth.GitHub

    GitHub第三方授权登录 使用SPA+.NET Core3.1实现 GitHub第三方授权登录 类似使用AspNet.Security.OAuth.GitHub,前端使用如下:VUE+Vue-Rou ...

随机推荐

  1. Wechat login authorization(OAuth2.0)

    一.前言 昨天小组开了个会,让我今天实现一个微信网页授权的功能,可以让用户在授权之后无需再次登录既可进入用户授权界面.在这之前我也从没接触过微信公众号开发之类的,也不知道公众号后台是啥样子的,自己所在 ...

  2. Quartz.Net分布式任务管理平台

           无关主题:一段时间没有更新文章了,与自己心里的坚持还是背驰,虽然这期间在公司做了统计分析,由于资源分配问题,自己或多或少的原因,确实拖得有点久了,自己这段时间也有点松懈,借口就不说那么多 ...

  3. Centos7系统下修改主机名操作笔记

    习惯了在Centos6系统下修改主机名的操作,但是Centos7下修改主机名的操作却大不相同!操作笔记如下: 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient) ...

  4. python-批量添加图片水印

    前言: 最近总是被无良公众号和培训机构拷贝文章,他们根本不会给你备注原文出处,这种行为真的让人不高兴,所以计划以后的文章都添加上自己的水印. 话不多说,直接上代码. 一.单张图片添加文字水印 # -* ...

  5. SCRUM 12.18

    明天就是编译课设的第二次中期考核了,大家都感到有一些压力. 所以我们决定今天减少一些工作量. 工作任务分配依旧如往常 成员 任务 彭林江 落实API 郝倩 研究遍历美团数据方法 牛强 落实意见反馈功能 ...

  6. Week 3 有求必应

    [引] 必应词典已经伴我很久了,但那并不意味着我天天都用它查来查去,它总是静静地蹲在我E盘的一角. 从前的它特别任性,总喜欢开机自己冒出头来看我.后来我嫌它每天都播报新闻,于是就把它关进了冷宫.直到不 ...

  7. layui使用记录

    一.layui表格渲染 如果后台返回的实力类里面包含另一个实体类,那么需要使用如下方式取出相应的值 var tableResult = table.render({ elem: '#' + Serve ...

  8. PAT 甲级 1044 Shopping in Mars

    https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264 Shopping in Mars is qu ...

  9. Oracle测试环境参数调整.

    测试环境上面Oracle数据库性能参数设置 1. 关闭回收站 alter system set recyclebin=off 2. 修改redo日志的大小 11g的默认大小是50m 如果redo fi ...

  10. DVWA的安装与简单使用

    参考资料: http://www.freebuf.com/articles/web/119150.html 尝试使用linux机器安装,但是因为下载php版本以及各种兼容性的问题耗时较长, 所以后来选 ...