• .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();
            }
    
  • 相关阅读:
    设计模式(三)--观察者模式
    设计模式(二)--单例模式
    tornado 资源
    复习 网络通信协议
    设置允许远程连接MySQL (Ubuntu为例)
    ubuntu 下安装ssh服务
    Python 运算内建函数
    py知识点拾遗之sort(),sorted(),reverse(),reversed()
    SQLite安装 以及 SQLite header and source version mismatch错误解决 (In debian)
    debian折腾笔记
  • 原文地址:https://www.cnblogs.com/liujiaxian/p/6336838.html
Copyright © 2020-2023  润新知