腾讯社区开放平台澳门威尼斯人网址,公布以及网址QQ登入示例代码

“QQ登6”使用户能使用QQ账号一键登入接入网址,大大下降了挂号、登陆的奥密。借助壮大的QQ用户群,给第2方网址带来越多新用户。已登入用户仍能就要第贰方网址发布、分享的音讯即时手拉手到QQ空间,使网址内容通过很好的朋友关系取得越来越的流传。

OAuth
OAuth(开放授权)是2个开放标准,允许用户授权第3方网站访问他们存款和储蓄在别的的劳动提供者上的音讯,而无需将用户名和密码提须要第一方网址或享受他们数据的全数剧情。

OAuth
OAuth(开放授权)是3个开花规范,允许用户授权第二方网址访问他们存款和储蓄在此外的劳动提供者上的新闻,而不要求将用户名和密码提必要第2方网址或分享他们数据的兼具故事情节。

腾讯社区开放平台.NET
SDK是基于腾讯社区开放平台的OAuth登陆文书档案API文档
使用C#支付的.NET
四.0的一个库,近日1体化兑现了腾讯社区开放平台的装有接口。能够加速你的社区衔接到腾讯社区开放平台,免去大批量的再次的调试开采的时辰,所以自个儿是以New
BSD协议创设的开源项目,各位有雷同需要的诸位同事插手建设着二个品类,项目标托管地址是http://qqconnect.codeplex.com/

QQ登录OAuth2.0:对于用户相关的OpenAPI(譬如获取用户音信,动态同步,照片,日志,分享等),为了掩护用户数量的平安定和谐隐秘,第三方网址访问用户数量前都需求显式的向用户征求授权。

QQ登录OAuth2.0:对于用户相关的OpenAPI(譬喻获取用户新闻,动态同步,照片,日志,分享等),为了维护用户数据的广元和隐秘,第二方网站访问用户数据前都亟需显式的向用户征求授权。
QQ登6OAuth二.0使用OAuth贰.0标准协议来开始展览用户身份验证和获得用户授权,相对于事先的OAuth1.0协议,其证实流程更简便易行和广元。具体仿照效法文书档案
:【QQ登6】OAuth二.0支出文书档案

腾讯社区开放平台.NET
SDK使得你调用腾讯社区开放平台的REST接口特别轻易,你只须求到http://connect.opensns.qq.com/apply
申请到必须的consumer key和consumer
secret,在你的申请经过了腾讯社区开放平台的核查后就能够获得。那个酷的重中之重特点如下:

QQ登入OAuth二.0应用OAuth2.0规范协议来进展用户身份验证和获得用户授权,相对于事先的OAuth1.0协议,其验明正身流程更简单和安全。具体参照他事他说加以考察文书档案
:【QQ登入】OAuth二.0开辟文档

QQ互连网址已经提供了PHP,JS,Android和iOS的SDK,缺乏.NET版本的SDK,新岁假期时期采取部分空暇时间封装了3个具有完全意义的.NET
SDK,后续将包裹多个对应的Windows
Phone的SDK,并开源放在http://opensns.codeplex.com
,特意搭建了二个演示网址http://www.win8charm.com/
和MSDN风格的在线援救网址http://help.win8charm.com/
。后天那篇作品重要介绍使用.NET SDK实践QQ登入功用。

  • 包装好了腾讯社区开放平台的OAuth协议访问腾讯社区开放平台的REST接口
  • 和腾讯社区开放平台的接口保持同步(如今唯有2个接口,现在自然会不停扩张)

QQ网络址已经提供了PHP,JS,Android和iOS的SDK,缺乏.NET版本的SDK,新春假期时期利用一些悠闲时间封装了一个独具完全意义的.NET
SDK,后续将包裹一个应和的Windows
Phone的SDK,并开源放在http://opensns.codeplex.com
,特意搭建了一个演示网址http://www.win8charm.com/
和MSDN风格的在线帮衬网址http://help.win8charm.com/
。前些天那篇小说重要介绍使用.NET SDK实践QQ登入功用。

