WebApi系列~QQ互联的引入(QConnectSDK)

感谢与改进

首先要感谢张善友老兄为大家封装的这个DLL,它将QQ官方的相关API都集成到了这个里面,这对于开发人员来说,是个福音,有人会说,为什么QQ官方没有提供.net版的SDK呢,在这里,我想说,可能是腾讯公司没有人会.net吧,哈哈!

玩笑话,在使用善友兄的QConnectSDK时,也遇到了一些问题,如session持久化问题,有人会说,session可以持久化所有对象,当然,这句话在某种情况下是正确的,但当你的session持久化方式改变后,如,使用sqlserver来存储信息时(可能是为了跨站点进行信息共享吧,呵呵)你的session就不允许使用无法序列化的对象或 MarshalByRef 对象.这是个很严重的问题,在我今天介绍的架构里,解决了它,主要思想是使用sessionID和cache来代替session来存储某些对象的.

插件DLL

Newtonsoft.Json.dll

QConnectSDK.dll

RestSharp.dll

DLL下载

注意,它们之前是相互依赖的,所以,要考虑到版本的兼容性

代码相关

C#代码

     /// <summary>
        /// QQ登陆页面
        /// </summary>
        [HttpGet]
        public ActionResult QQLogin(string returnUrl)
        {
            if (!string.IsNullOrWhiteSpace(returnUrl))
            {
                System.Web.HttpRuntime.Cache.Insert(Session.SessionID + "RETURNURL", returnUrl);
            }
            var context = new QzoneContext();
            string state = Guid.NewGuid().ToString().Replace("-", "");
            System.Web.HttpRuntime.Cache.Insert(Session.SessionID + "requeststate", state);//一个请求状态码,写入session,在redirectUri时进行比较
            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()
        {
            if (Request.Params["code"] != null)
            {
                QOpenClient qzone = null;
                string url = Url.Action("index", "home");
                var verifier = Request.Params["code"];
                var state = Request.Params["state"];
                System.Web.HttpRuntime.Cache.Insert(Session.SessionID + "verifier", verifier);
                string requestState = System.Web.HttpRuntime.Cache.Get(Session.SessionID + "requeststate").ToString();

                if (state == requestState)
                {
                    qzone = new QOpenClient(verifier, state);
                    var currentUser = qzone.GetCurrentUser();
                    if (System.Web.HttpRuntime.Cache.Get(Session.SessionID + "QzoneOauth") == null)
                    {
                        System.Web.HttpRuntime.Cache.Insert(Session.SessionID + "QzoneOauth", qzone);
                    }
                    if (!string.IsNullOrWhiteSpace((System.Web.HttpRuntime.Cache.Get(Session.SessionID + "RETURNURL") ?? string.Empty).ToString()))
                    {
                        url = System.Web.HttpRuntime.Cache.Get(Session.SessionID + "RETURNURL").ToString();
                    }
                    ViewBag.friendlyName = currentUser.Nickname;
                    ViewBag.img = currentUser.Figureurl;

                }

            }
            return View();
        }

HTML & JS代码

<h2><a id="logins">qq</a></h2>
<h1>@Request.QueryString["friendlyName"]</h1>
<img  src="@Request.QueryString["img"]"/>

<script type="text/ecmascript">
    $(function () {
        $("#logins").live("click", function () {
            window.open(‘/Home/QQLogin‘, ‘newwindow‘, ‘height=400,width=400,top=400,left=400,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no‘);
        });
    });
</script>

程序截图

WebApi系列~QQ互联的引入(QConnectSDK)

时间: 2024-11-10 08:10:04

WebApi系列~QQ互联的引入(QConnectSDK)的相关文章

WebApi系列~目录

回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以提高代码重用,也更好了扩展了其它服务,如为第三方提供一些数据,也可以通过这种soa模式来实现. WebApi系列~目录 WebApi系列~基于RESTful标准的Web Api (2014-02-19 13:30) WebApi系列~在WebApi中实现Cors访问 (2014-02-20 10:3

Discuz3.1登录QQ互联显示redirect uri is illegal(100010)的解决

QQ互联最近也是BUG不断,引起了很多用户的不满,从早前关闭群组功能,到发布2.0接口标准,引发系列站长用户的连锁反应.而Discuz从X3开始,为了应对QQ互联的2.0接口标准,采用了云平台来整合QQ互联,也就是说用户不用再像以前一样去QQ互联里申请APPID,而是在云平台中直接填写绑定QQ就行了,Discuz的云平台会自动帮你获取一个APPID并进行封装提供给用户使用,虽然更简单化了,但问题也不少. Discuz升到3.1版后,QQ互联最多的问题之一就是点击QQ登录时显示:redirect

QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码

OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权. QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程

开发QQ互联ios版Ane扩张 辛酸史

来源:http://www.myexception.cn/operating-system/1451490.html 开发QQ互联ios版Ane扩展 辛酸史 开发QQ互联ios版Ane扩展辛酸史: 1.安装mac系统非常痛苦,找了好几个版本都装不上,同时对mac的基本操作和xcode的基本操作不熟悉. 2.用xcode建立ane项目(使用xcode-template-ane-master模板),引入第三方object-cframework,生成.a文件,供windows下生成ane文件. 发现w

web端,qq互联以及微信登录接入流程(内嵌页面)总结

前言 实习过程中,我参与了web版相册管家的开发,负责登陆页面的前后端逻辑. 需要在登陆页接入QQ互联和微信扫码登陆,而且是用页面内嵌方式.回头来看其实两者都有文档指导,步骤清楚,并不复杂.但是第一次接触难免踩坑,在此梳理如下,方便今后开发参考. QQ互联 开发文档 https://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B 应用申请 申请appid和ap

WebApi系列~基于RESTful标准的Web Api

WebApi系列~基于RESTful标准的Web Api 回到目录 微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下: GET:生到数据列表(默

升级或者重装Discuz! 版本后 QQ互联英文乱码显示的正确解决方法

升级Discuz! X3版本QQ互联英文乱码!connect_viewthread_share_to_qq!  目前Discuz!论坛上 最简单的解决方法: 第一步:后台----->站长-----> 数据库----->升级 运行下面二行命令 delete from `pre_common_plugin` where `identifier`= 'qqconnect'; delete from `pre_common_setting` where `skey` = 'connect' 复制

QQ互联API接口失效,第三方网站的死穴

最近2个月,用开源程序WeCenter搭建了一个社交问答网站:http://ask.jiutianniao.com/. 为了方便用户注册,开通了QQ登录功能. 今天,突然发现QQ互联返回一直出现错误.     度娘了很久,发现大家都遇到这个问题了.Discusz和WeCenter论坛有很多类似的问题. 在WeCenter上找了很多答案,都不行. 直到现在,还没能解决这个问题.让人着急呀~ 还好,我们的只是一个小站. 那些,特别依赖QQ互联登录的网站,咋整呢. 开放平台,开放接口,是一个双刃剑,方

QQ登录整合/oauth2.0认证-02-跳转到QQ互联页

---------------------------目录---------------------------------- QQ登录整合/oauth2.0认证-01-申请appkey和appid ---------------------------正文---------------------------------- 在上一讲里面,主要是 要读者们 先准备一个 appid 和appkey,准备这个 可能需要一段时间审核,公司类型的可能稍微慢一点 其实 关键是 你能有一个可以绑定上域名的空