Example #1
0
        public ActionResult LoginByWeiXinSilence(string state)
        {
            IConfig config  = new ConfigWeChatWork();
            var     p       = new Dictionary <string, string>();
            string  tempurl = Server.UrlEncode("https://168plas.com/Account/LoginByWeiXin");

            p.Add("appid", config.AppID);
            p.Add("redirect_uri", tempurl);
            p.Add("response_type", "code");
            p.Add("scope", "snsapi_login");
            p.Add("state", Server.UrlEncode(state));
            //return Redirect($"https://open.weixin.qq.com/connect/oauth2/authorize{p.ToParam("?")}#wechat_redirect");
            string tempurls = $"https://open.weixin.qq.com/connect/qrconnect{p.ToParam("?")}#wechat_redirect";

            return(Redirect(tempurls));
        }
Example #2
0
        public ActionResult LoginByWeiXin(string code, string state = null)
        {
            string returnresultstr = string.Empty;
            int    returncode      = 0;
            //Func<string, string, ActionResult> error = (content, detail) =>
            //{
            //    return this.ToError("错误", detail, Url.Action("Login", "Account"));
            //};


            IConfig           config = new ConfigWeChatWork();
            WeChatApi         wechat = new WeChatApi(config);
            AccessTokenResult result;
            CommonBll         cbll   = new CommonBll();
            DataTable         codetb = cbll.GetWxCodeCheck(code, 0);

            try
            {
                if (string.IsNullOrWhiteSpace(code))
                {
                    //return error("请求有误", "Code不能为空");
                    returnresultstr = "请求错误!";
                }
                else if (codetb.Rows.Count <= 0)
                {
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", "");
                    cbll.AddWxCode(code, 0);
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "请求access_token结束", "");
                    //PlasCommon.Common.AddLog("", "开始请求access_token", "开始请求access_token", "");
                    result = wechat.GetAccessTokenSns(code);
                    //PlasCommon.Common.AddLog("", "请求access_token成功", "请求access_token成功", "");
                    var openID = result.OpenID;
                    if (state == "openid")
                    {
                        PlasCommon.Common.AddLog("", "access_token", result.AccessToken, "");

                        config.AccessToken = result.AccessToken;
                        //Response.Cookies["WeChatOpenID"].Value = openID;
                        //AccountData.WeChatOpenID = openID;
                        //PlasCommon.Common.AddLog("", "获取用户信息开始1", "获取用户信息开始1", "");
                        var userInfo = wechat.GetUserInfoSns(openID);
                        //PlasCommon.Common.AddLog("", "获取用户信息成功", "获取用户信息成功", "");
                        string returnstr = mbll.WxOrQQLoginBll(openID, "0");
                        if (returnstr != "Fail")
                        {
                            string[] resultstr = returnstr.Split(',');
                            //如果微信已经存在则登录
                            if (resultstr.Length > 0)
                            {
                                mbll.UpdateUserInfobll("HeadImage", userInfo.HeadImgUrl, resultstr[3]);
                                mbll.UpdateUserInfobll("UserName", userInfo.NickName, resultstr[2]);
                                if (resultstr[0].Equals("Success"))
                                {
                                    //var returndata = new
                                    //{
                                    //    usid = resultstr[1],
                                    //    phone = resultstr[4]
                                    //};
                                    //把重要的用户信息进行加密,存放到cookie
                                    this.SetAccountData(new AccountData
                                    {
                                        UserID       = resultstr[1],
                                        UserName     = resultstr[2],
                                        HeadImage    = resultstr[3],
                                        WeChatOpenID = openID
                                    });
                                    //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", "");
                                    //return RedirectToAction("Home", "Index");
                                    //return new RedirectResult("/Home/Index");
                                    returnresultstr = "登录成功!";
                                    returncode      = 1;
                                }
                                else
                                {
                                    //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                    returnresultstr = "登录失败!";
                                }
                            }
                            else
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                        }
                        //不存在则注册,注册成功则返回用户id,注册失败则返回失败状态
                        else
                        {
                            cp_userview model = new cp_userview();
                            model.UserName  = userInfo.NickName;
                            model.wxopenid  = openID;
                            model.HeadImage = userInfo.HeadImgUrl;
                            string registerresultstr = mbll.WxOrQQSaveRegister(model, "0");
                            //已经存在
                            if (registerresultstr == "AlreadyExist")
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                            else if (registerresultstr == "Fail")
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                            else if (registerresultstr == "Success")
                            {
                                string   returnstr2 = mbll.WxOrQQLoginBll(openID, "0");
                                string[] resultstr2 = returnstr2.Split(',');
                                if (resultstr2.Length > 0)
                                {
                                    if (resultstr2[0].Equals("Success"))
                                    {
                                        //var returndata2 = new
                                        //{
                                        //    usid = resultstr2[1],
                                        //    phone = resultstr2[4]
                                        //};
                                        this.SetAccountData(new AccountData
                                        {
                                            UserID       = resultstr2[1],
                                            UserName     = resultstr2[2],
                                            HeadImage    = resultstr2[3],
                                            WeChatOpenID = openID
                                        });
                                        //PlasCommon.Common.AddLog("", "微信登录成功", "登录成功", "");
                                        //return RedirectToAction("Index", "Home");
                                        //return Redirect("/Home/Index");
                                        returnresultstr = "登录成功!";
                                        returncode      = 2;
                                        //return new RedirectResult("/Home/Index");
                                    }
                                    else
                                    {
                                        //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                        returnresultstr = "登录失败!";
                                    }
                                }
                                else
                                {
                                    //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                    returnresultstr = "登录失败!";
                                }
                            }
                            else
                            {
                                //return Json(Common.ToJsonResult("Fail", "登录失败"), JsonRequestBehavior.AllowGet);
                                returnresultstr = "登录失败!";
                            }
                        }
                    }
                    else
                    {
                        //return Json(Common.ToJsonResult("Error", "登录失败"));
                        returnresultstr = "登录失败!";
                    }
                }
                else
                {
                    returnresultstr = "登录成功!";
                    returncode      = 3;
                }
            }
            catch (Exception ex)
            {
                //PlasCommon.Common.AddLog("", "微信请求错误", ex.Message, "");
                //return error("请求有误", ex.Message);
                returnresultstr = "系统错误:" + ex.Message;
            }
            ViewBag.texing   = returnresultstr;
            ViewBag.typecode = returncode;
            return(View());
        }
