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"])); } }
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); }
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)); }
//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(""); }
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("绑定失败"))); } }
/// <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); }
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); }
//[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(""); }
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); }
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; } }
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); } }
//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; } }