private WeChatUser ConvertToWeChatUserObject(SqlDataReader reader) { WeChatUser weChatUser = new WeChatUser { AccessToken = reader["AccessToken"].DBToString(), AccessTokenExpired = reader["AccessTokenExpired"].DBToBoolean(), AccessTokenExpireTime = reader["AccessTokenExpireTime"].DBToDateTime(), City = reader["City"].DBToString(), County = reader["County"].DBToString(), CreatedTime = reader["CreatedTime"].DBToDateTime(), Id = reader["Id"].DBToInt32(), NickName = reader["NickName"].DBToString(), OpenId = reader["OpenId"].DBToString(), Photo = reader["Photo"].DBToString(), Province = reader["Province"].DBToString(), Sex = reader["Sex"].DBToInt32(), UserId = reader["UserId"].DBToNullableInt32(), HasSubscribed = reader["HasSubscribed"].DBToBoolean(), HasAuthorized = reader["HasAuthorized"].DBToBoolean(), LastRequestTimestamp = reader["LastRequestTimestamp"].DBToDateTime() }; return weChatUser; }
/// <summary> /// 更新微信用户信息。 /// </summary> /// <param name="user"></param> /// <returns></returns> public bool UpdateWeChatUser(SqlConnection conn, WeChatUser user) { SqlParameter[] parameters = { new SqlParameter("@Id", user.Id), new SqlParameter("@UserId", user.UserId), new SqlParameter("@OpenId", user.OpenId), new SqlParameter("@NickName", user.NickName), new SqlParameter("@Sex", user.Sex), new SqlParameter("@Province", user.Province), new SqlParameter("@City", user.City), new SqlParameter("@County", user.County), new SqlParameter("@Photo", user.Photo), new SqlParameter("@AccessToken", user.AccessToken), new SqlParameter("@AccessTokenExpired", user.AccessTokenExpired), new SqlParameter("@AccessTokenExpireTime", user.AccessTokenExpireTime), new SqlParameter("@HasSubscribed", user.HasSubscribed), new SqlParameter("@HasAuthorized", user.HasAuthorized) }; DBHelper.CheckSqlSpParameter(parameters); return DBHelper.RunNonQueryProcedure(conn, SP_WeChatUserUpdate, parameters) > 0; }
/// <summary> /// 注册微信用户。如果用户属于取消关注后重新关注,那么更新以前微信数据信息,不重新增加新数据 /// </summary> /// <param name="user"></param> /// <returns></returns> public bool WeChatUserRegister(SqlConnection conn, WeChatUser user) { SqlParameter[] parameters = { new SqlParameter("@Id", SqlDbType.Int, 4), new SqlParameter("@UserId", user.UserId), new SqlParameter("@OpenId", user.OpenId), new SqlParameter("@NickName", user.NickName), new SqlParameter("@Sex", user.Sex), new SqlParameter("@Province", user.Province), new SqlParameter("@City", user.City), new SqlParameter("@County", user.County), new SqlParameter("@Photo", user.Photo), new SqlParameter("@AccessToken", user.AccessToken), new SqlParameter("@AccessTokenExpired", user.AccessTokenExpired), new SqlParameter("@AccessTokenExpireTime", user.AccessTokenExpireTime), new SqlParameter("@HasSubscribed", user.HasSubscribed), new SqlParameter("@HasAuthorized", user.HasAuthorized), new SqlParameter("@CreatedTime", user.CreatedTime) }; parameters[0].Direction = ParameterDirection.Output; DBHelper.CheckSqlSpParameter(parameters); return DBHelper.RunNonQueryProcedure(conn, SP_WeChatUserRegister, parameters) > 0; }
private bool IsLastRequestTimeExceed48Hours(WeChatUser wechatUser) { if (!wechatUser.LastRequestTimestamp.HasValue) { return true; } return (DateTime.Now - wechatUser.LastRequestTimestamp.Value).TotalHours > 48; }
/// <summary> /// 设置默认微信用户session信息来绕过微信授权检测,仅用于电脑测试。 /// </summary> private void SetWeChatUserSessionForTestingUseOnly() { WeChatUser wechatUser = new UserService().GetWeChatUserByWeChatUserId(112820);// 112816 if (wechatUser.IsNotNull()) { CurrentWeChatUser = wechatUser; if (wechatUser.UserId.HasValue) { User user = new UserService().GetUserById(wechatUser.UserId.Value); if (user.IsNotNull()) { CurrentUser = user; wechatUser.IsUserLoggedIn = IsUserLogin; wechatUser.IsUserIdentified = IsIdentified; wechatUser.IsUserVip = IsVip; } } } }
/// <summary> /// 检测微信用户授权信息,如果不符合则需要重新进行微信授权验证。 /// </summary> /// <param name="filterContext"></param> private bool SetWeChatUserInfoWithValidation(ActionExecutingContext filterContext) { bool isWeChatAuthRequired = false; var wechatOpenIdCookie = filterContext.RequestContext.HttpContext.Request.Cookies[WeChatOpenIdCookieName]; //用户还未授权或Cookie被清空, 重新授权。 if (wechatOpenIdCookie == null || string.IsNullOrEmpty(wechatOpenIdCookie.Value)) { isWeChatAuthRequired = true; } else { var wechatUser = userService.GetWeChatUser(wechatOpenIdCookie.Value); // 取消强制关注逻辑 //用户还未关注,提示用户关注我们先。 //if (wechatUser == null || !wechatUser.HasSubscribed.HasValue || !wechatUser.HasSubscribed.Value) //{ // filterContext.Result = new RedirectResult(FollowUsUrl); //} //else // 未获得用户数据,重新授权 if (wechatUser == null || !wechatUser.HasAuthorized.HasValue || !wechatUser.HasAuthorized.Value) { isWeChatAuthRequired = true; } else { //更新Session信息 if (wechatUser.UserId.HasValue) { var user = userService.GetUserById(wechatUser.UserId.Value); if (user != null) { CurrentUser = user; wechatUser.IsUserLoggedIn = IsUserLogin; wechatUser.IsUserIdentified = IsIdentified; wechatUser.IsUserVip = IsVip; } } CurrentWeChatUser = wechatUser; } } return isWeChatAuthRequired; }
/// <summary> /// Updates wechat user information. /// </summary> /// <param name="user"></param> /// <returns></returns> public bool UpdateWeChatUser(WeChatUser user) { bool result = false; var conn = DBHelper.GetSqlConnection(); try { conn.Open(); result = userDao.UpdateWeChatUser(conn, user); } catch (Exception ex) { LogService.Log("更新微信用户信息失败", ex.ToString()); } finally { conn.Close(); } return result; }
/// <summary> /// 微信用户关注,注册。无失败操作 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool WeChatUserSubscribe(string openId, bool hasSubscribed = true, bool hasAuthorized = false) { bool result = false; var conn = DBHelper.GetSqlConnection(); try { conn.Open(); WeChatUser weChatUser = userDao.GetWeChatUser(openId, conn); if (weChatUser != null) { weChatUser.HasSubscribed = hasSubscribed; result = userDao.UpdateWeChatUser(conn, weChatUser); } else { weChatUser = new WeChatUser(); weChatUser.OpenId = openId; weChatUser.HasSubscribed = hasSubscribed; weChatUser.HasAuthorized = hasAuthorized; weChatUser.CreatedTime = DateTime.Now; result = userDao.WeChatUserRegister(conn, weChatUser); } } catch (Exception e) { LogService.Log("微信用户注册失败--" + e.Message, e.ToString()); } finally { conn.Close(); } return result; }