示例#1
0
 /// <summary>
 /// 微信认证
 /// https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx24e47efa56c2e554&redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect&response_type=code&scope=snsapi_userinfo&state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex#wechat_redirect
 /// </summary>
 /// <param name="code">snsapi_userinfo</param>
 /// <param name="state">回调url</param>
 /// <returns></returns>
 public ActionResult Redirect(string code, string state)
 {
     LogHelper.AddLog($"微信认证请求地址:{System.Web.HttpContext.Current.Request.Url.ToString()}  参数code: {code},参数state: {state}");
     //若用户禁止授权,则重定向后不会带上code参数
     if (string.IsNullOrEmpty(code))
     {
         return(Redirect(state));
     }
     else
     {
         WeixinToken token = new WeixinToken();
         //判断是否保存微信token,用户网页授权,不限制
         if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
         {
             token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
         }
         else
         {
             string tokenUrl = string.Format(WeixinConfig.GetTokenUrl2, code);
             LogHelper.AddLog($"请求tokenUrl地址: {tokenUrl}");
             token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
             if (token.errcode != null)
             {
                 return(Content("网页授权Error:" + token.errcode + ":" + token.errmsg));
             }
             Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
         }
         Session["OpenId"] = token.openid;//进行登录
         LogHelper.AddLog($"token.openid: {Session["OpenId"]}");
         //查询用户是否存在
         var userEntity = wechatUserBll.GetEntity(token.openid);
         if (userEntity == null)
         {
             string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl2, token.access_token, token.openid);
             var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
             if (userInfo.errcode != null)
             {
                 Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                 Response.End();
             }
             else
             {
                 userEntity = new WeChat_UsersEntity()
                 {
                     City       = userInfo.city,
                     Country    = userInfo.country,
                     HeadimgUrl = userInfo.headimgurl,
                     NickName   = userInfo.nickname,
                     OpenId     = userInfo.openid,
                     Province   = userInfo.province,
                     Sex        = userInfo.sex,
                     AppName    = Config.GetValue("AppName2")
                 };
                 wechatUserBll.SaveForm("", userEntity);
             }
         }
         Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
         return(Redirect(state));
     }
 }
示例#2
0
        internal static void CreateWeixinToken(WeixinToken item)
        {
            string connectionString = GlobalConfig.DbConn;

            string commandText = @"INSERT INTO weixintoken 
	                                ( 
	                                Access_token, 
	                                SellerId,
	                                Token_Expire
	                                )
	                                VALUES
	                                ( 
	                                ?Access_token, 
	                                ?SellerId,
	                                ?Token_Expire
	                                )"    ;


            List <MySqlParameter> parameters = new List <MySqlParameter>();

            parameters.Add(new MySqlParameter("?Access_token", item.Access_token));
            parameters.Add(new MySqlParameter("?SellerId", item.SellerId));
            parameters.Add(new MySqlParameter("?Token_Expire", item.Token_Expire));


            MySqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, commandText, parameters.ToArray());
        }
示例#3
0
        internal static WeixinToken GetWeixinToken(string access_token, int sellerId)
        {
            var    wt          = new WeixinToken();
            string commandText = @"select * from weixintoken where access_token = ?access_token and sellerId = ?sellerId";
            List <MySqlParameter> parameters = new List <MySqlParameter>();

            parameters.Add(new MySqlParameter("?access_token", access_token));
            parameters.Add(new MySqlParameter("?sellerId", sellerId));
            try
            {
                using (var conn = Utility.ObtainConn(Utility._gameDbConn))
                {
                    //MySqlDataReader reader = MySqlHelper.ExecuteReader(GlobalConfig.DbConn, CommandType.Text, commandText, parameters.ToArray());
                    MySqlDataReader reader = MySqlHelper.ExecuteReader(conn, CommandType.Text, commandText, parameters.ToArray());
                    while (reader.Read())
                    {
                        wt.Id           = reader.GetInt32(0);
                        wt.SellerId     = (int)reader["SellerId"];
                        wt.Access_token = reader["Access_token"].ToString();
                        wt.Token_Expire = (DateTime)reader["UserId"];
                    }
                }
            }
            catch (System.Exception ex)
            {
                throw;
            }
            return(wt);
        }