从这里http://opensns.codeplex.com/ 下载最新版本的SDK,最新版本是Beta,
实现SDK的包装,希望大家利用扶助测试,SDK重视于Newtonsoft.Json和RestSharp七个程序集,具体能够参见使用RestSharp
库消费Restful
Service

主倘诺四个类QzoneContext(QQ登入的上下文数据)  和 QOpenClient
(QQ互联API入口),其余类主纵然模型,配置类。

这几个库使用Visual Studio 20拾和C#
三.0塑造的,首要扩张和接纳到下边包车型大巴开源库:

从这里http://opensns.codeplex.com/
下载最新版本的SDK,最新版本是Beta,
达成SDK的包装,希望大家使用援救测试,SDK信赖于Newtonsoft.Json和RestSharp多个程序集,具体能够参见使用RestSharp
库消费Restful
Service

首固然多个类QzoneContext(QQ登入的上下文数据)  和 QOpenClient
(QQ互联API入口),其余类入眼是模型,配置类。

1、你得去http://connect.qq.com/ 申请1个账号,会博得一个应用软件 ID和App
Key,那多个东东会在转移请求的时候用到。你的去填一些素材,还要提交一些素材核查。

  1. DotnetOpenauth:DotNetOpenAuth
    是一个 C# 开辟包,用以实现 OpenID 2.0 的提供者、中继方(Relying
    Party)、OAuth使用者和OAuth服务提供者;同一时候援助 InfoCard Selector
    。OAuth协议客户端的落实上参照了那么些类别的代码。
  2. Jayrock:杰伊rock是3个LGPL的开源的软件,完成了JSON和JSON-RPC,帮衬微软ASP.NET框架。具体能够仿效小说:Jayrock:
    JSON and JSON-RPC for
    .NET

1、你得去http://connect.qq.com/
申请3个账号,会获取叁个APP ID和App
Key,那多少个东东会在转移请求的时候用到。你的去填一些素材,还要提交一些素材审查。

在安顿文件web.config参预QQ登入所急需的局地配置参数,如下图所示:

地点我们从高等级次序理解了那一个SDK的完毕原理,下边大家介绍怎么着使用那些SDK来和腾讯社区开放平台进行交互。SDK首要有多个须要关爱的类QzoneSDK.Context.QzoneContext

在安顿文件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>

和 QzoneSDK.Qzone。

<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登3/5功后,分配给网址的appkey;CallBackU奥迪Q7I是QQ登录成功后的回调地址:AuthorizeUHighlanderL是QQ互联的OAth二认证地址:

率先我们结合【QQ登入】OAuth登陆文书档案来验证。Qzone
OAuth总体管理流程里共有三个步骤,从下面的一体化流程图中能够见见:

AppKey是申请QQ登陆成功后,分配给采纳的appid;AppSecret是报名QQ登6成功后,分配给网址的appkey;CallBackU福睿斯I是QQ登入成功后的回调地址:AuthorizeUSportageL是QQ互联的OAth二认证地址:

贰、在项目中加多多少个引用牛顿soft.Json.dll、RestSharp.dll和
QConnectSDK.dll,
在页面上停放按键,张开qq登6的页面,然后登五分之三功现在回调您的网址的页面。此时假使用户在您的网址有账号,那就足以绑定现成账号,可能新登记一个账号。假设您是新建站,也能够完全选用qq登入来作为用户种类。

澳门威尼斯人网址 1

二、在品种中增加多少个引用Newtonsoft.Json.dll、RestSharp.dll和
QConnectSDK.dll,
在页面上放置按键,张开qq登入的页面,然后登陆成功以往回调您的网址的页面。此时假如用户在你的网站有账号,那就能够绑定现成账号,或许新注册四个账号。若是您是新建站,也得以完全选取qq登6来作为用户种类。

下边上代码:

左边:为第3方网址需求做的事务。在各种均红的4方里,注明了第二方应当调用的接口,接口首要功能及逻辑见Qzone
OAuth接口表明。

上边上代码:

        /// <summary>
        /// QQ登入页面
        /// </summary>

