| | |
| | | /// <param name="account">登陆账号</param>
|
| | | public void ShowForm(string account = "")
|
| | | {
|
| | | //重置云端默认的访问地址,账号登陆后会自动去读取账号所在的区域地址
|
| | | HdlHttpLogic.Current.ResetDefultHttpsHost();
|
| | |
|
| | | if (account == string.Empty)
|
| | | {
|
| | | //使用上一次登陆的账号
|
| | |
| | | //检测是否同意服务协议
|
| | | if (this.CheckPrivacyPolicy() == false) { return; }
|
| | |
|
| | | var registerPage = new AccountRegister();
|
| | | var registerPage = new AccountRegisterForm();
|
| | | CommonPage.Instance.AddChidren(registerPage);
|
| | | registerPage.Show();
|
| | | registerPage.ShowForm(string.Empty);
|
| | | };
|
| | |
|
| | | //微信图标
|
| | |
| | |
|
| | | btnTiyan.CanClick = false;
|
| | | //显示启动页
|
| | | HdlControlLogic.Current.ShowLoginLoadView();
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //初始化全部体验数据
|
| | |
| | | //检测是否同意服务协议
|
| | | if (this.CheckPrivacyPolicy() == false) { return; }
|
| | |
|
| | | var forgot = new AccountForgetPWD();
|
| | | var forgot = new AccountForgotPasswordForm();
|
| | | CommonPage.Instance.AddChidren(forgot);
|
| | | forgot.Show();
|
| | | forgot.ShowForm();
|
| | | };
|
| | |
|
| | | //登陆按钮
|
| | |
| | | return;
|
| | | }
|
| | | //发送验证码
|
| | | hadSendCode = this.SendVerCode(btnSendCode, nowInputAccount, i_div);
|
| | | hadSendCode = this.SendVerCode(btnSendCode, nowInputAccount);
|
| | | };
|
| | |
|
| | | //底线
|
| | |
| | | //检测是否同意服务协议
|
| | | if (this.CheckPrivacyPolicy() == false) { return; }
|
| | |
|
| | | var forgot = new AccountForgetPWD();
|
| | | var forgot = new AccountForgotPasswordForm();
|
| | | CommonPage.Instance.AddChidren(forgot);
|
| | | forgot.Show();
|
| | | forgot.ShowForm();
|
| | | };
|
| | |
|
| | | //登陆按钮
|
| | |
| | | btnLogin.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //验证码登陆
|
| | | this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim(), i_div);
|
| | | this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim());
|
| | | };
|
| | | return frameBack;
|
| | | }
|
| | |
| | | int btnWidth = 0;
|
| | |
|
| | | //特殊的误差值
|
| | | int speceilValue = ControlCommonResourse.TwoTextSpace;
|
| | | int speceilValue = HdlControlResourse.TwoTextSpace;
|
| | |
|
| | | //我已阅读并同意
|
| | | var btnMsg1 = new NormalViewControl(100, 90, true);
|
| | |
| | | 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);
|
| | |
| | |
|
| | | 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);
|
| | | });
|
| | | }
|
| | |
|
| | |
| | | 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;
|
| | |
| | | else
|
| | | {
|
| | | //检测邮箱
|
| | | if (AccountLogic.Instance.CheckEmail(i_account) == false)
|
| | | if (HdlCheckLogic.Current.CheckEmail(i_account) == false)
|
| | | {
|
| | | btnErrorMsg.TextID = R.MyInternationalizationString.TheEmailError;
|
| | | return false;
|
| | |
| | | {
|
| | | 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();
|
| | |
| | | }
|
| | | 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);
|
| | | });
|
| | | }
|
| | | });
|
| | |
| | | /// <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
|
| | |
| | | /// </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; }
|
| | |
| | |
|
| | | 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);
|
| | | });
|
| | | }
|
| | |
|
| | |
| | | /// </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(() =>
|
| | | {
|
| | |
| | | /// 处理登陆成功的数据
|
| | | /// </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();
|
| | |
| | | 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);
|
| | | });
|
| | | }
|
| | |
|
| | |
| | | /// <returns></returns>
|
| | | private bool CheckPrivacyPolicy()
|
| | | {
|
| | | Config.Instance.AcceiptPolicy = isAgreePrivacyPolicy;
|
| | |
|
| | | if (isAgreePrivacyPolicy == false)
|
| | | {
|
| | | //请先阅读并同意《隐私权政策》和《服务条款》
|
| | |
| | | }
|
| | |
|
| | | #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
|
| | | }
|
| | | }
|