public JsonResult <UserInfo> Get(string uuid) { JsonResult <UserInfo> result = new JsonResult <UserInfo>(); result.code = 0; result.msg = "OK"; WeChatLogin loginList = logBll.GetWeChatLoginByUUID(uuid); if (loginList != null) { UserInfo userinfo = userinfoBll.GetUserInfoByOpenID(loginList.Openid); if (userinfo == null) { userinfo = new UserInfo(); userinfo.Headimgurl = loginList.Headimgurl; userinfo.Nickname = loginList.Nickname; userinfo.Openid = loginList.Openid; userinfo.Sex = (SexEnum)loginList.Sex.TryToInt(0); //userinfo.UserName = loginList.Nickname; userinfo.ID = userinfoBll.UpdateUserinfo(userinfo); } ApiUserManager userManager = new ApiUserManager(ActionContext); if (userinfo.UserName.IsNull()) { userinfo.UserName = userinfo.Nickname; } result.code = 1; result.Result = userinfo; result.ResultMsg = userManager.GetUserToken(userinfo); } return(result); }
/// <summary> /// 用户确认授权 /// </summary> /// <param name="code"></param> /// <param name="state"></param> private void getUserinfo(string code, string state) { try { //网络授权有有效期,最好用redis缓存 //获取用户网络授权 string access_token = string.Empty; string openid = string.Empty; if (RedisBase.ContainsKey(code)) { Access_tokenResult accResult = RedisBase.Item_Get <Access_tokenResult>(code); access_token = accResult.access_token; openid = accResult.openid; } else { Access_tokenResult accResult = WeChatAccessTokenAPI.GetWeChatAccess_token(code); RedisBase.Item_Set(code, accResult); RedisBase.ExpireEntryAt(code, DateTime.Now.AddSeconds(accResult.expires_in)); access_token = accResult.access_token; openid = accResult.openid; } //获取用户信息 WeChatUserInfo userinfo = null; string userkey = getWeChatUserKey(access_token, openid); if (RedisBase.ContainsKey(userkey)) { userinfo = RedisBase.Item_Get <WeChatUserInfo>(userkey); } else { userinfo = WeChatUserInfoAPI.GetWeChatUserInfo(access_token, openid); if (userinfo != null) { RedisBase.Item_Set(userkey, userinfo); RedisBase.ExpireEntryAt(userkey, DateTime.Now.AddDays(2)); } } WeChatUser wuser = userbll.GetWeChatUserByUnionID(userinfo.unionid); if (wuser == null) { wuser = new WeChatUser(); wuser.PlatformOpenID = userinfo.openid; wuser.UnionID = userinfo.unionid; userbll.AddWeChatUser(wuser); } else { if (string.IsNullOrEmpty(wuser.PlatformOpenID)) { wuser.PlatformOpenID = userinfo.openid; wuser.UnionID = userinfo.unionid; userbll.UpdateWeChatUser(wuser); } } UserInfoBll ubll = new UserInfoBll(); UserInfo _user = ubll.GetUserInfoByOpenID(userinfo.unionid); // 用户绑定微信 string bindkey = string.Format("bind_{0}", state); string msg = MqttAgreement.GetWeChatLoginMA(state, true); if (RedisBase.ContainsKey(bindkey)) { //用户之前已经关注过微信公共号,需要把之前微信公共号账户中的信息更新到这个账户中 if (_user != null) { _user.Openid = ""; ubll.UpdateUserinfo(_user); } UserInfo binduser = RedisBase.Item_Get <UserInfo>(bindkey); binduser.Openid = userinfo.unionid; ubll.UpdateUserinfo(binduser); } else { WeChatLogin login = loginbll.GetWeChatLoginByUUID(state); if (login == null) { login = new WeChatLogin(); login.UUID = state; login.CreateTime = DateTime.Now; login.LoginData = DateTime.Now.ToString("yyyy-MM-dd"); } login.Headimgurl = userinfo.headimgurl; login.Nickname = userinfo.nickname; login.Openid = userinfo.unionid; login.Sex = userinfo.sex.TryToString(); login.State = 1; login.LoginData = DateTime.Now.ToString("yyyy-MM-dd"); login.CreateTime = DateTime.Now; loginbll.UpdateWeChatLogin(login); if (_user == null) { _user = new UserInfo(); _user.Openid = userinfo.unionid; _user.CreateTime = DateTime.Now; _user.Headimgurl = userinfo.headimgurl; _user.Nickname = userinfo.nickname; _user.Sex = (SexEnum)userinfo.sex; _user.Name = userinfo.nickname; _user.city = userinfo.city; _user.province = userinfo.province; ubll.UpdateUserinfo(_user); } //向客户端推送消息 MqttPublishClient.Ins.PublishOneClient(login.LockCode, msg); } MqttPublishClient.Ins.PublishAllClient(msg); } catch (Exception ex) { ClassLoger.Error("WeChatLoginCallBackController.getUserinfo", ex); } }
public string POST(string signature, string token, string timestamp, string nonce, string echostr) { try { Stream requestStream = System.Web.HttpContext.Current.Request.InputStream; byte[] requestByte = new byte[requestStream.Length]; requestStream.Read(requestByte, 0, (int)requestStream.Length); string requestStr = Encoding.UTF8.GetString(requestByte); ClassLoger.Info("checkWeChatSignatureController接收到的信息:", requestStr); XmlDocument xd = new XmlDocument(); xd.LoadXml(requestStr); var msg = WeChatXMLMessageHelper.GetWeChatMsg(xd); if (msg != null) { WxTextMsg msgs = new WxTextMsg(); msgs.ToUserName = msg.FromUserName; msgs.FromUserName = msg.ToUserName; msgs.CreateTime = DateTime.Now.Ticks; msgs.MsgType = "text"; //订阅服务号 if (msg.Event.Equals(MsgTypeEvent.subscribe)) { WeChatUserInfo uinfo = WeChatUserInfoAPI.GetWeChatUserInfo(msg.FromUserName); WeChatUser weuser = userbll.GetWeChatUserByUnionID(uinfo.unionid); if (weuser == null) { weuser = new WeChatUser(); } weuser.ServiceOpenID = uinfo.openid; weuser.UnionID = uinfo.unionid; userbll.UpdateWeChatUser(weuser); UserInfo user = ubll.GetUserInfoByOpenID(uinfo.unionid); List <string> openIDList = new List <string>(1) { weuser.ServiceOpenID }; if (user == null) { user = new UserInfo(); user.Openid = uinfo.unionid; user.CreateTime = DateTime.Now; user.Headimgurl = uinfo.headimgurl; user.Nickname = uinfo.nickname; user.Sex = (SexEnum)uinfo.sex; user.Name = uinfo.nickname; user.city = uinfo.city; user.province = uinfo.province; ubll.UpdateUserinfo(user); } else { if (user.IsAdmin) { WeChatTagsAPI.batchtagging(openIDList, SystemSet.AdminUserTagID); } } msgs.Content = "感谢您关注【....】"; } return(XmlEntityExchange <WxTextMsg> .ConvertEntity2Xml(msgs)); } } catch (Exception ex) { ClassLoger.Error("WeChatSig.POST", ex); } return(string.Empty); }
public ActionResult CallBackRedirect() { //网络授权有有效期,最好用redis缓存 //获取用户网络授权 string code = Request["code"].TryToString(); string state = Request["state"].TryToString(); ClassLoger.Info("WeixinRedirectController.CallBackRedirect", state, code); string access_token = string.Empty; string openid = string.Empty; if (RedisBase.ContainsKey(code)) { Access_tokenResult accResult = RedisBase.Item_Get <Access_tokenResult>(code); access_token = accResult.access_token; openid = accResult.openid; } else { Access_tokenResult accResult = WeChatAccessTokenAPI.GetWeChatServiceAccess_token(code); RedisBase.Item_Set(code, accResult); RedisBase.ExpireEntryAt(code, DateTime.Now.AddSeconds(accResult.expires_in)); access_token = accResult.access_token; openid = accResult.openid; } //获取用户信息 WeChatUserInfo userinfo = null; string userkey = getWeChatUserKey(access_token, openid); if (RedisBase.ContainsKey(userkey)) { userinfo = RedisBase.Item_Get <WeChatUserInfo>(userkey); } else { userinfo = WeChatUserInfoAPI.GetWeChatUserInfo(access_token, openid); if (userinfo != null) { RedisBase.Item_Set(userkey, userinfo); RedisBase.ExpireEntryAt(userkey, DateTime.Now.AddDays(2)); } } UserInfo _user = userbll.GetUserInfoByOpenID(userinfo.unionid); if (_user == null) { _user = new UserInfo(); _user.Openid = userinfo.unionid; _user.CreateTime = DateTime.Now; _user.Headimgurl = userinfo.headimgurl; _user.Nickname = userinfo.nickname; _user.Sex = (SexEnum)userinfo.sex; _user.Name = userinfo.nickname; _user.city = userinfo.city; _user.province = userinfo.province; userbll.UpdateUserinfo(_user); } ClassLoger.Info("CallBackRedirect", userkey); RedisSession <UserInfo> redissession = new Models.RedisSession <UserInfo>(HttpContext, true, 120); redissession["UserCode"] = _user; switch (state) { //普通用户个人中心 case "UserCore": return(RedirectToAction("Index", "UserCore")); case "AdminCore": //return RedirectToAction("Index", "AdminCore"); default: string url = HttpUtils.Ins.UrlDecode(state); if (RedisBase.ContainsKey(state)) { url = RedisBase.Item_Get <string>(state); } return(Redirect(url)); } }