/// <summary> /// 获取当前帐号 /// </summary> /// <param name="state"></param> /// <param name="code"></param> /// <param name="browseId"></param> /// <param name="strError"></param> /// <returns></returns> public int GetActive(string code, string state, out WxUserItem activeUser, out string strError, string myWeixinId = "") { strError = ""; int nRet = 0; activeUser = null; // 获取session对象,如果不存在新new一个 SessionInfo sessionInfo = this.GetSessionInfo1(); try { if (sessionInfo != null) { //sessionInfo.ClearDebugInfo(); } else { // 当发现session为空时,new一个sessioninfo sessionInfo = new SessionInfo(); sessionInfo.AddDebugInfo("session不存在,新建一个session对象"); Session[WeiXinConst.C_Session_sessioninfo] = sessionInfo; // 得到weixinid GzhCfg gzh1 = sessionInfo.gzh; List <string> libList1 = new List <string>(); if (string.IsNullOrEmpty(state) == true) { if (string.IsNullOrEmpty(code) == false) { strError = "从微信入口进来,code参数不能为空"; return(-1); } state = "ilovelibrary"; } sessionInfo.AddDebugInfo("给sesion存入state[" + state + "]"); nRet = dp2WeiXinService.Instance.GetGzhAndLibs(state, out gzh1, out libList1, out strError); if (nRet == -1) { return(-1); } if (gzh1 == null) { strError = "异常,未得到公众号配置信息"; goto ERROR1; } sessionInfo.SetInfo(state, gzh1, libList1); } sessionInfo.AddDebugInfo("~~~~~~" + this.Request.Path + "~~~~~~"); // 如果客户端特别传来了weixinid,使用传来的weixinid if (string.IsNullOrEmpty(myWeixinId) == false && sessionInfo.WeixinId != myWeixinId) { sessionInfo.AddDebugInfo("原来的weixinid=" + sessionInfo.WeixinId); sessionInfo.WeixinId = myWeixinId; sessionInfo.Active = null; sessionInfo.AddDebugInfo("使用传进来的weixinId=" + myWeixinId); } if (code == null) { code = ""; } if (state == null) { state = ""; } if (sessionInfo.WeixinId == null) { sessionInfo.WeixinId = ""; } sessionInfo.AddDebugInfo("走进GetActive(),code=[" + code + "] state=[" + state + "],session.weixinId=[" + sessionInfo.WeixinId + "]"); activeUser = sessionInfo.Active; if (activeUser != null) { sessionInfo.AddDebugInfo("session中有活动帐号"); if (activeUser.weixinId.Substring(0, 2) == "~~" && string.IsNullOrEmpty(code) == false) { strError = "异常:微信入口怎么是临时ID"; goto ERROR1; } if (string.IsNullOrEmpty(state) == false && //传进来的state不为空 sessionInfo.gzhState != state) { sessionInfo.AddDebugInfo("发现之前state为[" + sessionInfo.gzhState + "],目前传入的state参数为[" + state + "],两者不一样,重新初始化session信息"); sessionInfo.AddDebugInfo("传入的code为[" + code + "],有值,重新获取weixinId"); sessionInfo.WeixinId = ""; sessionInfo.Active = null; } else { sessionInfo.AddDebugInfo("使用当前已有session信息"); // 初始化 viewbag nRet = this.InitViewBag(sessionInfo, out strError); if (nRet == -1) { goto ERROR1; } sessionInfo.AddDebugInfo("GetActive()返回1,当前有活动帐号"); return(1); } } // 得到weixinid GzhCfg gzh = sessionInfo.gzh; List <string> libList = new List <string>(); if (string.IsNullOrEmpty(state) == true) { if (string.IsNullOrEmpty(code) == false) { strError = "从微信入口进来,code参数不能为空"; return(-1); } state = "ilovelibrary"; } sessionInfo.AddDebugInfo("给sesion存入state[" + state + "]"); nRet = dp2WeiXinService.Instance.GetGzhAndLibs(state, out gzh, out libList, out strError); if (nRet == -1) { return(-1); } if (gzh == null) { strError = "异常,未得到公众号配置信息"; goto ERROR1; } sessionInfo.SetInfo(state, gzh, libList); sessionInfo.AddDebugInfo("配置信息存到session"); string weixinId = sessionInfo.WeixinId; if (string.IsNullOrEmpty(weixinId) == false && weixinId.Length > 2 && weixinId.Substring(0, 2) == "~~" && string.IsNullOrEmpty(code) == false) { sessionInfo.AddDebugInfo("异常:发现微信入口是临时ID,根据code重新获取id"); weixinId = ""; } // 正式id if (string.IsNullOrEmpty(weixinId) == false) { sessionInfo.AddDebugInfo("session中已有id=[" + weixinId + "],直接使用该id初始化对象"); } else { //微信入口 if (string.IsNullOrEmpty(code) == false) { // 正式微信id的情况 sessionInfo.AddDebugInfo("微信入口,根据微信code=[" + code + "]获取weixinId"); // 根据微信接口得到weixinid nRet = dp2WeiXinService.Instance.GetWeiXinId1(code, gzh, out weixinId, out strError); if (nRet == -1) { goto ERROR1; } if (String.IsNullOrEmpty(weixinId) == true) { strError = "异常,未得到微信id"; return(-1); } sessionInfo.oauth2_return_code = code; sessionInfo.AddDebugInfo("根据微信code获到的weixinId=[" + weixinId + "]"); // 写到微信浏览器的cookies里,以解决微信不退出,但web页面失效的问题 HttpCookie aCookie = new HttpCookie("browseId"); aCookie.Value = weixinId; aCookie.Expires = DateTime.MaxValue;//设为永久不失效, DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie); sessionInfo.AddDebugInfo("将微信入口的weixinid写入微信浏览器的cookies=" + weixinId); } else { // 浏览器id sessionInfo.AddDebugInfo("session中weixinid为空,且没有微信传来的code"); sessionInfo.AddDebugInfo("检查浏览器是否存在cookies"); string browseId = ""; if (Request.Cookies["browseId"] != null) { HttpCookie aCookie = Request.Cookies["browseId"]; browseId = aCookie.Value; sessionInfo.AddDebugInfo("存在cookies=" + browseId); } if (string.IsNullOrEmpty(browseId) == true) { sessionInfo.AddDebugInfo("不存在cookies或值为空"); string guid = Guid.NewGuid().ToString(); browseId = "~~" + guid; sessionInfo.AddDebugInfo("创建一个临时id=" + browseId); // 写到cookies HttpCookie aCookie = new HttpCookie("browseId"); aCookie.Value = browseId; aCookie.Expires = DateTime.MaxValue;//设为永久不失效, DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie); sessionInfo.AddDebugInfo("将临时id写入cookies=" + browseId); } weixinId = browseId; } } // 初始化session nRet = sessionInfo.Init1(weixinId, out strError);// this.InitSession(state, weixinId, out sessionInfo, out strError); if (nRet == -1) { return(-1); } // 有当前帐号 activeUser = sessionInfo.Active; if (activeUser != null) { // 初始化 viewbag nRet = this.InitViewBag(sessionInfo, out strError); if (nRet == -1) { goto ERROR1; } sessionInfo.AddDebugInfo("GetActive()返回1,存在活动帐户"); return(1); } ViewBag.AppName = sessionInfo.gzh.appNameCN; ViewBag.weixinId = sessionInfo.WeixinId; } catch (Exception ex) { strError = ex.Message; goto ERROR1; } strError = "尚未选择图书馆"; sessionInfo.AddDebugInfo("GetActive()返回0,error=[" + strError + "]"); return(0); ERROR1: sessionInfo.AddDebugInfo("GetActive()返回-1,error=[" + strError + "]"); return(-1); }