コード例 #1
0
 public void Login(Dictionary <string, string> requestParams)
 {
     if (requestParams.ContainsKey("mp") && !string.IsNullOrWhiteSpace(requestParams["mp"]))
     {
         WX_Info user = new WX_Info();
         user.OpenID            = string.Empty;
         user.UserType          = 0;
         user.FollowState       = (int)WxUserState.UnAttention;
         user.CompanyID         = requestParams["cid"];
         user.City              = string.Empty;
         user.Country           = string.Empty;
         user.Headimgurl        = string.Empty;
         user.Language          = string.Empty;
         user.NickName          = string.Empty;
         user.Province          = string.Empty;
         user.Sex               = "M";
         user.MobilePhone       = requestParams["mp"];
         user.LastSubscribeDate = DateTime.Now;
         WX_Info result = WXAccountServices.AddOrGetWXInfo(user);
         if (result == null)
         {
             throw new MyException("保存用户信息失败");
         }
         Session["SmartSystem_H5_WX_Info"] = result;
         Response.Cookies.Add(new HttpCookie("SmartSystem_H5_MobilePhone", requestParams["mp"]));
     }
 }
コード例 #2
0
        public static WX_Info GetWxUserBaseInfo(WX_ApiConfig config, string openId, bool errorRetry = true)
        {
            var accessToken = AccessTokenContainer.TryGetToken(config.AppId, config.AppSecret);

            if (!string.IsNullOrWhiteSpace(accessToken) && !string.IsNullOrWhiteSpace(openId))
            {
                try
                {
                    WX_Info user     = new WX_Info();
                    var     userInfo = WxAdvApi.GetUserInfo(accessToken, openId);
                    if (userInfo.subscribe == 0)
                    {
                        return(null);
                    }
                    user.City              = userInfo.city;
                    user.Country           = userInfo.country;
                    user.Headimgurl        = DownloadHeadImg(openId, userInfo.headimgurl, config.CompanyID);
                    user.Language          = userInfo.language;
                    user.NickName          = userInfo.nickname;
                    user.Province          = userInfo.province;
                    user.Sex               = userInfo.sex == "1" ? "M" : "F";
                    user.LastSubscribeDate = DateTimeHelper.TransferUnixDateTime(userInfo.subscribe_time);
                    return(user);
                }
                catch (Exception)
                {
                    if (errorRetry)
                    {
                        GetWxUserBaseInfo(config, openId, false);
                    }
                }
            }
            return(null);
        }
コード例 #3
0
        public static WX_Info AddOrGetWXInfo(WX_Info model)
        {
            IWXAccount factory  = WXAccountFactory.GetFactory();
            WX_Info    oldModel = factory.QueryWXInfoByMobilePhone(model.MobilePhone, model.CompanyID);

            if (oldModel == null)
            {
                using (DbOperator dbOperator = ConnectionManager.CreateReadConnection())
                {
                    try
                    {
                        dbOperator.BeginTransaction();
                        bool result = factory.AddWXAccount(model, dbOperator);
                        if (!result)
                        {
                            throw new MyException("添加微信账号信息失败");
                        }
                        result = factory.AddWXInfo(model, dbOperator);
                        if (!result)
                        {
                            throw new MyException("添加微信信息失败");
                        }
                        dbOperator.CommitTransaction();
                    }
                    catch {
                        dbOperator.RollbackTransaction();
                        throw;
                    }
                }
            }
            return(factory.QueryWXInfoByMobilePhone(model.MobilePhone, model.CompanyID));
        }
