使用qq互联js sdk进行第三方登陆.使用了自定义登录按钮qqLoginBtn,一个字体图标.
基本过程,其他页面跳转到登录页面时,传递前一页网址originUrl,获取前一页后qq登陆成功Check()后跳转回originUrl.如果originUrl为空,跳回主页.
跳转的时候网址加入query值[openid]和[accessToken].
$(function () { $('#qqLoginBtn').click(function () { QC.Login.showPopup({ appId: "101381207", redirectURI: "https://www.songshizhao.com/account/login.aspx" + "?url="+originUrl }); }); }); var openId, accessToken; if (QC.Login.check()) { QC.Login.getMe(function (openId, accessToken) { //$.cookie('openId', openId, { expires: 140000000 }); //$.cookie('accessToken', accessToken, { expires: 140000000 }); var redirectURI = originUrl + "?openId=" + openId + "&accessToken=" +accessToken; window.location.href =redirectURI; }) }
登陆成功后,获取到openid和accessToken后,使用网址传值,导航到来页.同时在Asp,net母版页后台代码Page_load中加入代码如下:
if (!IsPostBack) { try { //var redirectUrl = Convert.ToString(Request.QueryString["url"]); var accessToken = Convert.ToString(Request.QueryString["accessToken"]); var openId = Convert.ToString(Request.QueryString["openId"]); if (accessToken.Length > 0 & openId.Length > 0) { //使用API拉取qq用户信息 var qqUser = GetQQInfo(openId, accessToken); if (qqUser != null) { var userInfo = user.QQ_info_update_or_regist(openId, qqUser.nickname, qqUser.figureurl_qq_2, "saws1w111ooo"); if (userInfo != null) { HttpContext.Current.Session.Timeout = 480; HttpContext.Current.Session["username"] = userInfo.Username; HttpContext.Current.Session["userphoto"] = userInfo.Photo; } else { //Response.Write("<script>alert('使用qq登陆注册用户失败, 原因: 未知');</script>"); } } else { //Response.Write("<script>alert('拉取qq用户信息失败');</script>"); } } } catch (Exception) { } }
根据openid和token获取用户信息,判断是否第一次登陆,QQ_info_update_or_regist方法是后台方法判断数据库中是否已存在openid,如存在进行数据更新,如不存在,进行注册.成功后写入session,登陆成功.其中,根据openid和token获取qq信息的代码如下:
public static QQ_User_Info GetQQInfo(string OpenId, string AccessToken) { QQ_User_Info QQ_User = new QQ_User_Info(); try { //请求qq互联API string InfoUrl = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", AccessToken, "101381***", OpenId); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(InfoUrl); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; string JasonString; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream myResponseStream = response.GetResponseStream(); using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8)) { JasonString = myStreamReader.ReadToEnd(); } } //反序列化json JavaScriptSerializer serializer = new JavaScriptSerializer(); QQ_User = serializer.Deserialize<QQ_User_Info>(JasonString); if (QQ_User.ret == "0")//ret=0说明授权成功 { return QQ_User; //return user.QQ_info_update_or_regist(OpenId, QQ_User.nickname, QQ_User.figureurl_qq_2, "saws1w111ooo"); } else { return null; } } catch (Exception) { return null; } }