示例#4
0
        //跳转
        public ActionResult Redirect(string code, string state)
        {
            //若用户禁止授权,则重定向后不会带上code参数
            if (string.IsNullOrEmpty(code))
            {
                return(Redirect(state));
            }
            else
            {
                WeixinToken token = new WeixinToken();

                //判断是否保存微信token
                if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
                {
                    token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
                }
                else
                {
                    string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code);
                    token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
                    if (token.errcode != null)
                    {
                        return(Content(token.errcode + ":" + token.errmsg));
                    }
                    Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
                }
                //查询用户是否存在
                var userEntity = userBll.GetEntity(token.openid);
                if (userEntity == null)
                {
                    string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, token.access_token, token.openid);
                    var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
                    if (userInfo.errcode != null)
                    {
                        Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                        Response.End();
                    }
                    else
                    {
                        userEntity = new WeChat_UsersEntity()
                        {
                            City       = userInfo.city,
                            Country    = userInfo.country,
                            HeadimgUrl = userInfo.headimgurl,
                            NickName   = userInfo.nickname,
                            OpenId     = userInfo.openid,
                            Province   = userInfo.province,
                            Sex        = userInfo.sex,
                            AppName    = WeixinConfig.AppName
                        };
                        userBll.SaveForm("", userEntity);
                    }
                }
                Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
                return(Redirect(state));
            }
        }
示例#5
0
        public ActionResult WeixinQYHSignIn(string code)
        {
            try
            {
                if (string.IsNullOrEmpty(code))
                {
                    return(Json(new { code = 1, Msg = "参数错误" }));
                }

                string corpId = "wwa26d4508575b5fe9";
                string secret = "cwcclxDJ0GMIlxsn2U_3kWQUPoiDupZOZMrKFqDDcnI";

                WebClient   wcl   = new WebClient();
                string      url   = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", corpId, secret);
                string      json  = wcl.DownloadString(url);
                WeixinToken token = JsonConvert.DeserializeObject <WeixinToken>(json.Replace("\\", ""));
                if (token.errcode != 0)
                {
                    return(Json(new { Code = 1, Msg = "获取信息失败" }));
                }

                //获取微信用户OpenId
                url  = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}", token.access_token, code);
                json = wcl.DownloadString(url);
                WeixinQYHUser wxUser = JsonConvert.DeserializeObject <WeixinQYHUser>(json.Replace("\\", ""));
                if (wxUser.errcode != 0)
                {
                    return(Json(new { Code = 1, Msg = "获取信息失败" }));
                }

                //获取微信用户信息
                url  = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token={0}", token.access_token);
                json = wcl.UploadString(url, "{\"user_ticket\": \"" + wxUser.user_ticket + "\"}");
                WeixinQYHUserDetail wxUserDetial = JsonConvert.DeserializeObject <WeixinQYHUserDetail>(json.Replace("\\", ""));
                if (wxUserDetial.errcode != 0)
                {
                    return(Json(new { Code = 1, Msg = "获取信息失败" }));
                }

                SysUser user = dbContext.Set <SysUser>().Where(x => x.UserCode == wxUserDetial.userid).FirstOrDefault();
                if (user == null)
                {
                    return(Json(new { Code = 1, Msg = wxUserDetial.userid + "不存在!" }));
                }

                SSOClient.SignIn(user.UserId);
                return(Redirect("/pages/home/weixin.html"));
            }
            catch (Exception ex)
            {
                LogHelper.SaveLog(ex);
                return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" }));
            }
        }
示例#6
0
        internal static void UpdateWeixinToken(WeixinToken item)
        {
            string commandText = @"UPDATE weixintoken SET
                                        SellerId = ?SellerId,
                                        Access_token = ?Access_token,
                                        Token_Expire = ?Token_Expire
                                    WHERE
                                        Id = ?Id";

            List <MySqlParameter> parameters = new List <MySqlParameter>();

            parameters.Add(new MySqlParameter("?Id", item.Id));
            parameters.Add(new MySqlParameter("?SellerId", item.SellerId));
            parameters.Add(new MySqlParameter("?Access_token", item.Access_token));
            parameters.Add(new MySqlParameter("?Token_Expire", item.Token_Expire));

            MySqlHelper.ExecuteNonQuery(GlobalConfig.DbConn, CommandType.Text, commandText, parameters.ToArray());
        }
