C#网站实现QQ第三方登陆

说起在网站上面可以直接使用QQ登录功能大家并不陌生。但翻其官方提供的SDK包中却没有C#方向的。

但是我们有个牛人叫张善友,做了一个民间SDK。下面我们就是用他所写的SDK,进行网站添加第三方qq登录的功能。

SDK开源地址:http://opensns.codeplex.com/

一、申请账号

1.申请地址:http://connect.qq.com/。申请完毕之后会得到一个APP ID和App Key。这两个字符串会在以后配置的时候用到。

在配置文件web.config加入QQ登陆所需要的一些配置参数,如下图所示:

<configuration>

<configSections>

<sectionGroup name=”QQSectionGroup”>

<section name=”QzoneSection” type=”System.Configuration.NameValueSectionHandler,System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089″ />

</sectionGroup>

</configSections>

<QQSectionGroup>

<QzoneSection>

<add key=”AppKey” value=”” />

<add key=”AppSecret” value=”” />

<add key=”CallBackURI” value=”” />

<add key=”AuthorizeURL” value=”https://graph.qq.com/oauth2.0/authorize” />

</QzoneSection>

</QQSectionGroup>

AppKey是申请QQ登录成功后,分配给应用的appid;AppSecret是申请QQ登录成功后,分配给网站的appkey;

CallBackURI是QQ登陆成功后的回调地址:AuthorizeURL是QQ互联的OAth2认证地址。

2、在项目中添加三个引用Newtonsoft.Json.dll、RestSharp.dll和 QConnectSDK.dll, 在页面上放置按钮,打开qq登录的页面,然后登录成功之后回调您的网站的页面。此时如果用户在你的网站有账号,那就可以绑定现有账号,或者新注册一个账号。

下面上代码:(MVC版本的)

/// <summary>

/// QQ登陆页面

/// </summary>

[HttpGet]

public ActionResult Login(string returnUrl)

{

this.Session["return"] = returnUrl;

var context = new QzoneContext();

string state = Guid.NewGuid().ToString(“N”);

Session["requeststate"] = state;

string scope = “get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

var authenticationUrl = context.GetAuthorizationUrl(state, scope);

return new RedirectResult(authenticationUrl);

}

/// <summary>

/// 回调页面

/// </summary>

public ActionResult QQConnect(LoginModel model)

{

QOpenClient qzone = null;

QConnectSDK.Models.User currentUser = null;

var verifier = Request.Params["code"];

string state1 = Session["requeststate"].ToString();

qzone = new QOpenClient(verifier, state1);

currentUser = qzone.GetCurrentUser();

if (null != currentUser)

{

return Content(currentUser.Nickname);

}

Session["QzoneOauth"] = qzone;

return View();

}

WebForm版本的:

QQ登陆页面

namespace OpenConnect.WebSample.Account

{

public partial class LoginToQQ : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

GetRequestToken();

}

private void GetRequestToken()

{

var context = new QzoneContext();

string state = Guid.NewGuid().ToString().Replace(“-“, “”);

string scope = “get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

var authenticationUrl = context.GetAuthorizationUrl(state,scope);

//request token, request token secret 需要保存起来

//在demo演示中,直接保存在全局变量中.真实情况需要网站自己处理

Session["requeststate"] = state;

Response.Redirect(authenticationUrl);

}

}

}

回调页面

namespace OpenConnect.WebSample.Account

{

public partial class QQCallback : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (Request.Params["code"] != null)

{

QOpenClient qzone = null;

User currentUser = null;

var verifier = Request.Params["code"];

string state = Session["requeststate"].ToString();

qzone = new QOpenClient(verifier, state);

currentUser = qzone.GetCurrentUser();

if (null != currentUser)

{

this.result.Text = “成功登陆”;

this.Nickname.Text = currentUser.Nickname;

this.Figureurl.ImageUrl = currentUser.Figureurl;

}

Session["QzoneOauth"] = qzone;

}

}

}

用户登录之后,只会获取到用户的OpenId,OpenID和QQ号是一一对应关系。不会获取到用户的qq号码。

微信号:net4k8k(做(4k+8k)+月薪的程序员)

微信名称:net知识分享

介绍:主要以发布和分享.Net和安卓文章为主,争做全栈开发工程师,爱学习,爱挑战,爱编程。

打造C#入门教程。总结自己已经习得的技术体系。分享到网络。为中国的软件复兴贡献自己的一份力。

如有不恰当之处,还请指正。

作者:成笑笑

职业:应届毕业生,找工作中。

本人联系方式:cxx@chengxiaoxiao.com

