黄学彪
2020-12-16 0d9f64668fd7350d6a21fd157e32009a96d98134
ZigbeeApp/Shared/Phone/Login/AccountLoginForm.cs
@@ -32,6 +32,9 @@
        /// <param name="account">登陆账号</param>
        public void ShowForm(string account = "")
        {
            //重置云端默认的访问地址,账号登陆后会自动去读取账号所在的区域地址
            HdlHttpLogic.Current.ResetDefultHttpsHost();
            if (account == string.Empty)
            {
                //使用上一次登陆的账号
@@ -172,9 +175,9 @@
                //检测是否同意服务协议
                if (this.CheckPrivacyPolicy() == false) { return; }
                var registerPage = new AccountRegister();
                var registerPage = new AccountRegisterForm();
                CommonPage.Instance.AddChidren(registerPage);
                registerPage.Show();
                registerPage.ShowForm(string.Empty);
            };
            //微信图标
@@ -208,6 +211,7 @@
                btnTiyan.CanClick = false;
                //显示启动页
                HdlControlLogic.Current.ShowLoginLoadView();
                HdlThreadLogic.Current.RunThread(() =>
                {
                    //初始化全部体验数据
@@ -392,9 +396,9 @@
                //检测是否同意服务协议
                if (this.CheckPrivacyPolicy() == false) { return; }
                var forgot = new AccountForgetPWD();
                var forgot = new AccountForgotPasswordForm();
                CommonPage.Instance.AddChidren(forgot);
                forgot.Show();
                forgot.ShowForm();
            };
            //登陆按钮
@@ -580,7 +584,7 @@
                    return;
                }
                //发送验证码
                hadSendCode = this.SendVerCode(btnSendCode, nowInputAccount, i_div);
                hadSendCode = this.SendVerCode(btnSendCode, nowInputAccount);
            };
            //底线
@@ -617,9 +621,9 @@
                //检测是否同意服务协议
                if (this.CheckPrivacyPolicy() == false) { return; }
                var forgot = new AccountForgetPWD();
                var forgot = new AccountForgotPasswordForm();
                CommonPage.Instance.AddChidren(forgot);
                forgot.Show();
                forgot.ShowForm();
            };
            //登陆按钮
@@ -632,7 +636,7 @@
            btnLogin.ButtonClickEvent += (sender, e) =>
            {
                //验证码登陆
                this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim(), i_div);
                this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim());
            };
            return frameBack;
        }
@@ -657,7 +661,7 @@
            int btnWidth = 0;
            //特殊的误差值
            int speceilValue = ControlCommonResourse.TwoTextSpace;
            int speceilValue = HdlControlResourse.TwoTextSpace;
            //我已阅读并同意
            var btnMsg1 = new NormalViewControl(100, 90, true);
@@ -731,11 +735,14 @@
            btnIcon.InitControl();
            btnIcon.X = -btnIcon.XOffset;
            btnIcon.UseClickStatu = false;
            btnIcon.ButtonClickEvent += (sender, e) =>
            {
                btnIcon.IsSelected = !btnIcon.IsSelected;
                isAgreePrivacyPolicy = btnIcon.IsSelected;
            };
            btnIcon.IsSelected = Config.Instance.AcceiptPolicy;
            isAgreePrivacyPolicy = Config.Instance.AcceiptPolicy;
            btnMsg1.X = btnIcon.btnIcon.Width + Application.GetRealWidth(23);
            frameRow.AddChidren(btnMsg1);
@@ -775,17 +782,10 @@
            HdlThreadLogic.Current.RunThread(() =>
            {
                //登陆参数
                var pra = new SendDataToServer.LoginObj();
                pra.Account = i_account;
                pra.Password = i_psw;
                //访问接口
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(pra);
                var result = CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson));
                //登陆
                var result = HdlAccountLogic.Current.LoginByPassword(i_account, i_psw);
                //处理登陆成功的数据
                this.AdjustLoginSuccessData(result, pra, i_account, i_psw, i_div);
                this.AdjustLoginSuccessData(result);
            });
        }