コード例 #4
0
        //public string SendParkingOutNotify(string cmd, string plateNo, string cpid,
        //                                string pkname, string indate, string outdate, string durtime, string amount, string app)
        //{
        //    return SendParkingOutNotify(cmd,plateNo,cpid,pkname,indate,outdate,durtime,"",amount,app);
        //}

        //[HttpPost]
        public string SendParkingOutNotify(string cmd, string plateNo, string cpid,
                                           string pkname, string indate, string outdate, string durtime, string payType, string amount, string app)
        {
            if (cmd.IsEmpty())
            {
                return("-4");
            }

            WX_ApiConfig config = WXApiConfigServices.QueryWXApiConfig(cpid);

            if (config == null)
            {
                return("-1");
            }
            if (!config.Status)
            {
                return("-2");
            }

            WX_Info user = WXUserServices.GetWXInfoByPlateNo(plateNo);

            if (user == null)
            {
                return("-3");
            }

            if (cmd == "In")
            {
            }
            else if (cmd == "Out")
            {
                bool isApp = app == "1" ? true : false;

                if (amount.EndsWith("元"))
                {
                    amount = amount + "元";
                }

                if (payType.IsEmpty())
                {
                    //默认
                    payType = "APP支付";
                }

                bool isSuc = TemplateMessageServices.SendParkOut(config.CompanyID, plateNo, pkname, indate, outdate, durtime, payType, amount, user.OpenID, isApp);
                if (isSuc)
                {
                    return("1");
                }
                else
                {
                    return("0");
                }
            }

            return("");
        }
コード例 #5
0
        public ActionResult SaveBindMobile(string phone, string code)
        {
            try
            {
                var companyCookie = Request.Cookies["SmartSystem_H5_CompanyID"];
                if (companyCookie == null || string.IsNullOrWhiteSpace(companyCookie.Value))
                {
                    throw new MyException("获取单位信息失败,请重新进入页面");
                }
                if (string.IsNullOrWhiteSpace(phone) || !new Regex("^1[0-9]{10}$").Match(phone).Success)
                {
                    throw new MyException("手机号码格式错误");
                }
                CheckBindTradePasswordCode(code, phone);


                WX_Info user = new WX_Info();
                user.OpenID            = string.Empty;
                user.UserType          = 0;
                user.FollowState       = (int)WxUserState.UnAttention;
                user.CompanyID         = companyCookie.Value;
                user.City              = string.Empty;
                user.Country           = string.Empty;
                user.Headimgurl        = string.Empty;
                user.Language          = string.Empty;
                user.NickName          = string.Empty;
                user.Province          = string.Empty;
                user.Sex               = "M";
                user.MobilePhone       = phone;
                user.LastSubscribeDate = DateTime.Now;
                WX_Info result = WXAccountServices.AddOrGetWXInfo(user);
                if (result == null)
                {
                    throw new MyException("绑定失败");
                }

                RemoveTradePasswordCooike();
                Session["SmartSystem_H5_WX_Info"] = result;
                Response.Cookies.Add(new HttpCookie("SmartSystem_H5_MobilePhone", phone));
                return(Json(MyResult.Success()));
            }
            catch (MyException ex)
            {
                return(Json(MyResult.Error(ex.Message)));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("H5BindMobileError", "绑定手机号失败", ex, LogFrom.WeiXin);
                return(Json(MyResult.Error("绑定失败")));
            }
        }
コード例 #6
0
        /// <summary>
        /// 修改微信基本信息
        /// </summary>
        /// <param name="openId"></param>
        /// <returns></returns>
        public static bool EditWXInfo(WX_Info info)
        {
            if (info == null)
            {
                return(false);
            }

            string          account = JsonHelper.GetJsonString(info);
            WXServiceClient client  = ServiceUtil <WXServiceClient> .GetServiceClient("WXService");

            bool result = client.EditWXInfo(account);

            client.Close();
            client.Abort();
            return(result);
        }
コード例 #7
0
        public bool AddWXAccount(WX_Info model, DbOperator dbOperator)
        {
            model.AccountID = System.Guid.NewGuid().ToString();
            string strsql = "insert into WX_Account(AccountID,AccountName,AccountModel,TradePWD,MobilePhone,Status,RegTime,OpenAnswerPhone,IsAutoLock,CompanyID)";

            strsql += "values(@AccountID,@AccountName,@AccountModel,@TradePWD,@MobilePhone,@Status,@RegTime,@OpenAnswerPhone,@IsAutoLock,@CompanyID)";
            dbOperator.ClearParameters();
            dbOperator.AddParameter("AccountID", model.AccountID);
            dbOperator.AddParameter("AccountName", model.NickName);
            dbOperator.AddParameter("AccountModel", 1);
            dbOperator.AddParameter("TradePWD", "123456");
            dbOperator.AddParameter("MobilePhone", model.MobilePhone);
            dbOperator.AddParameter("Status", 0);
            dbOperator.AddParameter("RegTime", DateTime.Now);
            dbOperator.AddParameter("OpenAnswerPhone", false);
            dbOperator.AddParameter("IsAutoLock", false);
            dbOperator.AddParameter("CompanyID", model.CompanyID);
            return(dbOperator.ExecuteNonQuery(strsql) > 0);
        }
