Ejemplo n.º 1
0
        public ActionResult WeChatLogin(string code)
        {
            var apiResponseModel = new APIResponseModel();

            if (string.IsNullOrWhiteSpace(code))
            {
                apiResponseModel.errorcode = "-1";
                apiResponseModel.errormsg  = "临时登录凭证不能为空";
                return(Json(apiResponseModel));
            }

            try
            {
                var weChatApi = new WeChatAPI();
                var result    = weChatApi.Authorization(code);
                var authModel = JsonUtil.Deserialize <AuthResponseModel>(result);
                if (string.IsNullOrWhiteSpace(authModel.openid))
                {
                    apiResponseModel.errorcode = "-1";
                    apiResponseModel.errormsg  = "错误";
                    apiResponseModel.data      = authModel;
                    return(Json(apiResponseModel));
                }

                var customer = _customerService.GetCustomerByOpenId(authModel.openid);
                if (customer == null)
                {
                    customer = new Customer()
                    {
                        OpenId              = authModel.openid,
                        CreatedOnUtc        = DateTime.Now,
                        LastLoginDateUtc    = DateTime.Now,
                        LastActivityDateUtc = DateTime.Now
                    };
                    _customerService.InsertCustomer(customer);
                }

                var token = Guid.NewGuid().ToString();
                if (_cacheService.IsSet(token))
                {
                    _cacheService.Remove(token);
                }

                _cacheService.Set(token, customer, 60);

                apiResponseModel.errorcode = "0";
                apiResponseModel.errormsg  = "登录成功";
                apiResponseModel.data      = token;
                return(Json(apiResponseModel));
            }
            catch (Exception e)
            {
                apiResponseModel.errorcode = "11";
                apiResponseModel.errormsg  = e.Message;
                apiResponseModel.data      = null;
                return(Json(apiResponseModel));
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ContentType = "text/plain";
                var echostr = context.Request.QueryString["echostr"];
                var r       = context.Request.QueryString["r"];
                var code    = context.Request.QueryString["code"];
                var method  = context.Request.QueryString["m"];

                var json = JSON.StreamToJson(context.Request.InputStream, Encoding.UTF8);
                var data = new { Url = context.Request.Url, Data = json };
                var path = string.Format("{0}/{1}", context.Server.MapPath("~"), "input");
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }

                System.IO.File.WriteAllText(string.Format("{0}/{1}.txt", path, DateTime.Now.ToString("yyyyMMddhhmmss")), JSON.ToJson(data), Encoding.UTF8);


                if (!string.IsNullOrWhiteSpace(echostr))
                {
                    context.Response.Write(echostr);
                    return;
                }
                else if (!string.IsNullOrWhiteSpace(code))
                {
                    context.Response.Write(WeChatAPI.GetInstance().GetTokenByCode(code));
                    return;
                }
                else
                {
                    var inst = WeChatAPI.GetInstance();
                    var res  = inst.GetType().GetMethod(method).Invoke(inst, null);
                    context.Response.Write(res);
                    return;
                }
            }
            catch (Exception ex) {
                var json = JSON.ToJson(context.Request.InputStream);
                var data = new { Url = context.Request.Url, Data = json };
                var path = string.Format("{0}/{1}", context.Server.MapPath("~"), "input");
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }

                System.IO.File.WriteAllText(path, ex.Message);
                context.Response.Write("OK");
                context.Response.Write(ex.Message);
            }
        }
Ejemplo n.º 3
0
 public ActionResult Login(string code)
 {
     ViewBag.OpenID = WeChatAPI.GetOpenID(code);
     return(View());
 }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) ||
                filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
            {
                return;
            }

            var user = (SysUser)filterContext.HttpContext.Session["user"];

            if (user == null)
            {
                string code = filterContext.HttpContext.Request["code"];

                if (string.IsNullOrEmpty(code) && isPc)
                {
                    filterContext.Result = new RedirectResult("/Home/Login");
                }
                else
                {
                    var        request         = filterContext.HttpContext.Request;
                    SysUserBLL handle          = new SysUserBLL();
                    int        environmentMode = ConvertHelper.ToInt32(ConfigurationManager.AppSettings["EnvironmentMode"]);
                    string     openID          = ConvertHelper.ToString(request.QueryString["OpenID"]);
                    if (!string.IsNullOrEmpty(openID) && environmentMode == (int)EnvironmentMode.Development) // 开发模式
                    {
                        user = handle.DetailByOpenID(openID);
                    }
                    else
                    {
                        string openId = WeChatAPI.GetOpenID(code);
                        if (string.IsNullOrEmpty(openId))
                        {
                            string toUrl       = FileHelper.GetFilePath("/Home/Index");
                            string url         = @"https://open.weixin.qq.com/connect/oauth2/authorize?appid={1}&redirect_uri={0}&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect";
                            string redirectUrl = string.Format(url, toUrl, ConfigurationManager.AppSettings["AppKey"]);
                            filterContext.Result = new RedirectResult(redirectUrl);
                        }
                        else
                        {
                            user = handle.DetailByOpenID(openId);
                        }
                    }
                    if (user != null)
                    {
                        if (!string.IsNullOrEmpty(operateCode) && !AuthenHelper.HasAuth(operateCode))
                        {
                            filterContext.Result = new RedirectResult("/Home/NoRole");
                        }
                        else
                        {
                            filterContext.HttpContext.Session["user"] = user;
                            filterContext.HttpContext.Session.Timeout = 30;
                        }
                    }
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(operateCode) && !AuthenHelper.HasAuth(operateCode))
                {
                    filterContext.Result = new RedirectResult("/Home/NoAuth");
                }
                else
                {
                    filterContext.HttpContext.Session["user"] = user;
                    filterContext.HttpContext.Session.Timeout = 30;
                }
                filterContext.HttpContext.Session.Timeout = 30;
            }
        }