@@ -801,13 +801,7 @@
            if (i_div == 1)
            {
                //检测手机
                if (i_areaCode != string.Empty && AccountLogic.Instance.CheckPhoneWithZone(i_account, i_areaCode) == false)
                {
                    btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError;
                    return false;
                }
                //检测手机
                if (i_areaCode == string.Empty && AccountLogic.Instance.CheckPhone(i_account) == false)
                if (HdlCheckLogic.Current.CheckPhoneNumber(i_account, i_areaCode) == false)
                {
                    btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError;
                    return false;
@@ -816,7 +810,7 @@
            else
            {
                //检测邮箱
                if (AccountLogic.Instance.CheckEmail(i_account) == false)
                if (HdlCheckLogic.Current.CheckEmail(i_account) == false)
                {
                    btnErrorMsg.TextID = R.MyInternationalizationString.TheEmailError;
                    return false;
@@ -858,10 +852,9 @@
                    {
                        ProgressBar.Show(Language.StringByID(R.MyInternationalizationString.Logining));
                        var resultRegID = Shared.Common.CommonPage.Instance.PushRegID();
                        var homes = HdlResidenceLogic.Current.GetHomeListsFromDb(false);
                        var resultRegID = HdlAccountLogic.Current.PushDeviceIdToDB();
                        //刷新个人中心的内存及线程
                        bool result = UserCenterLogic.InitUserCenterMenmoryAndThread();
                        bool result = HdlUserCenterLogic.Current.InitUserCenterMenmoryAndThread(true);
                        //启动ZigBee
                        ZigBee.Common.Application.Init();
@@ -880,13 +873,12 @@
                    }
                    else
                    {
                        var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.AuthUserRes>(authStr);
                        var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AuthUserRes>(authStr);
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            var registerPage = new AccountRegister();
                            var registerPage = new AccountRegisterForm();
                            CommonPage.Instance.AddChidren(registerPage);
                            registerPage.OpenID = authRes.openid;
                            registerPage.Show();
                            registerPage.ShowForm(authRes.openid);
                        });
                    }
                });
@@ -900,49 +892,50 @@
        /// <returns></returns>
        private bool isBindAuthAsync(string authStr)
        {
            var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.AuthUserRes>(authStr);
            var auth = new SendDataToServer.AuthUser()
            {
                AccessToken = authRes.access_token,
                RefreshToken = authRes.refresh_token,
                OpenID = authRes.openid
            };
            //获取微信昵称
            var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + authRes.access_token;
            strUrl += "&openid=" + authRes.openid;
            var byteData = Common.CommonPage.Instance.DoRequestZigbeeHttpsInterface(strUrl, null, null, "GET");
            if (byteData == null)
            {
                return false;
            }
            var receipData = System.Text.Encoding.UTF8.GetString(byteData);
            var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserCenter.NicknameInfo>(receipData);
            auth.UserName = nickData.nickname;
            //☆マーク☆ 绑定微信
            return true;
            //var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.AuthUserRes>(authStr);
            //var auth = new SendDataToServer.AuthUser()
            //{
            //    AccessToken = authRes.access_token,
            //    RefreshToken = authRes.refresh_token,
            //    OpenID = authRes.openid
            //};
            ////获取微信昵称
            //var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + authRes.access_token;
            //strUrl += "&openid=" + authRes.openid;
            //var byteData = HdlHttpLogic.Current.DoRequestZigbeeHttpsInterface(strUrl, null, RestSharp.Method.GET, null, null, null);
            //if (byteData == null)
            //{
            //    return false;
            //}
            //var receipData = System.Text.Encoding.UTF8.GetString(byteData);
            //var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserCenter.NicknameInfo>(receipData);
            //auth.UserName = nickData.nickname;
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(auth);
            var revertObj = CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/InsertOrUpdateAuthUser", System.Text.Encoding.UTF8.GetBytes(requestJson));
            if (revertObj == null)
            {
                return false;
            }
            var stateCodeStr = revertObj.StateCode.ToUpper();
            if (stateCodeStr == "SUCCESS")
            {
                var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginRes>(revertObj.ResponseData.ToString());
                var revertData = responseDataObj;
                //标记上一次是不是同一个账号登陆
                Config.Instance.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid;
                Config.Instance.Account = revertData.Account;
                Config.Instance.MD5PWD = revertData.MD5PWD;
                Config.Instance.Guid = revertData.Guid;
                Config.Instance.LoginDateTime = DateTime.Now;
                Config.Instance.Save();
                return true;
            }
            else
            {
                return false;
            }
            //var revertObj = HdlHttpLogic.Current.RequestHttpsZigbeeAsync("ZigbeeUsers/InsertOrUpdateAuthUser", RestSharp.Method.POST, auth, null, null);
            //if (revertObj == null)
            //{
            //    return false;
            //}
            //var stateCodeStr = revertObj.stateCode.ToUpper();
            //if (stateCodeStr == "SUCCESS")
            //{
            //    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginRes>(revertObj.responseData.ToString());
            //    var revertData = responseDataObj;
            //    //标记上一次是不是同一个账号登陆
            //    Config.Instance.TheSameLoginAccount = Config.Instance.Guid == revertData.userIdStr;
            //    //Config.Instance.Account = revertData.Account;
            //    Config.Instance.MD5PWD = revertData.MD5PWD;
            //    Config.Instance.Guid = revertData.userIdStr;
            //    Config.Instance.LoginDateTime = DateTime.Now;
            //    Config.Instance.Save();
            //    return true;
            //}
            //else
            //{
            //    return false;
            //}
        }
        #endregion