コード例 #8
0
        //[HttpPost]
        public string SendParkingInNotify(string cmd, string plateNo, string cpid, string pkname, string indate)
        {
            if (cmd.IsEmpty())
            {
                return("-4");
            }

            WX_ApiConfig config = WXApiConfigServices.QueryWXApiConfig(cpid);

            if (config == null)
            {
                return("-1");
            }
            if (!config.Status)
            {
                return("-2");
            }

            WX_Info user = WXUserServices.GetWXInfoByPlateNo(plateNo);

            if (user == null)
            {
                return("-3");
            }

            if (cmd == "In")
            {
                bool isSuc = TemplateMessageServices.SendParkIn(config.CompanyID, plateNo, pkname, indate, user.OpenID);
                if (isSuc)
                {
                    return("1");
                }
                else
                {
                    return("0");
                }
            }
            else if (cmd == "Out")
            {
            }

            return("");
        }
コード例 #9
0
        public bool AddWXInfo(WX_Info model, DbOperator dbOperator)
        {
            string strsql = "insert into WX_Info(OpenID,AccountID,UserType,FollowState,NickName,Language,Province,City,Country,Sex,Headimgurl,SubscribeTimes,LastSubscribeDate,LastUnsubscribeDate,LastVisitDate,CompanyID)";

            strsql += "values(@OpenID,@AccountID,@UserType,@FollowState,@NickName,@Language,@Province,@City,@Country,@Sex,@Headimgurl,@SubscribeTimes,@LastSubscribeDate,@LastUnsubscribeDate,@LastVisitDate,@CompanyID)";
            dbOperator.ClearParameters();
            dbOperator.AddParameter("OpenID", model.OpenID);
            dbOperator.AddParameter("AccountID", model.AccountID);
            dbOperator.AddParameter("UserType", model.UserType);
            dbOperator.AddParameter("FollowState", 1);
            dbOperator.AddParameter("NickName", model.NickName);
            dbOperator.AddParameter("Language", model.Language);
            dbOperator.AddParameter("Province", model.Province);
            dbOperator.AddParameter("City", model.City);
            dbOperator.AddParameter("Country", model.Country);
            dbOperator.AddParameter("Sex", model.Sex);
            dbOperator.AddParameter("Headimgurl", model.Headimgurl);
            dbOperator.AddParameter("SubscribeTimes", 1);
            dbOperator.AddParameter("LastSubscribeDate", DateTime.Now);
            dbOperator.AddParameter("LastUnsubscribeDate", DateTime.Now);
            dbOperator.AddParameter("LastVisitDate", DateTime.Now);
            dbOperator.AddParameter("CompanyID", model.CompanyID);
            return(dbOperator.ExecuteNonQuery(strsql) > 0);
        }
