.Net QQ互联教程

qq互联只需要备案即可申请,申请成功后可以到qq互联官网查看教程,本站开始想使用js的教程但是由于本站需要绑定本站的账号用js教程无法完成,所以使用原始的oauth2.0来完成。

申请qq互联接口

qq互联官网

申请的时候需要注意将申请的应用名称和备案域名的网站名称一致才能通过

开始编码实现

  1. 展示qq登录的按钮,可以到官网下载登录的logo。
  2. 将点击按钮后的链接跳到你申请的回掉页面。
  3. 回掉页面设计一般是绑定已有账号和绑定新账号其实就是登录和注册。
  4. 回掉页面展示效果(可自行设计)。
  5. 实现服务端的业务逻辑。

查阅相关案例都说qq登录无须绑定已有账号,这样失去了qq登录的用户体验,但是本人觉得还是有必要的,下次登录的话即可直接登录。

服务端代码

 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();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值