qq互聯只須要備案便可申請,申請成功後能夠到qq互聯官網查看教程,本站開始想使用js的教程可是因爲本站須要綁定本站的帳號用js教程沒法完成,因此使用原始的oauth2.0來完成。session
qq互聯官網app
申請的時候須要注意將申請的應用名稱和備案域名的網站名稱一致才能經過網站
查閱相關案例都說qq登陸無須綁定已有帳號,這樣失去了qq登陸的用戶體驗,可是本人以爲仍是有必要的,下次登陸的話便可直接登陸。編碼
服務端代碼url
public ActionResult QQReturn() { int qqid = 0; string name = "", image = "",sex=""; #region 首次調用 if (string.IsNullOrEmpty(Request["code"])) { #region 獲取code string url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + appid + "&redirect_uri=" + HttpUtility.UrlEncode("http://pqpqpq.cn/account/qqreturn") + "&state=loginsuccess&scope=get_user_info,get_info"; Response.Redirect(url); #endregion } else { #region 獲取access_token if (Request["state"] == "loginsuccess") { string code = Request["code"]; string url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=" + appid + "&client_secret=" + appkey + "&code=" + code + "&redirect_uri=" + HttpUtility.UrlEncode("http://pqpqpq.cn/account/qqreturn"); string str = RequestType.HttpGet(url); if (!string.IsNullOrEmpty(str) && str.IndexOf('&') != -1) { if (!str.Contains("msg")) { string[] arr = str.Split('&'); string[] arr1 = new string[arr.Length]; for (int i = 0; i < arr.Length; i++) { arr1[i] = arr[i].Split('=')[1]; } access_token = arr1[0]; refresh_token = arr1[2]; expires_in = arr1[1]; } } } #endregion } #endregion string url1 = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token; string str1 = RequestType.HttpGet(url1); if (!string.IsNullOrEmpty(str1)) { str1 = str1.Replace("callback(", "").Replace(")", "").Replace(";", ""); } //AddLog(str1); AccessToken openid = JsonConvert.DeserializeObject<AccessToken>(str1); if (openid != null) { var isopenid = db.person_qq_login.Where(c => c.openid == openid.openid).FirstOrDefault(); if (isopenid == null) { #region 插入qq登陸信息 string geturl = "https://graph.qq.com/user/get_user_info?access_token=" + access_token + "&oauth_consumer_key=" + appid + "&openid=" + openid.openid; string userstr = RequestType.HttpGet(geturl); AddLog(userstr); UserInfo userdata = JsonConvert.DeserializeObject<UserInfo>(userstr); if (userdata.ret == 0) { person_qq_login qq = new person_qq_login(); qq.figureurl = userdata.figureurl; qq.figureurl_1 = userdata.figureurl_1; qq.figureurl_2 = userdata.figureurl_2; qq.figureurl_qq_1 = userdata.figureurl_qq_1; qq.figureurl_qq_2 = userdata.figureurl_qq_2; qq.gender = userdata.gender; qq.is_yellow_vip = userdata.is_yellow_vip; qq.is_yellow_year_vip = userdata.is_yellow_year_vip; qq.level = userdata.level; qq.msg = userdata.msg; qq.nickname = userdata.nickname; qq.ret = userdata.ret; qq.vip = userdata.vip; qq.yellow_vip_level = userdata.yellow_vip_level; qq.openid = openid.openid; qq.addTime = DateTime.Now; db.person_qq_login.Add(qq); db.SaveChanges(); if (db.SaveChanges()>0) { qqid = qq.ID; name = userdata.nickname; image = userdata.figureurl_qq_2; sex = userdata.gender; } } #endregion } else { var isuser = db.person_user.Where(c => c.qqID == isopenid.ID).FirstOrDefault(); if (isuser == null) { qqid = isopenid.ID; name = isopenid.nickname; image = isopenid.figureurl_qq_2; } else { //記錄session Session["user_model"] = isuser; return RedirectToAction("Index", "Center"); } } } ViewData["qqid"] = qqid.ToString(); ViewData["nickname"] = name; ViewData["faceimage"] = image; ViewData["sex"] = sex; return View(); }