.Net QQ互联教程

简介: qq互联只需要备案即可申请,申请成功后可以到qq互联官网查看教程,本站开始想使用js的教程但是由于本站需要绑定本站的账号用js教程无法完成,所以使用原始的oauth2.0来完成。申请qq互联接口qq互联官网申请的时候需要注意将申请的应用名称和备案域名的网站名称一致才能通过开始编码实现展示qq登录的按钮,可以到官网下载登录的logo。

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();
        }
目录
相关文章
|
6月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
81 0
|
1月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
1月前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7
|
2月前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
3月前
|
开发框架 .NET API
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
186 3
|
存储 开发框架 .NET
ASP.NET Core SignalR系列之Hub教程
ASP.NET Core SignalR系列之Hub教程
233 0
|
6月前
|
开发框架 .NET 物联网
.NET从入门到精通,零基础也能搞定的基础知识教程
.NET从入门到精通,零基础也能搞定的基础知识教程
140 0
|
6月前
|
定位技术 C#
.NET微信网页开发相关文章教程
.NET微信网页开发相关文章教程
|
6月前
|
XML 数据可视化 数据库
VB.NET—DataGridView控件教程详解
VB.NET—DataGridView控件教程详解
412 0

热门文章

最新文章