コード例 #10
0
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            try
            {
                var     mobilePhone = string.Empty;
                WX_Info user        = null;
                var     cookie      = filterContext.RequestContext.HttpContext.Request.Cookies["SmartSystem_H5_MobilePhone"];
                if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Value))
                {
                    mobilePhone = cookie.Value;
                }
                var companyCookie = filterContext.RequestContext.HttpContext.Request.Cookies["SmartSystem_H5_CompanyID"];
                if (companyCookie == null || string.IsNullOrWhiteSpace(companyCookie.Value))
                {
                    filterContext.HttpContext.Response.Redirect(string.Format("~/ErrorPrompt/Error?message={0}", "获取单位信息失败,请重新进入页面"));
                    filterContext.HttpContext.Response.End();
                    filterContext.Result = new EmptyResult();
                    return;
                }
                // string mobilePhone = string.Empty;
                var permission = Roles.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                if (permission.Contains("Login"))
                {
                    if (string.IsNullOrWhiteSpace(mobilePhone))
                    {
#if DEBUG
                        mobilePhone = "18711015805";
#endif
                    }
                    if (string.IsNullOrWhiteSpace(mobilePhone))
                    {
                        var queryString = filterContext.RequestContext.HttpContext.Request.Url.PathAndQuery;
                        if (filterContext.RequestContext.HttpContext.Request["returnUrl"] != null)
                        {
                            queryString = filterContext.RequestContext.HttpContext.Request["returnUrl"];
                        }
                        filterContext.HttpContext.Response.Redirect(string.Format("~/H5BindMobile/Index?returnUrl={0}", queryString));
                        filterContext.HttpContext.Response.End();
                        filterContext.Result = new EmptyResult();
                        return;
                    }
                }
                if (filterContext.HttpContext.Session["SmartSystem_H5_WX_Info"] != null)
                {
                    user = (WX_Info)filterContext.HttpContext.Session["SmartSystem_H5_WX_Info"];
                }
                if (user == null)
                {
                    user = WXAccountServices.QueryWXInfoByMobilePhone(mobilePhone, companyCookie.Value);
                }
                if (user == null)
                {
                    var queryString = filterContext.RequestContext.HttpContext.Request.Url.PathAndQuery;
                    if (filterContext.RequestContext.HttpContext.Request["returnUrl"] != null)
                    {
                        queryString = filterContext.RequestContext.HttpContext.Request["returnUrl"];
                    }
                    filterContext.HttpContext.Response.Redirect(string.Format("~/H5BindMobile/Index?returnUrl={0}", queryString));
                    filterContext.HttpContext.Response.End();
                    filterContext.Result = new EmptyResult();
                    return;
                }
                HttpContext.Current.Session["SmartSystem_LogFrom"]          = LogFrom.WeiXin;
                filterContext.HttpContext.Session["SmartSystem_H5_WX_Info"] = user;
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "验证H5登录信息失败", LogFrom.WeiXin);
                TxtLogServices.WriteTxtLogEx("H5LoginPurview", ex);
                return;
            }
        }
コード例 #11
0
 public override void OnExecuting()
 {
     try
     {
         user = WeiXinAccountService.QueryWXByOpenId(OpenId);
         if (user == null || (WxUserState)user.FollowState == WxUserState.UnAttention)
         {
             bool IsNewAdd = user == null;
             user = WxUserInfo.GetWxUserBaseInfo(config, OpenId);
             if (user == null)
             {
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", "拉取微信用户信息失败,OPENID:{0}", OpenId);
                 return;
             }
             user.OpenID      = OpenId;
             user.UserType    = 0;
             user.FollowState = (int)WxUserState.Attention;
             user.CompanyID   = config.CompanyID;
             bool result = false;
             if (IsNewAdd)
             {
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", "RegisterAccount");
                 result = WeiXinAccountService.RegisterAccount(user);
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", string.Format("RegisterAccount Result:{0}", result ? "1" : "0"));
             }
             else
             {
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", "EditWXInfo");
                 result = WeiXinAccountService.EditWXInfo(user);
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", string.Format("EditWXInfo Result:{0}", result ? "1" : "0"));
             }
             if (result)
             {
                 user = WeiXinAccountService.QueryWXByOpenId(OpenId);
             }
             string resultDes = result ? "成功" : "失败";
             TxtLogServices.WriteTxtLogEx("WeiXinConversation", "保存微信用户信息{0},OPENID:{1}", resultDes, OpenId);
         }
         else
         {
             //每7天或头像为空时更新一次微信用户信息
             if (user.LastSubscribeDate < DateTime.Now.AddDays(-7) || string.IsNullOrWhiteSpace(user.Headimgurl))
             {
                 WX_Info newUser = WxUserInfo.GetWxUserBaseInfo(config, OpenId);
                 if (newUser == null)
                 {
                     TxtLogServices.WriteTxtLogEx("WeiXinConversation", "更新时拉取微信用户信息失败,OPENID:{0}", OpenId);
                     return;
                 }
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", "Update");
                 newUser.AccountID = user.AccountID;
                 newUser.OpenID    = OpenId;
                 newUser.UserType  = 0;
                 newUser.CompanyID = config.CompanyID;
                 bool result = WeiXinAccountService.EditWXInfo(newUser);
                 TxtLogServices.WriteTxtLogEx("WeiXinConversation", string.Format("Update Result:{0}", result ? "1" : "0"));
             }
         }
     }
     catch (Exception ex) {
         ExceptionsServices.AddExceptions(ex, string.Format("创建微信账号或者更新微信账号信息失败,OPENID:{0}", OpenId), LogFrom.WeiXin);
         TxtLogServices.WriteTxtLogEx("WeiXinConversation", ex);
     }
 }