@@ -954,8 +947,7 @@
        /// </summary>
        /// <param name="i_account">账号</param>
        /// <param name="i_verCode">验证码</param>
        /// <param name="i_div">1:手机号 2:邮箱</param>
        private void LoginByVerCode(string i_account, string i_verCode, int i_div)
        private void LoginByVerCode(string i_account, string i_verCode)
        {
            //检测是否同意服务协议
            if (this.CheckPrivacyPolicy() == false) { return; }
@@ -964,16 +956,10 @@
            HdlThreadLogic.Current.RunThread(() =>
            {
                var pra = new SendDataToServer.LoginValidCodeOBJ()
                {
                    Account = i_account,
                    Code = i_verCode,
                    Language = CommonPage.ZigBeeLanguage,
                    AreaCode = int.Parse(CommonPage.PhoneZoneStr)
                };
                var result = CommonFormResouce.LoginByCode(pra);
                //验证码登陆
                var result = HdlAccountLogic.Current.LoginByVerifyCode(i_account, i_verCode);
                //处理登陆成功的数据
                this.AdjustLoginSuccessData(result, pra, i_account, string.Empty, i_div);
                this.AdjustLoginSuccessData(result);
            });
        }
@@ -982,65 +968,29 @@
        /// </summary>
        /// <param name="btnSendCode">发送按钮</param>
        /// <param name="account">账号</param>
        /// <param name="i_div">1:手机号 2:邮箱</param>
        /// <returns></returns>
        private bool SendVerCode(NormalViewControl btnSendCode, string account, int i_div)
        private bool SendVerCode(NormalViewControl btnSendCode, string account)
        {
            //不能再点击
            btnSendCode.CanClick = false;
            int companyInt = 0;
            if (CommonPage.PhoneZoneStr == "86" || i_div == 2)
            var errorMsg = string.Empty;
            if (account.Contains("@") == true)
            {
                companyInt = CommonPage.Company;
                //邮箱
                errorMsg = HdlAccountLogic.Current.SendVeriCodeToEmail(account, VerCodeType.A登陆);
            }
            else
            {
                companyInt = CommonPage.CompanyForINTERNETION;
                errorMsg = HdlAccountLogic.Current.SendVeriCodeToPhone("86", account, VerCodeType.A登陆);
            }
            var reqDtoSignPhone = new SendDataToServer.LoginSendVerCodeObj()
            {
                Account = account,
                Company = companyInt,
                AreaCode = int.Parse(CommonPage.PhoneZoneStr),
                Language = CommonPage.ZigBeeLanguage
            };
            var requestRevertObj = CommonFormResouce.LoginSendVerCode(reqDtoSignPhone);
            if (requestRevertObj == null)
            {
                //请求服务器失败
                CommonPage.Instance.FailureToServer();
                return false;
            }
            var stateCodeStr = requestRevertObj.StateCode.ToUpper();
            if (stateCodeStr == "SUCCESS")
            if (errorMsg == null)
            {
                //开启发送验证码的倒计时
                this.StartSendVerCodeTimeOutThread(btnSendCode);
                return true;
            }
            if (stateCodeStr == "PARAMETEROREMPTY")
            {
                //提供的参数错误
                btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
            }
            else if (stateCodeStr == "ACCOUNTNOEXISTS")
            {
                //账号不存在
                btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
            }
            else if (stateCodeStr == "SENDFAIL")
            {
                //验证码发送失败
                btnErrorMsg.TextID = R.MyInternationalizationString.SENDFAIL;
            }
            else
            {
                //请求服务器失败
                btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed;
                //写Log
                IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginSendVerCode", requestRevertObj, reqDtoSignPhone);
            }
            this.btnErrorMsg.Text = errorMsg;
            HdlThreadLogic.Current.RunThread(() =>
            {
@@ -1095,46 +1045,31 @@
        /// 处理登陆成功的数据
        /// </summary>
        /// <param name="revertObj">云端返回的数据</param>
        /// <param name="pra">接口请求参数</param>
        /// <param name="i_account">账号</param>
        /// <param name="i_psw">密码,验证码登陆时,设置为 string.Empty</param>
        /// <param name="i_div">1:手机号 2:邮箱</param>
        private void AdjustLoginSuccessData(Common.ResponseEntity.ResponsePack revertObj, object pra,
            string i_account, string i_psw, int i_div)
        private void AdjustLoginSuccessData(ResponsePack revertObj)
        {
            if (revertObj == null)
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //请求服务器失败
                    CommonPage.Instance.FailureToServer();
                    HdlMessageLogic.Current.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.RequestServerFailed));
                    CommonPage.Loading.Hide();
                });
                HdlLogLogic.Current.WriteLog(-1, "登陆时,没网络");
                return;
            }
            var stateCodeStr = revertObj.StateCode.ToUpper();
            //Error 不能直接从服务器取,只能根据状态码逐一判断
            if (stateCodeStr == "SUCCESS")
            if (revertObj.Code == HttpMessageEnum.A成功)
            {
                //存储数据
                var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginRes>(revertObj.ResponseData.ToString());
                var revertData = responseDataObj;
                Config.ReFresh();
                //标记上一次是不是同一个账号登陆
                Config.Instance.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid;
                Config.Instance.Account = revertData.Account;
                Config.Instance.Password = i_psw;
                Config.Instance.MD5PWD = revertData.MD5PWD;
                Config.Instance.Guid = revertData.Guid;
                Config.Instance.LoginDateTime = DateTime.Now;
                Config.Instance.LoginToken = revertData.Token;
                Config.Instance.Save();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //显示启动页
                    HdlControlLogic.Current.ShowLoginLoadView();
                });
                var resultRegID = CommonPage.Instance.PushRegID();
                var homes = HdlResidenceLogic.Current.GetHomeListsFromDb(false);
                var resultRegID = HdlAccountLogic.Current.PushDeviceIdToDB();
                //刷新个人中心的内存及线程
                bool result = UserCenterLogic.InitUserCenterMenmoryAndThread();
                bool result = HdlUserCenterLogic.Current.InitUserCenterMenmoryAndThread(true);
                //启动ZigBee
                ZigBee.Common.Application.Init();