Example #3
0
        private ApplicationUser CreateByWeChat(Common.WeChat.UserInfoResult model)
        {
            string  username, nickname, avart, unionId = model.UnionID;
            var     user   = db.Users.FirstOrDefault(s => s.WeChatID == unionId);
            IConfig config = null;

            switch (model.Type)
            {
            case WeChatAccount.AiCardMini:
                config = new ConfigMini();
                break;

            case WeChatAccount.AiCardPersonalMini:
                config = new ConfigMiniPersonal();
                break;

            default:
            case WeChatAccount.PC:
                config = new ConfigWeChatWork();
                break;
            }
            if (user != null)
            {
                string appID = config.AppID;
                var    op1   = new Bll.Users.UserOpenID(user);
                op1.AddOpenID(appID, model.OpenID);
                db.SaveChanges();
                return(user);
            }
            nickname = model.NickName;

            avart = model.HeadImgUrl;
            if (!string.IsNullOrWhiteSpace(avart))
            {
                try
                {
                    avart = this.Download(avart);
                }
                catch (Exception)
                {
                    avart = "~/Content/Images/404/avatar.png";
                }
            }
            unionId = model.UnionID;

            #region 把图片传到七牛
            var path = Server.MapPath(avart);
            avart = new Common.Qiniu.QinQiuApi().UploadFile(path, true);
            #endregion


            do
            {
                username = $"wc{DateTime.Now:yyyyMMddHHmmss}{Comm.Random.Next(1000, 9999)}";
            } while (db.Users.Any(s => s.UserName == username));
            if (string.IsNullOrWhiteSpace(nickname))
            {
                nickname = username;
            }
            user = new ApplicationUser
            {
                WeChatID          = unionId,
                UserName          = username,
                NickName          = nickname,
                Avatar            = avart,
                RegisterDateTime  = DateTime.Now,
                LastLoginDateTime = DateTime.Now,
                UserType          = UserType.Personal
            };
            var option = new Bll.Users.UserOpenID(user);
            option.AddOpenID(config.AppID, model.OpenID);
            var r = UserManager.Create(user);
            user = db.Users.FirstOrDefault(s => s.WeChatID == unionId);

            db.SaveChanges();
            if (!r.Succeeded)
            {
                throw new Exception(r.Errors.FirstOrDefault());
            }

            return(user);
        }