右侧:为Qzone接收到第三方采用发过来的请求后做的专门的学业。第2方呼吁的出殡地址以及应蕴涵的参数在接下去的单步详解中开始展览了验证

        /// <summary>
        /// QQ登入页面
        /// </summary>

       [HttpGet]
       public ActionResult Login(string returnUrl)
       {
           this.Session[RETURNURL] = returnUrl;
           var context = new QzoneContext();
           string state = Guid.NewGuid().ToString().Replace(“-“, “”);
           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);

通过类QzoneSDK.Context.QzoneContext带上你申请的oauth_consumer_key
(对应Qzone的appid)和oauth_consumer_secret
(对应Qzone的appkey)到Tencent社区开放平台获取到Request
Token,然后把tokenKey和tokensecret保存到Session里,后续必要接纳。示例代码如下:

       [HttpGet]
       public ActionResult Login(string
returnUrl)
       {
           this.Session[RETURNURL] =
returnUrl;
           var context = new
QzoneContext();
           string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
           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”;

       }   

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

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

        /// <summary>
        /// 回调页面
        /// </summary>

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

       }   

       public ActionResult QQConnect(LoginModel model)
       {
           if (Request.Params[“code”] != null)
           {
               QOpenClient qzone = null;

var context = new QzoneSDK.Context.QzoneContext(key, secret);

        /// <summary>
        /// 回调页面
        /// </summary>

               var verifier = Request.Params[“code”];
               var state = Request.Params[“state”];
               string requestState =
Session[“requeststate”].ToString();

//Get a Request Token

       public ActionResult
QQConnect(LoginModel model)
       {
           if (Request.Params[“code”] !=
null)
           {
               QOpenClient qzone =
null;

               if (state == requestState)
               {
                   qzone = new QOpenClient(verifier, state);
                   var currentUser = qzone.GetCurrentUser();
                   if (this.Session[“QzoneOauth”] == null)
                   {
                       this.Session[“QzoneOauth”] = qzone;
                   }
                   var friendlyName = currentUser.Nickname;

var callbackUrl = ConfigurationManager.AppSettings[“callbackUrl”];
//”/qzone/account/QQCallback.aspx”;

               var verifier =
Request.Params[“code”];
               var state =
Request.Params[“state”];
               string requestState =
Session[“requeststate”].ToString();

                   var isPersistentCookie = true;
                   SetAuthCookie(qzone.OAuthToken.OpenId,
isPersistentCookie, friendlyName);

var requestToken = context.GetRequestToken(callbackUrl);

               if (state == requestState)

                   return Redirect(Url.Action(“Index”, “Home”));
               }

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

               {
                   qzone = new
QOpenClient(verifier, state);
                   var currentUser =
qzone.GetCurrentUser();
                   if
(this.Session[“QzoneOauth”] == null)
                   {
                      
this.Session[“QzoneOauth”] = qzone;
                   }
                   var friendlyName =
currentUser.Nickname;

           }
           return View();
       }

//在demo演示中,直接保存在全局变量中.真实情状需求网址本人管理

                   var isPersistentCookie
= true;
                  
SetAuthCookie(qzone.OAuthToken.OpenId, isPersistentCookie,
friendlyName);

上边的代码是ASP.NET MVC的,项目示范运转在http://www.win8charm.com/
,下边贴个ASP.NET WebForm的代码示例:

Session[“requesttokenkey”] = requestToken.TokenKey;

                   return
Redirect(Url.Action(“Index”, “Home”));
               }

QQ登入页面

Session[“requesttokensecret”] = requestToken.TokenSecret;

           }
           return View();
       }

namespace OpenConnect.WebSample.Account
{
    public partial class LoginToQQ : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GetRequestToken();
        }

var authenticationUrl = context.GetAuthorizationUrl(requestToken,
callbackUrl);

上边包车型地铁代码是ASP.NET
MVC的,项目示范运行在http://www.win8charm.com/ ,上面贴个ASP.NET
WebForm的代码示例:

        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);

Response.Redirect(authenticationUrl);

QQ登陆页面

        }
    }
}

用户在腾讯社区开放平台上授权使用后会导向到您的网址,也便是上海体育场地的第贰步,在门上述的callback
的页面上就可以取得上图第5步的参数,利用上述获得的参数调用QzoneSDK.Qzone实行第伍步调用,就足以博得AccessToken,那几个AccessToken,近些日子access_token(及其secret)是长时间有效的,和某3个openid对应,近日可以支撑线下获取该openid的音讯。

