.Net QQ互聯教程

qq互聯只須要備案便可申請,申請成功後能夠到qq互聯官網查看教程,本站開始想使用js的教程可是因爲本站須要綁定本站的帳號用js教程沒法完成,因此使用原始的oauth2.0來完成。session

申請qq互聯接口

qq互聯官網app

申請的時候須要注意將申請的應用名稱和備案域名的網站名稱一致才能經過網站

開始編碼實現

  1. 展現qq登陸的按鈕,能夠到官網下載登陸的logo。
  2. 將點擊按鈕後的連接跳到你申請的回掉頁面。
  3. 回掉頁面設計通常是綁定已有帳號和綁定新帳號其實就是登陸和註冊。
  4. 回掉頁面展現效果(可自行設計)。
  5. 實現服務端的業務邏輯。

查閱相關案例都說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();
        }
相關文章
相關標籤/搜索