我的自媒体:

GitHub:https://github.com/shellcheng

My CnBlogs:http://www.cnblogs.com/happpytoo/

今日头条:http://toutiao.com/m5443584213/

一点资讯:http://www.yidianzixun.com/home?page=channel&id=m21753

新浪微博:http://weibo.com/5706473282/

搜狐公众平台:http://mp.i.sohu.com/profile?xpt=NUJENDc2NjZENTIyMjlBRjk4QkIzRDczNTVFMUVFODBAcXEuc29odS5jb20=

C#网站实现QQ第三方登陆# C#快速开发教程的更多相关文章

  1. QQ第三方登陆

    第一步 引入第三方登陆类,实例化,调用类中方法getInstance()跳转到授权页面 第二步 登陆成功的回调方法,qq_return则是登陆成功会获取到的数据的处理方法 qq_return方法: 本 ...

  2. 分享QQ第三方登陆SDK

    主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库..反正自己都写了一个了,就拿出来分享下.. 什么也不多说,直接上代码. Qq_sdk.php < ...

  3. web网站使用qq第三方登录

    Html代码: <a href=’/QQlogin’>qq登录</a> //后台代码: @RequestMapping(value = "/QQlogin" ...

  4. QQ第三方登陆示例

    先上图 若想实现QQ登录,需要成为QQ互联的开发者,审核通过才可实现.注册方法可参考链接http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E ...

  5. php qq第三方登陆

    0.下载QQ登录(QQ互)php版:下载地址:点击打开链接(本文编写时最新版本:V2.1 ) 1.在QQ互联网站注册一个appid,配置网站地址和回调地址. 例:http://yzdd.app1101 ...

  6. 网站调用qq第三方登录

    1. 准备工作 (1) 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. ① 注册QQ互联开发者账号  网址  https:/ ...

  7. 使用AndroidStudio快速开发教程

    关于AndroidStudio的使用 参考:http://www.codes51.com/article/detail_98914.html  1.对于开发环境的通性:编写 调试 视图   一般的开发 ...

  8. QQ互联第三方登陆 redirect uri is illegal(100010)

    想必第一次大家接触QQ第三方登陆都会遇到各种各样的问题,备受折磨,因此,今天我把自己做QQ登陆的过程描述一下,希望给大家提供参考,少走弯路. 在开发之前,我们先了解下QQ登陆的流程 第一:查看熟悉 网 ...

  9. 第三方登陆-qq互联

    看到很多网站都有第三方登陆,使用业余时间自己也要实现一个第三方登陆的功能: 1.登陆qq互联的网站:https://connect.qq.com/index.html 2.点击头像进行资料申请 --- ...

随机推荐

  1. [转贴]sizeof 和strlen的区别

    1. 编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小.sizeof后若是类型必须加括弧,若是变量名可不加括弧.sizeof(x)可用来定义数组维数.如:printf(" ...

  2. 没做过编译器就是被人欺——从一道变态的i++题猜编译器的行为(表达式从左往右扫描,同一变量相互影响)

    首先不要被人蒙了,如果是这样,根本编译不过: int i=1; int b=i+++++i; printf("%d %d\n", b ,i); Mingw报错:error: lva ...

  3. 17.1.1.2 Setting the Replication Slave Configuration

    17.1.1.2 Setting the Replication Slave Configuration 在一个复制slave, 你必须创建一个唯一的server ID,如果这个没有做,slave设置 ...

  4. bzoj1984

    树链剖分在边上的应用比维护点稍微麻烦一点,是对每条边标号,并且要记录每个点父亲边的编号和重儿子然后注意各种细节线段树上和bzoj1858的维护方法类似,覆盖的优先级高于加具体见程序,完全是为了提升状态 ...

  5. c#中使用SESSION需要注意的几个问题

    C#的SESSION和其它程序中的SESSSION可能有一点的不同,下面讲下哪飞网程序员遇到的一个地方使用SESSION的问题.希望对大家有所帮助 一.在页面中用SESSION,存值session[& ...

  6. 作品第二课----点击DIV显示其内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 直接下载adobe的完整安装包

    在线安装从来没有成功过的. https://get.adobe.com/cn/reader/direct/

  8. Yii框架中ActiveRecord使用Relations

    参考文章: http://blog.csdn.net/yjj1s/article/details/6885276 http://www.gowhich.com/blog/38 http://www.c ...

  9. BZOJ 2933([Poi1999]地图-区间Dp)

    2933: [Poi1999]地图 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 7   Solved: 7 [ Submit][ Status] ...

  10. 基于粒子群算法求解求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...