“QQ登錄”使用戶能使用QQ賬號一鍵登錄接入網(wǎng)站,大大降低了注冊、登錄的門檻。借助龐大的QQ用戶群,給第三方網(wǎng)站帶來更多新用戶。已登錄用戶還可以將在第三方網(wǎng)站發(fā)布、分享的信息即時同步到QQ空間,使網(wǎng)站內(nèi)容通過好友關(guān)系得到進一步的傳播。
騰訊社區(qū)開放平臺.NET SDK是基于騰訊社區(qū)開放平臺的OAuth登錄文檔和API文檔 使用C#開發(fā)的.NET 4.0的一個庫,目前完整實現(xiàn)了騰訊社區(qū)開放平臺的所有接口?梢约涌炷愕纳鐓^(qū)接入到騰訊社區(qū)開放平臺,免去大量的重復(fù)的調(diào)試開發(fā)的時間,所以我是以New BSD協(xié)議創(chuàng)建的開源項目,各位有同樣需求的各位同仁參與建設(shè)著一個項目,項目的托管地址是http://qqconnect.codeplex.com/。
騰訊社區(qū)開放平臺.NET SDK使得你調(diào)用騰訊社區(qū)開放平臺的REST接口非常容易,你只需要到http://connect.opensns.qq.com/apply 申請到必須的consumer key和consumer secret,在你的申請通過了騰訊社區(qū)開放平臺的審核后就可以得到。這個酷的主要特性如下:
- 封裝好了騰訊社區(qū)開放平臺的OAuth協(xié)議訪問騰訊社區(qū)開放平臺的REST接口
- 和騰訊社區(qū)開放平臺的接口保持同步(目前只有一個接口,將來肯定會不斷增加)
這個庫使用Visual Studio 2010和C# 3.0構(gòu)建的,主要擴展和使用到下面的開源庫:
- DotnetOpenauth:DotNetOpenAuth 是一個 C# 開發(fā)包,用以實現(xiàn) OpenID 2.0 的提供者、中繼方(Relying Party)、OAuth使用者和OAuth服務(wù)提供者;同時支持 InfoCard Selector 。OAuth協(xié)議客戶端的實現(xiàn)上參考了這個項目的代碼。
- Jayrock:Jayrock是一個LGPL的開源的軟件,實現(xiàn)了JSON和JSON-RPC,支持微軟ASP.NET框架。具體可以參考文章:Jayrock: JSON and JSON-RPC for .NET
上面我們從高層次了解了這個SDK的實現(xiàn)原理,下面我們介紹如何使用這個SDK來和騰訊社區(qū)開放平臺進行交互。SDK主要有兩個需要關(guān)注的類QzoneSDK.Context.QzoneContext
和 QzoneSDK.Qzone。
首先我們結(jié)合【QQ登錄】OAuth登錄文檔來說明。Qzone OAuth總體處理流程里共有七個步驟,從下面的總體流程圖中可以看到:
左側(cè):為第三方網(wǎng)站需要做的事情。在每個綠色的方框里,標明了第三方應(yīng)該調(diào)用的接口,接口主要功能及邏輯見Qzone OAuth接口說明。
右側(cè):為Qzone接收到第三方應(yīng)用發(fā)過來的請求后做的事情。第三方請求的發(fā)送地址以及應(yīng)包含的參數(shù)在接下來的單步詳解中進行了說明
通過類QzoneSDK.Context.QzoneContext帶上你申請的oauth_consumer_key (對應(yīng)Qzone的appid)和oauth_consumer_secret (對應(yīng)Qzone的appkey)到騰訊社區(qū)開放平臺獲取到Request Token,然后把tokenKey和tokensecret保存到Session里,后續(xù)需要使用。示例代碼如下:
string key = ConfigurationManager.AppSettings["ConsumerKey"];
string secret = ConfigurationManager.AppSettings["ConsumerSecret"];
var context = new QzoneSDK.Context.QzoneContext(key, secret);
var callbackUrl = "http://localhost/account/QQCallback";
var requestToken = context.GetRequestToken(callbackUrl);
Session["requesttokenkey"] = requestToken.TokenKey;
Session["requesttokensecret"] = requestToken.TokenSecret;
var authenticationUrl = context.GetAuthorizationUrl(requestToken, callbackUrl);
return Redirect(authenticationUrl);
用戶在騰訊社區(qū)開放平臺上授權(quán)使用后會導(dǎo)向到你的網(wǎng)站,也就是上圖的第三步,在門上述的callback 的頁面上就可以獲取上圖第四步的參數(shù),利用上述獲得的參數(shù)調(diào)用QzoneSDK.Qzone進行第五步調(diào)用,就可以獲得AccessToken,這個AccessToken,目前access_token(及其secret)是長期有效的,和某一個openid對應(yīng),目前可以支持線下獲取該openid的信息。
if (Request.QueryString["oauth_vericode"] != null)
{
var requestTokenKey = Session["requesttokenkey"].ToString();
var requestTokenSecret = Session["requesttokensecret"].ToString();
var verifier = Request.QueryString["oauth_vericode"];
string key = ConfigurationManager.AppSettings["ConsumerKey"];
string secret = ConfigurationManager.AppSettings["ConsumerSecret"];
QzoneSDK.Qzone qzone = new QzoneSDK.Qzone(key, secret, requestTokenKey, requestTokenSecret, verifier);
var access = qzone.OAuthTokenKey;
var currentUser = qzone.GetCurrentUser();
var user = (BasicProfile)JsonConvert.Import(typeof(BasicProfile),currentUser);
}
上述代碼還演示調(diào)用騰訊開放社區(qū)目前唯一的一個API ( get_user_info),通過Jayrock庫將Json數(shù)據(jù)轉(zhuǎn)換為庫中定義的用戶登錄數(shù)據(jù)的實體BasicProfile。
項目的下載地址:http://qqconnect.codeplex.com/releases/view/65042
項目文檔:騰訊社區(qū)開放平臺教程.pdf