• QQ授权登录


    链接QQ:tencent://message/?uin=295611875&Site=hexun.com/ngdao&Menu=yes

    这两天在做网站第三方登录,总结一下QQ登录吧,支付宝就不用了(下载dome把ID什么的换一换就基本可以了。),本文主要说的是代码的实现方式,逻辑部分主要还是根据帮助文档来的。不懂的同学可以先看看文档。 http://open.qq.com/

    直接上代码吧:

    复制代码
     1        string client_id = "分配的APP ID";
     2        string appid = " 分配的 APP KEY";
     3        string Return_url = "返回处理的url";
     4        public string Authorize()
     5        {
     6            string state = new Random(100000).Next(99, 99999).ToString();//随机数
     7            HttpHelper http = new HttpHelper();
     8            string url = string.Format("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={0}&redirect_uri={1}&state={2}", client_id, Return_url, state);
     9           string str="<script> location.href='" + url + "'</script>";
    10           return str;
    11        
    12        }
    复制代码

     点击事件直接调用Authorize()就可以了,我是直接用跳转链接处理的。

    复制代码
    1  protected void Page_Load(object sender, EventArgs e)
    2     { 
    3         QQ_Login q = new QQ_Login();
    4         string url = q.Authorize();//这里调用
    5         Response.Write(url);
    6     }
    复制代码

    效果:

    点击图像,接着在,回调的url里面调用下面的方法,参数再往下看一点;

    复制代码
     1        public User_info Back_User(string code)
     2        {
     3            string state = new Random(100000).Next(99, 99999).ToString();//随机数
     4            User_info ui = new User_info();
     5            string url = string.Format("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={0}&client_secret={1}&code={2}&redirect_uri={3}&state={4}", client_id, appid, code, Return_url, state);
     6            string uu = HttpHelper.HtmlFromUrlGet(url);//处理http请求帮助类
     7            string code1 =  uu.Split('&')[0].Split('=')[1].ToString();//获得access_token
     8 
     9            //根基access_token获取用户唯一OpenID
    10           string url_me = string.Format("https://graph.qq.com/oauth2.0/me?access_token={0}" , code1); 
    11            string callback = HttpHelper.HtmlFromUrlGet(url_me);//这里获取的
    12            callback = callback.Substring(callback.IndexOf('(') + 1, (callback.IndexOf(')') - callback.IndexOf('(') - 1)).Trim();
    13            //  dynamic jsonP = JValue.Parse(callback); //这里我用的是一个序列化类库 Newtonsoft.Json.dll 6.0.4版本无奈公司版本过低 只能用4.0的版本 建议使用6.0.4版本
    14            a jsonP = JsonConvert.DeserializeObject<a>(callback);//Newtonsoft.Json.dll 4.0或4.5版本
    15            string OpenID = jsonP.openid;//获取用户唯一的OpenID  
    16 
    17            //根据OpenID获取用户信息 可以显示更多 用的就几个 需要的可以自己在下面加
    18            string getinfo = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", code1, client_id, OpenID);
    19            string user = HttpHelper.HtmlFromUrlGet(getinfo);
    20            b info = JsonConvert.DeserializeObject<b>(user);
    21            ui.Name = info.nickname;
    22            ui.OpenID = OpenID;
    23            ui.img_qq100 = info.figureurl_qq_1;
    24            ui.img_qq50 = info.figureurl_qq_2;
    25            ui.city = info.city;
    26            ui.year = info.year;
    27            ui.Type = 1;
    28            return ui; 
    29    
    30        }
    复制代码

    点击图像时跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code;

    1            
    2                  User_info ui = new User_info();
    3                  var verifier = Request.Params["code"]; //获取Authorization Code
    4                  ui = q.Back_User(verifier); 掉用方法并返回数据

    再把返回的类贴出来吧

    复制代码
     1     public class User_info
     2     {
     3         public string OpenID { get; set; }//用户唯一appid
     4 
     5         public string Name { get; set; } 
     6 
     7         public string img_qq50 { get; set; } //QQ图像40*40
     8 
     9         public string img_qq100 { get; set; }
    10 
    11         public string city { get; set; }
    12 
    13         public int year { get; set; } 
    14     }
    复制代码
    复制代码
    1    public class a {
    2 
    3        public string client_id { get; set; }
    4 
    5        public string openid { get; set; }
    6    }
    复制代码
  • 相关阅读:
    将备份中的数据插入到数据库中的具体步骤
    C#三层架构(获取中文拼音和给密码加密)
    C# 三层架构项目体会(1)
    leetcode——Best Time to Buy and Sell Stock
    leetcode——Binary Tree Maximum Path Sum
    leetcode——Valid Palindrome
    leetcode——Word Ladder II
    学习制作SLG游戏(一)
    leetcode——Maximum Gap
    cocos2d学习资源收集
  • 原文地址:https://www.cnblogs.com/ingstyle/p/6198564.html
Copyright © 2020-2023  润新知