@@ -1156,71 +1091,8 @@
            HdlThreadLogic.Current.RunMain(() =>
            {
                CommonPage.Loading.Hide();
                if (stateCodeStr == "NOTVERIFY")
                {
                    //未激活
                    btnErrorMsg.TextID = R.MyInternationalizationString.NOTVERIFY;
                }
                else if (stateCodeStr == "NOTENABLE")
                {
                    //该用户属于调试账号,并未启用
                    btnErrorMsg.TextID = R.MyInternationalizationString.NOTENABLE;
                }
                else if (stateCodeStr == "PARAMETEROREMPTY")
                {
                    //提供的参数错误
                    btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
                }
                else if (stateCodeStr == "VALIDCODEANDPHONENOEQUAL")
                {
                    //验证码错误,请重新输入
                    btnErrorMsg.TextID = R.MyInternationalizationString.VALIDCODEANDPHONENOEQUAL;
                }
                else if (stateCodeStr == "USERNAMEORPWDERROR")
                {
                    //账号或密码错误
                    btnErrorMsg.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR;
                }
                else if (stateCodeStr == "ACCOUNTNOEXISTS")
                {
                    //账号不存在
                    btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS;
                }
                else if (stateCodeStr == "NORECORD" && i_psw == string.Empty)
                {
                    //请先获取验证码
                    btnErrorMsg.TextID = R.MyInternationalizationString.NORECORD;
                }
                else if (stateCodeStr == "BERESTRICT")
                {
                    //此账号无权登录
                    btnErrorMsg.TextID = R.MyInternationalizationString.ThisAccountHasNoAuthorityToLogin;
                }
                else if (stateCodeStr == "YOUDATANOISLOCALREGION")
                {
                    //不在本区域,需要重定向区域后再次请求登录
                    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginLocalRegionRes>(revertObj.ResponseData.ToString());
                    CommonPage.RequestHttpsHost = responseDataObj.RegionServer;
                    if (i_psw != string.Empty)
                    {
                        //再次登录
                        this.LoginByAccountAndPsw(i_account, i_psw, i_div);
                    }
                }
                else
                {
                    btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed;
                    //写Log
                    if (pra is SendDataToServer.LoginObj)
                    {
                        ((SendDataToServer.LoginObj)pra).Password = "*********";
                        IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/Login", revertObj, pra);
                    }
                    else
                    {
                        IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginValidCode", revertObj, pra);
                    }
                }
                //错误消息
                btnErrorMsg.Text = HdlMessageLogic.Current.TranslateHttpCode(revertObj.Code);
            });
        }
@@ -1234,6 +1106,8 @@
        /// <returns></returns>
        private bool CheckPrivacyPolicy()
        {
            Config.Instance.AcceiptPolicy = isAgreePrivacyPolicy;
            if (isAgreePrivacyPolicy == false)
            {
                //请先阅读并同意《隐私权政策》和《服务条款》
@@ -1245,5 +1119,30 @@
        }
        #endregion
        #region ■ 结构体_____________________________
        private class AuthUserRes
        {
            ///<summary>
            /// 第三方token
            /// </summary>
            public string access_token;
            /// <summary>
            /// 刷新token
            /// </summary>
            public string refresh_token;
            /// <summary>
            ///第三方用户唯一标识
            /// </summary>
            public string openid;
            public int expires_in;
            public string scope;
            public string unionid;
        }
        #endregion
    }
}