public void UpdateWechatInfo(WechatInfo info) { if (StorageService.UserAuthData.Exists(i => i.OpenId == info.OpenId)) { var wechatInfo = StorageService.UserAuthData.SingleOrDefault(i => i.OpenId == info.OpenId); wechatInfo = info; } else { StorageService.UserAuthData.Add(info); } }
public async Task <ActionResult> CallBack(string code, string state) { string message = WechatService.Instance.Authorization(code, state); if (message.Contains("access_token")) { try { //获取并解析Access_Token json包 WechatInfo info = JsonConvert.DeserializeObject <WechatInfo>(message); //更新用户token WechatService.Instance.UpdateWechatInfo(info); //通过Access_Token获取用户信息 string userInfo = WechatService.Instance.GetUserInfo(info.Access_Token, info.OpenId); //判定userInfo是否合法 if (!string.IsNullOrWhiteSpace(userInfo) && userInfo.Contains("nickname")) { JObject jo = (JObject)JsonConvert.DeserializeObject(userInfo); //判断该用户是否存在 var result = await WechatService.Instance.GetUser(info.OpenId); string userData = ""; if (!result.Success) { //不存在,创建用户并存储 RoomUser user = new RoomUser() { OpenId = info.OpenId, Avatar = jo["headimgurl"].ToString(), UserName = jo["nickname"].ToString(), }; StorageService.RegisteredUsers.Add(user); //编辑要写入的cookie值 userData = JsonConvert.SerializeObject(user); } else { //编辑要写入的cookie值 userData = JsonConvert.SerializeObject(result.Entity); } //写入cookie HttpCookie cookie = new HttpCookie("userData"); cookie.Value = HttpUtility.UrlEncode(userData); cookie.Expires = DateTime.Now.AddDays(25); if (Request.Cookies["userData"] != null) { Response.Cookies.Set(cookie); } else { Response.Cookies.Add(cookie); } if (Convert.ToInt32(state) < 1000) { return(RedirectToAction("RoomList", "Home")); } else { return(RedirectToAction("GetRoom", "Home", new { roomId = state, openId = info.OpenId })); } } return(RedirectToAction("RoomList", "Home", new { message = HttpUtility.UrlEncode(userInfo) })); } catch (Exception e) { return(RedirectToAction("RoomList", "Home", new { message = HttpUtility.UrlEncode(e.Message) })); } } else { return(RedirectToAction("RoomList", "Home", new { message = HttpUtility.UrlEncode(message) })); } }