Beispiel #1
0
        public override OAuthUserInfo GetOAuthUserInfo()
        {
            if (!IsAuthorized)
            {
                return(null);
            }
            var ub = new UriBuilder("https://graph.qq.com/user/get_user_info");

            ub.Query = string.Format("access_token={0}&oauth_consumer_key={1}&openid={2}", AccessToken, ClientId, UID);

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("access_token", AccessToken);
            parameters.Add("oauth_consumer_key", ClientId);
            parameters.Add("openid", UID);
            HttpWebResponse response = HttpHelper.CreatePostHttpResponse("https://graph.qq.com/user/get_user_info", parameters);

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(null);
            }
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                string     content    = reader.ReadToEndAsync().Result;
                QQUserInfo qqUserinfo = JsonConvert.DeserializeObject <QQUserInfo>(content);
                return(new OAuthUserInfo()
                {
                    AccessToken = AccessToken,
                    Uid = UID,
                    SystemType = OAuthSystemType.QQ,
                    Name = qqUserinfo.nickname,
                    ProfileImgUrl = qqUserinfo.figureurl_qq_2
                });
            }
        }
Beispiel #2
0
 //4.获取用户信息
 #region 获取用户基本信息
 /// <summary>
 /// 获取用户基本信息
 /// </summary>
 /// <returns>用户基本信息对象</returns>
 public QQUserInfo GetUserInfo()
 {
     try
     {
         QQUserInfo model = null;
         Dictionary <string, object> result = Conf.GetDictionary(UserBaseInfoUrl, Access_Token, Conf.QQ_Client_ID, Open_ID);
         if (result != null && result.Count > 0)
         {
             string ret = result["ret"].ToString();                    //返回码
             string msg = result["msg"].ToString();                    //如果ret<0,会有相应的错误信息提示,返回数据全部用UTF-8编码
             if (ret == "0")
             {
                 model = new QQUserInfo()
                 {
                     NickName           = result["nickname"].ToString(),
                     FigureURL          = result["figureurl"].ToString(),
                     FigureURL_1        = result["figureurl_1"].ToString(),
                     FigureURL_2        = result["figureurl_2"].ToString(),
                     FigureURL_QQ_1     = result["figureurl_qq_1"].ToString(),
                     FigureURL_QQ_2     = result["figureurl_qq_2"].ToString(),
                     Gender             = result["gender"].ToString(),
                     Is_Yellow_VIP      = result["is_yellow_vip"].ToString(),
                     Yellow_VIP_Level   = result["yellow_vip_level"].ToString(),
                     Is_Yellow_Year_VIP = result["is_yellow_year_vip"].ToString()
                 };
                 this.UserInfo = model;
             }
         }
         return(model);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Beispiel #3
0
        public ActionResult CallBack()
        {
            string backState = Request.QueryString["state"];
            string code      = Request.QueryString["code"];

            if (null != backState && null != code && null != Session["QQLoginState"] && backState == Session["QQLoginState"].ToString())
            {
                Session["QQLoginState"] = null;
                //调获取AccessToken的接口
                string access_token = QQLoginHelper.GetAccessToken(code);
                //调获取OpenID的接口
                string openid = QQLoginHelper.GetOpenId(access_token);
                //调获取用户信息的接口
                QQUserInfo qqUserInfo = QQLoginHelper.GetQQUserInfo(access_token, openid);
                Response.Cookies["is_lost"].Value          = qqUserInfo.is_lost.ToString();
                Response.Cookies["province"].Value         = qqUserInfo.province;
                Response.Cookies["city"].Value             = qqUserInfo.city;
                Response.Cookies["year"].Value             = qqUserInfo.year;
                Response.Cookies["constellation"].Value    = qqUserInfo.constellation;
                Response.Cookies["figureurl_qq"].Value     = qqUserInfo.figureurl_qq;
                Response.Cookies["figureurl_type"].Value   = qqUserInfo.figureurl_type;
                Response.Cookies["ret"].Value              = qqUserInfo.ret.ToString();
                Response.Cookies["msg"].Value              = qqUserInfo.msg;
                Response.Cookies["nickname"].Value         = qqUserInfo.nickname;
                Response.Cookies["figureurl"].Value        = qqUserInfo.figureurl;
                Response.Cookies["figureurl_1"].Value      = qqUserInfo.figureurl_1;
                Response.Cookies["figureurl_2"].Value      = qqUserInfo.figureurl_2;
                Response.Cookies["figureurl_qq_1"].Value   = qqUserInfo.figureurl_qq_1;
                Response.Cookies["figureurl_qq_2"].Value   = qqUserInfo.figureurl_qq_2;
                Response.Cookies["gender"].Value           = qqUserInfo.gender;
                Response.Cookies["is_yellow_vip"].Value    = qqUserInfo.is_yellow_vip;
                Response.Cookies["vip"].Value              = qqUserInfo.vip;
                Response.Cookies["yellow_vip_level"].Value = qqUserInfo.yellow_vip_level;
                Response.Cookies["level"].Value            = qqUserInfo.level;
                Response.Cookies["figureurl_qq_1"].Value   = qqUserInfo.is_yellow_year_vip;
                //if (qqUserInfo.ret == 0 && string.IsNullOrEmpty(qqUserInfo.msg))
                //{
                //    Response.Cookies["nickname"].Value = qqUserInfo.nickname;  //将值写入到客户端硬盘Cookie
                //    Response.Cookies["nickname"].Expires = DateTime.Now.AddDays(7);//设置Cookie过期时间
                //}
                //else
                //{
                //    //获取用户失败
                //    throw new ApplicationException(qqUserInfo.msg);
                //}
                if (Session["BeforeLoginUrl"] != null)
                {
                    return(Redirect(Session["BeforeLoginUrl"].ToString())); //返回登陆之前的URL
                }
                else
                {
                    throw new Exception("登录之前的路由丢失");
                }
            }
            else
            {
                throw new Exception("登录State已丢失或不正确");
            }
        }
        public async Task <ActionResult> GetQQUserInfo([FromQuery] string accessToken)//分页面跳转可以多带一个参数
        {
            string     jsonResult = "";
            Guid       InfoId     = Guid.Parse("00000000-0000-0000-0000-000000000000");
            string     email      = "";
            QQUserInfo qqUserInfo = new QQUserInfo();
            User       user       = new User();
            QQLogin    login      = new QQLogin();
            string     openId     = login.GetOpenID(accessToken);

            qqUserInfo = login.GetQQUserInfo(accessToken, openId);
            if (qqUserInfo.Ret == 0 && string.IsNullOrWhiteSpace(qqUserInfo.Msg)) //成功
            {
                user.UserPortrait    = qqUserInfo.Figureurl_qq_1;
                user.UserName        = qqUserInfo.Nickname;
                user.UserAccessToken = accessToken;
                user.UserOpenId      = openId;
                user.UserId          = new Guid();
                if (await userService.AddEntityAsync(user))
                {
                    var userInfo = await userService.GetUserByOpenIdAsync(user.UserOpenId);

                    InfoId     = userInfo.UserId;
                    email      = userInfo.UserEmail;
                    jsonResult = "登录成功!欢迎您:" + qqUserInfo.Nickname;
                }
                else
                {
                    jsonResult = "登录成功!但是后台出了点问题,刷新重新试试吧!";
                }
            }
            else //失败
            {
                jsonResult = "登录失败!返回码:" + qqUserInfo.Ret;
            }
            return(Ok(new { msg = jsonResult, data = qqUserInfo, userId = InfoId, userEmail = email }));
        }
Beispiel #5
0
        private void Req()
        {
            var qc = new QQConnet();

            if (!qc.VerifyCallback())
            {
                ShowErrMsg("参数缺少.");
                return;
            }
            Session["QzoneOauth"] = null;

            //数据令牌
            string accessToken = qc.GetAccess_Token();

            if (string.IsNullOrEmpty(accessToken))
            {
                ShowErrMsg("Access_Token 为空");
                return;
            }

            //唯一标识 Openid与QQ号一对一对应
            string openid = qc.GetOpenid(accessToken);

            if (string.IsNullOrEmpty(openid))
            {
                ShowErrMsg("Openid 为空");
                return;
            }

            //获取当前登录用户
            QQUserInfo user = qc.GetUserInfo(accessToken, openid);

            if (user != null)
            {
                int userid = viviapi.BLL.User.UserLoginByPartner.Instance.Exists(1, openid);
                if (userid == 0)
                {
                    #region
                    var info = new UserLoginByPartner
                    {
                        id        = 0,
                        available = 1,
                        openid    = openid,
                        plant     = 1,
                        plantname = "QQ平台",
                        userid    = 0
                    };

                    bool init = viviapi.BLL.User.UserLoginByPartner.Instance.Insert(info) > 0;

                    if (init)
                    {
                        Session["QzoneOauth"] = user;

                        Response.Redirect("/appqqset.aspx?openid=" + openid, false);
                    }
                    else
                    {
                        ShowErrMsg("init.err");
                    }
                    #endregion
                }
                else
                {
                    string lastLoginIp      = ServerVariables.TrueIP;
                    string lastLoginAddress = WebUtility.GetIPAddress(lastLoginIp);

                    string message = viviapi.BLL.User.Login.SignIn(1, openid, lastLoginIp, lastLoginAddress);

                    if (message == "success")
                    {
                        Response.Redirect("/usermodule/account/index.aspx", false);
                    }
                    else
                    {
                        ShowErrMsg(message);
                    }
                }
            }
            else
            {
                ShowErrMsg("登录失败 2.");
            }
        }
        public ActionResult CallBack()
        {
            string backState = Request.QueryString["state"];
            string code      = Request.QueryString["code"];

            if (null != backState && null != code && null != Session["QQLoginState"] && backState == Session["QQLoginState"].ToString())
            {
                Session["QQLoginState"] = null;
                //调获取AccessToken的接口
                string access_token = QQLoginHelper.GetAccessToken(code);
                //调获取OpenID的接口
                string openid = QQLoginHelper.GetOpenId(access_token);
                //调获取用户信息的接口
                QQUserInfo qqUserInfo = QQLoginHelper.GetQQUserInfo(access_token, openid);
                if (qqUserInfo.ret == 0 && string.IsNullOrEmpty(qqUserInfo.msg))
                {
                    QQUserModel userModel = service.GetByWhere("WHERE OpenId='" + openid + "'").FirstOrDefault();
                    if (userModel != null)
                    {
                        //更新QQ用户信息
                        userModel.NickName  = qqUserInfo.nickname;
                        userModel.Gender    = qqUserInfo.gender == "男" ? 1 : 0;
                        userModel.HeadShot  = qqUserInfo.figureurl_qq;
                        userModel.LastLogin = DateTime.Now;
                        service.UpdateModel(userModel);
                    }
                    else
                    {
                        userModel = new QQUserModel();
                        //添加QQ用户
                        userModel.OpenId    = openid;
                        userModel.NickName  = qqUserInfo.nickname;
                        userModel.Gender    = qqUserInfo.gender == "男"?1:0;
                        userModel.HeadShot  = qqUserInfo.figureurl_qq;
                        userModel.Email     = "";
                        userModel.Status    = true;
                        userModel.LastLogin = DateTime.Now;
                        userModel.CreateOn  = DateTime.Now;
                        service.CreateModel(userModel);
                    }
                    Response.Cookies["openid"].Value         = openid;
                    Response.Cookies["openid"].Expires       = DateTime.Now.AddDays(3);
                    Response.Cookies["nickname"].Value       = qqUserInfo.nickname;
                    Response.Cookies["nickname"].Expires     = DateTime.Now.AddDays(3);
                    Response.Cookies["figureurl_qq"].Value   = qqUserInfo.figureurl_qq;
                    Response.Cookies["figureurl_qq"].Expires = DateTime.Now.AddDays(3);
                }
                else
                {
                    //获取用户失败
                    throw new ApplicationException(qqUserInfo.msg);
                }
                if (Session["BeforeLoginUrl"] != null)
                {
                    return(Redirect(Session["BeforeLoginUrl"].ToString())); //返回登陆之前的URL
                }
                else
                {
                    throw new Exception("登录之前的路由丢失");
                }
            }
            else
            {
                throw new Exception("登录State已丢失或不正确");
            }
        }