1 public ActionResult Tencent()
2 {
3 var CallbackUrl = String.Format("http://{0}/TencentToken", Request.GetString("Http_Host"));
4 var Tenc = new TencentBeginOAuthToken(
5 appId,
6 appKey,
7 "http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token");
8 String Url = Tenc.RequestUrl("http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize", CallbackUrl);
9 Session["AuthorizedTokenKey"] = Tenc.AuthorizedTokenKey;//保存OAuthParameterName.oauth_token_secret ,授权的临时token对应的密钥
10 if (Url.IsEmpty())
11 return Content("获取临时授权失败,用户未能登陆");
12 else
13 return Redirect(Url);
14 }
15
16 [AcceptVerbs(HttpVerbs.Get)]
17 public ActionResult TencentToken()
18 {
19 if (Session["AuthorizedTokenKey"] == null)
20 return ErrorView("页面出现内部错误,请联系管理员");
21 //
22 var Tenc = new TencentLoginedOAuthToken(appId, appKey, Request.GetQueryString);
23 Tenc.AuthorizedTokenKey = Session["AuthorizedTokenKey"].ToString();
24 var AccessTokenString = Tenc.RequestUrl("http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token", "");
25 var OpenIDDict = OAuthHelper.CreateParamFromReturnToken(AccessTokenString);
26 var AccessToken = new TencentAccessedToken(TencentAccessType.GetUserInfo, appId, appKey, OpenIDDict);
27
28 //在这里已经获得了openid,就可以判断了
29 if (OpenIDDict.ContainsKey(OAuthParameterName.openid) == false)
30 {
31 return ErrorView("QQ登陆失败,请确定你的密码", true);
32 }
33 var OpenID = OpenIDDict[OAuthParameterName.openid].Value;
//这里是在我的项目内根把这个openid获得用户的信息.
34 var Member = ServicesProcess.WM_Member.SelectFromTencent(OpenIDDict[OAuthParameterName.openid].Value);
35 if (Member != null)
36 {
37 this.Login(Member);
38 this.SaveLogin(1);
39 return NoticeView("登陆成功,欢迎您", "/index");
40 }
41 //没有登陆过,那就开始组织一个账户
42 var Data = AccessToken.RequestUrl("http://openapi.qzone.qq.com/user/get_user_info", "");
43 var UserInfoDict = OAuthHelper.CreateParamFromJson(Data);
44 if (UserInfoDict.ContainsKey(OAuthParameterName.nickname))
45 {
46 var UserInfo = new TencentUserInfo();
47 UserInfo.OpenID = OpenID;
48 return View(UserInfo); //返回一个提供用户选择注册还是绑定以有账号的页面
49 }
50
51 return ErrorView("登陆失败,返回首页", "/index");
52 }