[转载]开源腾讯QQ登录 .Net SDK v1.0 beta (Qzone OAuth Client For Asp.Net )

[转载]开源腾讯QQ登录 .Net SDK v1.0 beta (Qzone OAuth Client For Asp.Net ) – Hunter.Wei – 博客园.

开源地址:http://qzoneoauth.codeplex.com

示例:http://www.sl8.so

腾讯社区开发平台:http://opensns.qq.com/

腾 讯开放了QQ登录功能,对广大网民是一件大喜事。用户可以从注册、记录杂七杂八的用户名密码中解脱,站长们也可以方便的共享到腾讯的用户。这一天,我们等 你等的好苦:(。第一时间为Silverlight吧申请了QQ登录,但现在腾讯却没提供封装好的.Net SDK,没办法,自己动手,衣丰食足。开发过程中遇到了大大小小的问题,现在的结论要坚信一个真理:腾讯的服务没问题,问题只在我们的程序。即使是返回 12000-13000(服务器出错联系管理员)这类问题,但请相信,服务器正常着呢。为了这个问题,我一度怀疑腾讯服务器咨询腾讯企业QQ,后来千呼万 唤,在我要放弃时得到回复,是我加密有问题,继续Coding,调试。。终成正果。现在已经封装成了组件开源,让后来人在繁琐的认证过程解脱。

  • 封装功能

我们知道腾讯QQ登录要经如下7个步骤:

  1. 请求临时token
  2. 生成未授权的临时token
  3. 引导用户到Qzone的登录页
  4. Qzone引导用户跳转到第三方应用
  5. 请求access token
  6. 生成access token
  7. 访问或修改空间受保护的资源

过程还是比较繁杂的,每个步骤都需要细心,尤其是加密字段的生成。

使用封装好的 QzoneOAuth .Net SDK,你只需如下三个步骤即可完成(确切的说只有两步),无需关注认证的过程。

  1. 配置 Web.config HttpHandler
  2. 调用登录方法
  3. 访问资源

接下来就看看我们如何使用此SDK。

  • 环境准备

开源地址:http://qzoneoauth.codeplex.com

.Net Framework 版本:2.0

  • 使用步骤

SDK里提供了 两个方法和一个属性:

Qzone.OAuth.Utility.Login(string appid, string appkey, string qqcallbackurl, string onSuccessRedirectUrl, string onFailRedirectUrl)

说明:使用腾讯OAuth登录

string Qzone.OAuth.Utility.GetUserInfo(DataFormatEnum format)

说明:获取用户信息

Qzone.OAuth.Utility.OpenId

说明:和QQ号码一一对应的OpenId

1. 配置Web.config

在httpHandlers配置头处理文件地址

<httpHandlers>
<add verb=”*” path=”*/login.axd” type=”Qzone.OAuth.TencentOAuthCallBackHandler, Qzone.OAuth” validate=”false”/>

</httpHandlers>
其中 */login.axd 是可以自由设定的,这个值在登录方法里手工传值(即参数 qqcallbackurl)。

2. 调用登录方法

Qzone.OAuth.Utility.Login(string appid, string appkey, string qqcallbackurl, string onSuccessRedirectUrl, string onFailRedirectUrl)

参数:

appid:即申请QQ登录后分配的app id,六位数字。

appkey:即申请QQ登录后分配的app key,一长串字符串。

qqcallbackurl:用户在登录成功后,由腾讯调转到的地址。就是第一步我们配置的地址:*/login.axd,这里你无需关注,照着写就行了。

onSuccessRedirectUrl:登录完成后调转到网站的地址,这时,从 Qzone.OAuth.Utility.OpenId 属性,你可以得到用QQ号码对应的OpenId,一个号码对应一个OpenId。接下来你就可以自动的在你网站建立对应的用户或者绑定以前的用户了。

onFailRedirectUrl:登录失败调转的地址,此地址用来失败处理提示用户,该地址后附件错误代码,方便查询。

Silverlight吧中的示例:

public partial class tencentlogin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Qzone.OAuth.Utility.Login(“000000”, “aaaaaaaaaaaaaaaaaaaaaaaaaaaaa”, http://www.sl8.so/login.axd”, “tencentloginsuccess.aspx”, “tencentloginfail.aspx”);
}
}

3.获取用户相关资源

由于其它资源需要认证,现在仅提供获取用户信息方法,此方法不需要进一步认证。

string Qzone.OAuth.Utility.GetUserInfo(DataFormatEnum format)

参数:

format:返回的数据类型,对应xml或者json,具体查看腾讯的看法文档。http://connect.opensns.qq.com/wiki/

在 调转到腾讯的登录界面后,发现它会刷新我们浏览器窗口的大小,说明腾讯在这个步骤是提倡我们用弹出窗口的方式登录的,所以最后是在window.open 里打开登录地址。一句话,现在你需要做的就是:主界面弹出登录窗口—>登录窗口的页面调用Login方法—>在成功后调转的页面绑定用户等操 作、再关掉弹出的窗口并刷新主界面。

  • 后记

1. 请求过程中,在生成oauth_signature参数签名值时,URL编码一定要用大写。

如:GET&http%3a%2f%2fopenapi.qzone…. 要写成 GET&http%3A%2F%2Fopenapi.qzone….

2. 生成oauth_signature的base64编码后需再次URL编码。

3. 请求用户信息后得的的头像是QQ空间的头像,而不是QQ的用户头像。

4. 为了测试的方便,可以修改系统的 hosts 文件。因为腾讯在跳转时,是调转到网站申请的域名,通过修改hosts 文件可以隐射的本机。

如:http://www.sl8.so

hosts 文件:

127.0.0.1 www.sl8.so

当浏览器调转到 http://www.sl8.so/login.axd 时,其实已经隐射到了127.0.0.1本机了。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