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
注意,它们之前是相互依赖的,所以,要考虑到版本的兼容性
代码相关
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>
程序截图
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
改进的地方
这个程序事实上也是有问题的,因应当有多台WEB服务器作负载均衡时,它的session_ID也是不同的,这时,就会出现问题了,所以,最好还是使用session来做这事,我试着把复杂对象的存储去掉了,QQ登陆也是可以的,不知道善友用这个持久化干什么用的.
修改后的代码如下
/// <summary>
/// QQ登陆页面
/// </summary>
[HttpGet]
public ActionResult QQLogin(string returnUrl)
{
if (!string.IsNullOrWhiteSpace(returnUrl))
{
Session["RETURNURL"] = returnUrl;
}
var context = new QzoneContext();
string state = Guid.NewGuid().ToString().Replace("-", "");
Session["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"];
Session["verifier"] = verifier;
string requestState = Session["requeststate"].ToString(); if (state == requestState)
{
qzone = new QOpenClient(verifier, state);
var currentUser = qzone.GetCurrentUser();
// Session["QzoneOauth"] = qzone; //不支持session持久化sqlserver方法
if (!string.IsNullOrWhiteSpace((Session["RETURNURL"] ?? string.Empty).ToString()))
{
url = Session["RETURNURL"].ToString();
}
ViewBag.friendlyName = currentUser.Nickname;
ViewBag.img = currentUser.Figureurl; } }
return View();
}
WebApi系列~QQ互联的引入(QConnectSDK)的更多相关文章
- WebApi系列~目录
回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...
- QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...
- 【WebApi系列】详解WebApi如何传递参数
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- Discuz3.1登录QQ互联显示redirect uri is illegal(100010)的解决
QQ互联最近也是BUG不断,引起了很多用户的不满,从早前关闭群组功能,到发布2.0接口标准,引发系列站长用户的连锁反应.而Discuz从X3开始,为了应对QQ互联的2.0接口标准,采用了云平台来整合Q ...
- QQ互联登陆(Java)
一.准备部分 1.账户注册 腾讯开放平台网址: https://connect.qq.com/index.html 首先需要到开放平台注册QQ互联开发者身份.注册之后创建一个网站应用,注意,需要备案成 ...
- 开发QQ互联ios版Ane扩张 辛酸史
来源:http://www.myexception.cn/operating-system/1451490.html 开发QQ互联ios版Ane扩展 辛酸史 开发QQ互联ios版Ane扩展辛酸史: 1 ...
随机推荐
- TYVJ博弈论
一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140 飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...
- java中FileInputStream和FileOutputStream对图片操作的例子
package a.ab; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.F ...
- sqlserver和oracle的递归查询
1.sqlserver递归查询方式 CTE: if OBJECT_ID('tb','N') is not null drop table tb; create table tb(id va ...
- RabbitMQ 记录
RabbitMQ 中文文档 : http://rabbitmq.mr-ping.com/description.html 官方教程译文: 一 http://blog.csdn.net/xiaoxian ...
- 一个用shell写的统计目录下统计文件行数的代码
此代码是用来回忆当初学的shell脚本,很多知识忘了,写这个花了我三个小时的时间 #!/bin/ksh #count *.c file the num of lineg_csum=0g_hsum=0 ...
- WideCharToMultiByte和MultiByteToWideChar函数的用法
为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读<Windows核心编程>,总结出正确的用法. ...
- Keeping Async Methods Alive
Consider a type that will print out a message when it’s finalized, and that has a Dispose method whi ...
- 积累一点ctf需要掌握的常见脚本知识
1.暴力破解压缩包. 2.利用像素点还原图片. from PIL import Image import re if __name__ == '__main__': x = 887 //将像素点个数进 ...
- Java日期格式化及其使用例子收集
1 SimpleDateFormat担当重任,怎样格式化都行 import java.util.Date; import java.text.SimpleDateFormat; public clas ...
- linux shell 字符串操作
转:http://justcoding.iteye.com/blog/1963463 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作 ...