namespace OpenConnect.WebSample.Account

 

if (Request.QueryString[“oauth_vericode”] != null)

{
    public partial class LoginToQQ :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            GetRequestToken();
        }

回调页面

{

        private void GetRequestToken()

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 requestTokenKey = Session[“requesttokenkey”].ToString();

        {
            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 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;

var requestTokenSecret = Session[“requesttokensecret”].ToString();

            var authenticationUrl =
context.GetAuthorizationUrl(state,scope);
            //request token, request token
secret 须要保存起来
           
//在demo演示中,间接保存在全局变量中.实情供给网址自个儿管理
            Session[“requeststate”] =
state;          
           
Response.Redirect(authenticationUrl);

            }

var verifier = Request.QueryString[“oauth_vericode”];

        }
    }
}

     }

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

 

}

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

回调页面

此地说美素佳儿(Friso)下使用QQ互联登录是获取不到用户的QQ号的,只会博获得用户的OpenId,OpenID和QQ号是逐一对应涉及。

QzoneSDK.Qzone qzone = new QzoneSDK.Qzone(key, secret, requestTokenKey,
requestTokenSecret, verifier);

namespace OpenConnect.WebSample.Account

地点测试
  • 前提希图,领悟当地Host文件的效能
  1. 找到C:\WINDOWS\system32\drivers\etc\hosts这么些文件
  2. 用文件格局展开
  3. 追加一行:1二柒.0.0.壹 www.domain.com
  4. 运转本地服务器
  5. 开行浏览器访问 http://www.domain.com/

//这里须求将qzone.OAuthTokenKey, qzone.OAuthTokenSecret, qzone.OpenID
存款和储蓄起来用于末端的API的走访

{
    public partial class QQCallback :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            if (Request.Params[“code”]
!= null)
            {
                QOpenClient qzone = null;

其他

QzoneSDK.Qzone qzone2 = new QzoneSDK.Qzone(key, secret,
qzone.OAuthTokenKey, qzone.OAuthTokenSecret, string.Empty, true,
qzone.OpenID);

                User currentUser =
null;

Session[“qzonesdk”] = qzone2;

                var verifier =
Request.Params[“code”];
                string state =
Session[“requeststate”].ToString();
                qzone = new
QOpenClient(verifier, state);
                currentUser =
qzone.GetCurrentUser();
                if (null != currentUser)

qzone2 = Session[“qzonesdk”] as QzoneSDK.Qzone;

                {
                    this.result.Text =
“成功登入”;
                    this.Nickname.Text =
currentUser.Nickname;
                   
this.Figureurl.ImageUrl = currentUser.Figureurl;
                }
                Session[“QzoneOauth”] =
qzone;

var currentUser = qzone2.GetCurrentUser();

            }

var user = (BasicProfile)JsonConvert.Import(typeof(BasicProfile),
currentUser);

     }

if (null != user)

}

{

此间说喜宝下用到QQ互联登入是赢得不到用户的QQ号的,只会收获到用户的OpenId,OpenID和QQ号是逐一对应提到。

this.Nickname.Text = user.Nickname;

地方测试
  • 前提计划,精晓本地Host文件的职能
  1. 找到C:\WINDOWS\system32\drivers\etc\hosts这几个文件
  2. 用文件格局张开
  3. 充实1行:1二7.0.0.1www.domain.com
  4. 运转当地服务器
  5. 开发银行浏览器访问
    http://www.domain.com/

this.Figureurl.Text = user.Figureurl;

其他

}

}

上述代码还亲自过问调用腾讯开放社区脚下唯一的三个API (
get_user_info),通过杰伊rock库将Json数据转变为库中定义的用户登陆数据的实业BasicProfile。

品类的下载地址:http://qqconnect.codeplex.com/releases/view/65042 

项目文书档案:腾讯社区开放平台教程.pdf

Demo: http://www.dotnetting.cn/qzone/Account/Login.aspx

QQ群:80767552