Exemplo n.º 1
0
        /// <summary>
        /// 在调用操作方法前调用。
        /// </summary>
        /// <param name="filterContext">有关当前请求和操作的信息。</param>
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            IApplicationContext ctx            = ContextRegistry.GetContext();
            Iwx_userService     wx_userService = ctx.GetObject("wx_userService") as Iwx_userService;

            if (UserInfo == null)
            {
                string tokenStr = RequestParams["token"];

                if (string.IsNullOrEmpty(tokenStr))
                {
                    filterContext.Result = Json(SysEnum.未授权登录, "缺少token");
                    return;
                }
                string          openid;
                string          userip;
                RequestCategory RequestCategory;
                try
                {
                    string[] arr = Common.EncryptHelper.Decrypt(tokenStr).Split('|');
                    openid          = arr[0];
                    userip          = arr[1];
                    RequestCategory = (RequestCategory)Enum.Parse(typeof(RequestCategory), arr[2]);
                }
                catch (Exception)
                {
                    filterContext.Result = Json(SysEnum.未授权登录, "token错误");
                    return;
                }
                if (string.IsNullOrEmpty(openid) || string.IsNullOrEmpty(userip))
                {
                    filterContext.Result = Json(SysEnum.未授权登录, "token错误");
                    return;
                }
                //if (!userip.Equals(Request.UserHostAddress))
                //{
                //    filterContext.Result = Json(SysEnum.IP不匹配, "IP地址发生变化,请重新登录");
                //    return;
                //}

                switch (RequestCategory)
                {
                case RequestCategory.微信公众号:
                    UserInfo = wx_userService.LoadEntities(s => s.gzh_openid == openid).FirstOrDefault();
                    break;

                case RequestCategory.微信小程序:
                    UserInfo = wx_userService.LoadEntities(s => s.xcx_openid == openid).FirstOrDefault();
                    break;

                //case RequestCategory.APP:
                //	UserInfo = wx_userService.LoadEntities(s => s.appopenid == openid).FirstOrDefault();
                //	break;
                //case RequestCategory.WEB:
                //	UserInfo = wx_userService.LoadEntities(s => s.webopenid == openid).FirstOrDefault();
                //	break;
                default:
                    filterContext.Result = Json(SysEnum.未授权登录, "token错误");
                    return;
                }

                if (UserInfo == null)
                {
                    filterContext.Result = Json(SysEnum.未授权登录);
                    return;
                }
                else
                {
                    if (UserInfo.state != (int)WXUserState.已关注)                    //数据库中状态未关注
                    {
                        try
                        {
                            var user = Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(AppId, UserInfo.gzh_openid, Senparc.Weixin.Language.zh_CN); //微信获取用户信息 该接口每日可调用 50000000 次 保险起见用try包裹
                            if (user.subscribe == (int)WXUserState.已关注)                                                                        //是否已关注
                            {
                                UserInfo.wx_head_protrait = user.headimgurl;
                                UserInfo.sex        = user.sex;
                                UserInfo.city       = user.city;
                                UserInfo.country    = user.country;
                                UserInfo.state      = (int)WXUserState.已关注;
                                UserInfo.unionid    = user.unionid;
                                UserInfo.gzh_openid = user.openid;
                                UserInfo.city       = user.city;
                                UserInfo.nickname   = user.nickname;
                                wx_userService.EditEntity(UserInfo);                                //已关注 修改用户状态
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                }


                //只允许微信里访问
                //String userAgent = Request.UserAgent;
                //if (userAgent != null && userAgent.IndexOf("MicroMessenger", StringComparison.Ordinal) <= -1)
                //{
                //    HttpContext.Response.Write("请在微信浏览器里访问");
                //    HttpContext.Response.End();

                //}
            }
        }