示例#7
0
        /// <summary>
        /// 微信认证
        /// https://open.weixin.qq.com/connect/oauth2/authorize
        /// ?appid=wx24e47efa56c2e554
        /// &redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect
        /// &response_type=code&scope=snsapi_userinfo
        /// &state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex
        /// #wechat_redirect
        /// </summary>
        /// <param name="code">snsapi_userinfo</param>
        /// <param name="state">回调url</param>
        /// <returns></returns>
        public ActionResult Redirect(string code, string state)
        {
            //若用户禁止授权,则重定向后不会带上code参数
            if (string.IsNullOrEmpty(code))
            {
                return(Redirect(state));
            }
            else
            {
                WeixinToken token = new WeixinToken();
                //判断是否保存微信token,用户网页授权access_token,不限制,,拿到授权access_token和openid
                if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
                {
                    token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
                }
                else
                {
                    string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code);
                    token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
                    if (token.errcode != null)
                    {
                        return(Content(token.errcode + ":" + token.errmsg));
                    }
                    Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
                }

                //查询用户是否存在
                var userEntity = wechatUserBll.GetEntity(token.openid);
                if (userEntity == null)
                {
                    #region CacheFactory方式获取token
                    ////全局token--基础access_token,每日限额2000
                    //var cacheToken = CacheFactory.Cache().GetCache<string>("access_token");
                    //if (cacheToken == null)
                    //{
                    //    var userInfoBase = AnalyzeHelper.Get<WeixinTokenBase>(WeixinConfig.GetTokenBaseUrl);
                    //    cacheToken = userInfoBase.access_token;
                    //    CacheFactory.Cache().WriteCache(cacheToken, "access_token", DateTime.Now.AddSeconds(7000));
                    //}
                    #endregion

                    //改成盛派容器获取基础token
                    string base_token = TemplateWxApp.getToken(); //获取AccessToken结果

                    string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, base_token, token.openid);
                    var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
                    if (userInfo.errcode != null)
                    {
                        Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                        Response.End();
                    }
                    else
                    {
                        LogHelper.AddLog("用户关注状态:" + userInfo.subscribe.ToString());
                        if (userInfo.subscribe != 1)
                        {
                            //未关注
                            //未关注先跳转关注https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU3MzczNTY4Mw==#wechat_redirect
                            //微信7.0之后限制,加载完成之后按钮一闪而逝,WeixinConfig.BizUrl,生成二维码,从微信打开该链接即可
                            return(RedirectToAction("Guanzhu", "Brand"));
                        }
                        userEntity = new WeChat_UsersEntity()
                        {
                            City       = userInfo.city,
                            Country    = userInfo.country,
                            HeadimgUrl = userInfo.headimgurl,
                            NickName   = userInfo.nickname,
                            OpenId     = userInfo.openid,
                            Province   = userInfo.province,
                            Sex        = userInfo.sex,
                            AppName    = Config.GetValue("AppName")
                        };
                        wechatUserBll.SaveForm("", userEntity);
                    }
                }
                Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
                return(Redirect(state));
            }
        }
示例#8
0
        public ActionResult WeixinGZHSignIn(string code)
        {
            try
            {
                if (string.IsNullOrEmpty(code))
                {
                    return(Json(new { code = 1, Msg = "参数错误" }));
                }

                string appId     = "wx806943202a75a124";
                string appSecret = "d52257abea1018eec3a798005ba4f841";

                WebClient   wcl   = new WebClient();
                string      url   = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appSecret, code);
                string      json  = wcl.DownloadString(url);
                WeixinToken token = JsonConvert.DeserializeObject <WeixinToken>(json.Replace("\\", ""));

                LogHelper.SaveLog("wxgzhsignin", url);
                LogHelper.SaveLog("wxgzhsignin", json);

                if (token.errcode != null)
                {
                    return(Json(new { Code = 1, Msg = "获取信息失败" }));
                }

                SysUserOpenId userOpenId = dbContext.Set <SysUserOpenId>().Where(x => x.OpenId == token.openid).FirstOrDefault();
                if (userOpenId != null && userOpenId.UserId != Guid.Empty)
                {
                    SSOClient.SignIn(userOpenId.UserId.Value);
                    return(Redirect("/pages/home/weixin.html"));
                }
                else
                {
                    return(Redirect("/pages/account/bind.html?sign=wx&openid=" + token.openid));
                }

                //自动创建本地用户,适用面向公众网站,项目根据需要调整逻辑。
                //url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", token.access_token, token.openid);
                //json = wcl.DownloadString(url);
                //WeixinGZHUser wxUser = JsonConvert.DeserializeObject<WeixinGZHUser>(json.Replace("\\", ""));
                //if (wxUser.errcode != null)
                //    return Json(new { Code = 1, Msg = "获取信息失败" });

                //SysUser user = new SysUser();
                //user.UserId = Guid.NewGuid();
                //user.UserName = wxUser.nickname;
                //user.UserCode = Guid.NewGuid().ToString("N").Substring(20);
                //user.DepartmentId = new Guid("2379788E-45F0-417B-A103-0B6440A9D55D");
                //dbContext.SysUser.Add(user);

                //userOpenId = new SysUserOpenId();
                //userOpenId.OpenId = token.openid;
                //userOpenId.UserId = user.UserId;
                //userOpenId.CreateTime = DateTime.Now;
                //userOpenId.BindTime = DateTime.Now;
                //dbContext.SysUserOpenId.Add(userOpenId);

                //dbContext.SaveChanges();

                //SSOClient.SignIn(userOpenId.UserId.Value);
                //return Redirect("/pages/home/weixin.html");
            }
            catch (Exception ex)
            {
                LogHelper.SaveLog(ex);
                return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" }));
            }
        }