コード例 #12
0
        //public string AppUserToken
        //{
        //    get
        //    {
        //        var cookie = HttpContext.Current.Request.Cookies["SmartSystem_APP_UserToken"];
        //        if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Value))
        //        {
        //            return cookie.Value;
        //        }
        //        return string.Empty;
        //    }
        //    set
        //    {
        //        var cookie = HttpContext.Current.Request.Cookies["SmartSystem_APP_UserToken"];
        //        if (cookie == null)
        //        {
        //            cookie = new HttpCookie("SmartSystem_APP_UserToken");
        //            cookie.Expires = DateTime.Now.AddYears(1);
        //            cookie.Value = value;
        //            HttpContext.Current.Request.Cookies.Add(cookie);
        //        }
        //        else
        //        {
        //            cookie.Value = value;
        //            HttpContext.Current.Request.Cookies.Set(cookie);
        //        }

        //    }
        //}



        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            try
            {
                var     openId = string.Empty;
                WX_Info user   = null;
                var     cookie = filterContext.RequestContext.HttpContext.Request.Cookies["SmartSystem_WeiXinOpenId"];
                if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Value))
                {
                    openId = cookie.Value;
                }
                var permission = Roles.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                if (permission.Contains("Login"))
                {
                    if (string.IsNullOrWhiteSpace(openId))
                    {
#if DEBUG
                        //odvkywUwtjaKnj7yGN-df7XV6ru4,odvkywSnlKr8anm3ddoIcredwvN0,oaC2Qt5oZsvPH_hlz0MoEw0sK2yg
                        openId = "ohqkK00bNhbFKWniuJyMsSXivoXc";//"o-Xw8wzQE2QmB-x5zehYlVdxcs5M";
#endif
                    }

                    if (string.IsNullOrWhiteSpace(openId))
                    {
                        //如果获取不到cookie中的微信uid则跳转至appRedir
                        TxtLogServices.WriteTxtLogEx("CheckWeiXinPurview", "Request.Url.PathAndQuery:{0}", filterContext.RequestContext.HttpContext.Request.Url.PathAndQuery);
                        var queryString = filterContext.RequestContext.HttpContext.Request.Url.PathAndQuery.TrimStart('/').Replace('/', '_').Replace('?', '_').Replace('&', '^');
                        TxtLogServices.WriteTxtLogEx("CheckWeiXinPurview", "请求获取微信信息 queryString:{0}", queryString);
                        filterContext.HttpContext.Response.Redirect(string.Format("~/L/Index?id={0}", queryString));
                        filterContext.HttpContext.Response.End();
                        filterContext.Result = new EmptyResult();
                        return;
                    }
                }
                if (filterContext.HttpContext.Session["SmartSystem_WX_Info"] != null)
                {
                    user = (WX_Info)filterContext.HttpContext.Session["SmartSystem_WX_Info"];
                }
                if (user == null)
                {
                    user = WXotherServices.GetWXInfo(openId);
                    //user = WeiXinAccountService.QueryWXByOpenId(openId);
                }
                if (user == null || (WxUserState)user.FollowState == WxUserState.UnAttention)
                {
                    string companyId = user == null ? string.Empty : user.CompanyID;
                    string value     = WXOtherConfigServices.GetConfigValue(companyId, ConfigType.PromptAttentionPage);
                    if (string.IsNullOrWhiteSpace(value))
                    {
                        value = "~/ErrorPrompt/Index?message=请关注SPS停车服务微信公众号";
                    }
                    //返回错误页面 (请求关注页面)
                    filterContext.HttpContext.Response.Redirect(value);
                    filterContext.HttpContext.Response.End();
                    filterContext.Result = new EmptyResult();
                    return;
                }
                HttpContext.Current.Session["SmartSystem_LogFrom"]             = LogFrom.WeiXin;
                HttpContext.Current.Session["SmartSystem_OperatorUserAccount"] = user.OpenID;
                filterContext.HttpContext.Session["SmartSystem_WX_Info"]       = user;
                if (user == null)
                {
                    TxtLogServices.WriteTxtLogEx("CheckWeiXinPurview", "微信用户不存在,OPENID:{0}", openId);
                }
                //RegisterAccount
                if (permission.Contains("REGISTERACCOUNT"))
                {
                    WX_Account account = WeiXinAccountService.GetAccountByID(user.AccountID);
                    if (account == null || string.IsNullOrWhiteSpace(account.MobilePhone))
                    {
                        var queryString = filterContext.RequestContext.HttpContext.Request.Url.PathAndQuery;
                        if (filterContext.RequestContext.HttpContext.Request["returnUrl"] != null)
                        {
                            queryString = filterContext.RequestContext.HttpContext.Request["returnUrl"];
                        }
                        filterContext.HttpContext.Response.Redirect(string.Format("~/BindMobile/Index?returnUrl={0}", queryString));
                        filterContext.HttpContext.Response.End();
                        filterContext.Result = new EmptyResult();
                        return;
                    }
                }

                //if (permission.Contains("APP"))
                //{
                //    //TradePassword
                //    string sToken = AppUserToken;
                //    if (string.IsNullOrEmpty(sToken))
                //    {
                //        TxtLogServices.WriteTxtLogEx("ParkingPayment", "TOKEN = {0} ", "null or ''");
                //    }
                //    else
                //    {
                //        TxtLogServices.WriteTxtLogEx("ParkingPayment", "TOKEN,id:{0},Status:{1} ", openId, sToken);

                //    }

                //    do
                //    {
                //        //APP
                //        if (sToken.IsEmpty())
                //        {
                //            VerifyCode verify = wxApi.getThirdLogin(openId, openId); //第三方登录
                //            TxtLogServices.WriteTxtLogEx("ParkingPayment", "用户自动登录,id:{0},Status:{1} ", openId, verify.Status);
                //            if (verify.Status == 1)
                //            {
                //                sToken = verify.Result;
                //                AppUserToken = sToken;
                //                return;
                //            }
                //            else if (verify.Status == 2)
                //            {
                //                //未绑定
                //                AppUserToken = "";
                //                sToken = "";
                //                filterContext.HttpContext.Response.Redirect("~/ParkingPayment/LicensePlatePayment");
                //                filterContext.HttpContext.Response.End();
                //                filterContext.Result = new EmptyResult();
                //                return;
                //            }
                //            else
                //            {
                //                //其他都是失败
                //                AppUserToken = "";
                //                sToken = "";
                //                filterContext.HttpContext.Response.Redirect("~/ErrorPrompt/Index?message=用户自动登录失败");
                //                filterContext.HttpContext.Response.End();
                //                filterContext.Result = new EmptyResult();
                //                return;
                //            }
                //        }

                //        CarManage carMessage = wxApi.getCarManage(sToken);
                //        if (carMessage == null || carMessage.Status == 40001)
                //        {
                //            //
                //            AppUserToken = "";
                //            sToken = "";
                //            continue;
                //        }
                //    } while (sToken.IsEmpty());
                //}
            }

            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "验证微信登陆信息失败", LogFrom.WeiXin);
                TxtLogServices.WriteTxtLogEx("CheckWeiXinPurview", ex);
                return;
            }
        }