using Dragablz; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PDF_Master.Model; using PDF_Master.Properties; using PDF_Master.ViewModels; using PDF_Master.Views; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Management; using System.Net; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; namespace PDF_Master.Helper { /// /// 注册登陆相关的工具类 /// /// public static class ServiceHelper { public static uint WakeId; public static bool IsLogin=false; public static string ALLPassword = ""; public static string access_token = ""; public static string outemail = ""; public static string outcode = ""; public static string outregister = ""; public static string outlogin = ""; public static string code = ""; public static string okcode = ""; public static string remsg = ""; public static string state = ""; public static string AppCode = "com.brother.pdfreaderprofree.windows"; #if DEBUG //测试环境 public static string RequestHost = "http://139.196.160.101:8081"; public static string WebHost = "http://test-pdf-pro.kdan.cn:3021"; #else //正式环境 public static string RequestHost = "https://pdfmaster.pdfreaderpro.com"; public static string WebHost = "https://www.pdfreaderpro.com"; #endif /// /// 验证邮箱 /// public static string OKemailUrl = "/pdf-office-sso/auth/validUser"; /// /// 验证验证码 /// public static string OKcodeUrl = "/pdf-office-sso/auth/isEmailCodeValid"; /// /// 发送验证码 /// public static string GetcodeUrl = "/pdf-office-sso/auth/getVerifyCode"; /// /// 注册邮箱 /// public static string registerUrl = "/pdf-office-sso/auth/emailRegister"; /// /// /登录 /// public static string LoginUrl = "/pdf-office-sso/auth/emailLogin"; /// /// 登出 /// public static string LogoutUrl = "/pdf-office-sso/user/logout"; /// /// 注销 /// public static string UseroutUrl = "/pdf-office-sso/user/logOffForUser"; /// /// 重置密码 /// public static string RebirthUrl = "/pdf-office-sso/auth/resetPassword"; /// /// 获取用户信息 /// public static string GetUserUrl = "/pdf-office-sso/user/me"; /// /// 收集软件启动数据 /// public static string DeviceLogUrl = "/pdf-office-account/deviceLog/create"; /// /// 设备是否被自动登出 /// public static string CheckDeviceStatusUrl = "/pdf-office-sso/auth/checkDeviceStatus"; public static string AcceptdataUrl = "http://127.0.0.1:5544"; /// /// 用于检查网络是否可以连接互联网,true表示连接成功,false表示连接失败 /// /// [DllImport("wininet.dll")] private extern static bool InternetGetConnectedState(int Description, int ReservedValue); public static bool IsConnectInternet() { int Description = 0; return InternetGetConnectedState(Description, 0); } private static string computerInfo; /// /// 电脑品牌信息 /// public static string ComputerInfo { get { if (computerInfo == null) { computerInfo = GetComputerInfo(); } return computerInfo; } set { computerInfo = value; } } private static string systemInfo; /// /// 系统信息 /// public static string SystemInfo { get { if (systemInfo == null) { systemInfo = GetSystemInfo(); } return systemInfo; } set { systemInfo = value; } } private static string GetSystemInfo() { try { string s = ""; SelectQuery sq = new SelectQuery("Win32_OperatingSystem"); ManagementObjectSearcher mos = new ManagementObjectSearcher(sq); ManagementObjectCollection moc = mos.Get(); foreach (ManagementObject mo in moc) { s = mo.Properties["Version"].Value.ToString(); } moc.Dispose(); sq = null; return s; } catch { return ""; } } private static string GetComputerInfo() { try { string s = ""; System.Windows.Controls.TextBox text = new System.Windows.Controls.TextBox(); SelectQuery sq = new SelectQuery("Win32_ComputerSystem"); ManagementObjectSearcher mos = new ManagementObjectSearcher(sq); ManagementObjectCollection moc = mos.Get(); foreach (ManagementObject mo in moc) { s = mo.Properties["Manufacturer"].Value + " " + mo.Properties["Model"].Value; } moc.Dispose(); sq = null; return s; } catch { return ""; } } /// /// 操作系统生成的UUID,用于获取虚拟机用户的设备识别码 /// /// public static string GetUUID() { string systemId = null; using (ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_ComputerSystemProduct")) { foreach (var item in mos.Get()) { systemId = item["UUID"].ToString(); } } return systemId; } /// /// 主板编号 /// /// public static string GetBoardId() { var st = string.Empty; var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard"); foreach (var o in mos.Get()) { var mo = (ManagementObject)o; st = mo["SerialNumber"].ToString(); } return st; } /// /// 获取设备唯一ID /// /// public static string GetDeviceSerialNumber() { StringBuilder DeviceBuilder = new StringBuilder(); bool IsVirtual = false; string boardId = GetBoardId(); string uuid = GetUUID(); //判断是否是虚拟机用户 if (boardId.ToLower() == "" || boardId.ToLower() == "none") { if (string.IsNullOrEmpty(uuid) || uuid.ToLower() == "none") return string.Empty; else IsVirtual = true; } //真实机器用户 用主板id作为唯一识别码 if (!IsVirtual) { DeviceBuilder.Append(boardId); } else { DeviceBuilder.Append(uuid); } MD5 md5 = MD5.Create(); List charbytes = new List(); foreach (char code in DeviceBuilder.ToString().ToArray()) { charbytes.Add((byte)code); } byte[] md5Array = md5.ComputeHash(charbytes.ToArray()); DeviceBuilder = new StringBuilder(); foreach (var code in md5Array) { DeviceBuilder.Append(code.ToString("X2")); } return DeviceBuilder.ToString(); } /// /// 获取设备系统版本 /// /// public static string GetSystemVersionNumber() { var st = string.Empty; try { var mc = new ManagementClass("Win32_OperatingSystem"); var moc = mc.GetInstances(); foreach (var o in moc) { var mo = (ManagementObject)o; st = mo.Properties["Version"].Value.ToString(); if (st != string.Empty) { break; } } } catch (Exception ex) { } return st; } /// /// 高级功能前弹出比较表 /// /// 是否请求服务器,true为请求 public static bool IAPBeforeFunction(bool post = false) { if (!App.IsLogin) { if (Settings.Default.UserDate.Email == "") { App.mainWindowViewModel.OpenRegister(); return false; } else { App.mainWindowViewModel.OpenLogin(); return false; } } if (post) { //判断本地有没有token,没有显示登录,有再判断登录状态 if (Settings.Default.AppProperties.LoginToken != "") { string code = ServiceHelper.GetUser(); if (code == "330"|| code == "304") { App.mainWindowViewModel.UserVis = Visibility.Collapsed; App.mainWindowViewModel.LoginVis = Visibility.Visible; App.mainWindowViewModel.RegisterVis = Visibility.Collapsed; App.mainWindowViewModel.OphVis = Visibility.Visible; } } else { App.mainWindowViewModel.UserVis = Visibility.Collapsed; App.mainWindowViewModel.LoginVis = Visibility.Visible; App.mainWindowViewModel.RegisterVis = Visibility.Collapsed; App.mainWindowViewModel.OphVis = Visibility.Visible; } } (App.mainWindowViewModel.SelectedItem.DataContext as MainContentViewModel).IsUsedVIP = true; return true; } //超时同步为20秒 /// /// 用户信息获取 /// /// public static String GetUser() { //判断是否有网络 if (!IsConnectInternet()) { return "300"; } HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + GetUserUrl + ""); request.Method = "Get"; request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}"); request.ContentType = "text/html;charset=UTF-8"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); }; JToken jToken; if (jobject.TryGetValue("msg", out jToken) == false) { //ListenerSubscription(); App.IsLogin = true; Settings.Default.UserDate.Email= jobject["email"].ToObject().ToLower(); Settings.Default.UserDate.id= jobject["id"].ToObject().ToLower(); JArray subscriptionInfoList = (JArray)jobject["subscriptionInfoList"]; foreach (JToken info in subscriptionInfoList) { if ((int)info["platform"] == 2) { Settings.Default.UserDate.subscribeid = (string)info["id"]; Settings.Default.UserDate.subscribeuserid = (string)info["userId"]; Settings.Default.UserDate.subscribeplatform = (int)info["platform"]; Settings.Default.UserDate.subscribestatus = (int)info["status"]; if (Settings.Default.UserDate.subscribestatus > 0) { Settings.Default.UserDate.subscribeendDate = (string)info["endDate"]; Settings.Default.UserDate.subscribepayType = (int)info["payType"]; } } } //此处为主页UPgread按钮的Visible if (Settings.Default.UserDate.subscribestatus == 1) { for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null&& win.DataContext!=null) { (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1); } } } else { for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null&& win.DataContext!=null) { (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1); } } } #region 试用策略 //Settings.Default.UserDate.isInFreeUseTime= jobject["isInFreeUseTime"].ToObject(); //Settings.Default.UserDate.freeDate= jobject["freeDate"].ToObject().ToLower(); //if(DateTime.Parse(Settings.Default.UserDate.freeDate)<=DateTime.Now) //{ // Settings.Default.UserDate.isInFreeUseTime = false; //} #endregion App.mainWindowViewModel.Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1); Settings.Default.Save(); return "ture"; } else { return "false"; } } } catch (System.Net.WebException e) { int statusCode = 0; if (e.Response is HttpWebResponse) { //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确 statusCode = (int)((HttpWebResponse)e.Response).StatusCode; } //试用策略注释 //if (DateTime.Parse(Settings.Default.UserDate.freeDate) <= DateTime.Now) //{ // Settings.Default.UserDate.isInFreeUseTime = false; //} Console.WriteLine(e.Message); //无权限 if (Settings.Default.AppProperties.LoginToken == "") return "No Token"; else if(statusCode == 401) { if(CheckDeviceStatusout()=="330") { App.IsLogin = false; return "330"; } else { return "304"; } } else return "300"; } catch { //试用策略注释 //if (DateTime.Parse(Settings.Default.UserDate.freeDate) <= DateTime.Now) //{ // Settings.Default.UserDate.isInFreeUseTime = false; //} return "300"; } } /// /// 验证email格式 /// /// /// /// public static String Ok_email(string intemail, string validType) { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + OKemailUrl); request.Method = "Post"; request.ContentType = "application/json"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("appId"); writer.WriteValue(16); writer.WritePropertyName("platformType"); writer.WriteValue(0); writer.WritePropertyName("username"); writer.WriteValue(intemail); writer.WritePropertyName("validType"); writer.WriteValue(validType); writer.WriteEndObject(); } try { string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); //outemail = jobject["msg"].ToObject().ToLower(); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return jobject["code"].ToObject().ToLower(); } } catch (Exception ex) { Console.WriteLine(ex); return "300"; } } /// /// 获取验证码 /// /// /// /// public static string Get_code(string action, string email) { string post = $"?action={action}&appId=16&receiver={email}&type=0"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + GetcodeUrl + post); request.Method = "Get"; request.ContentType = "text/html;charset=UTF-8"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// /// 验证验证码是否正确 /// /// /// /// /// public static String Ok_code(string email, string code, string type) { string post = $"?account={email}&code={code}&type={type}&appId=16"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + OKcodeUrl + post); request.Method = "Get"; request.ContentType = "text/html;charset=UTF-8"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// /// 注册账号 /// /// /// /// /// /// public static String Register_email(string intemail, string intpassword, string intcode, string uuid) { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + registerUrl); request.Method = "Post"; request.ContentType = "application/json"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("appId"); writer.WriteValue(16); writer.WritePropertyName("deviceSign"); writer.WriteValue(uuid); writer.WritePropertyName("password"); writer.WriteValue(intpassword); writer.WritePropertyName("platformType"); writer.WriteValue(0); writer.WritePropertyName("username"); writer.WriteValue(intemail); writer.WritePropertyName("verifyCode"); writer.WriteValue(intcode); writer.WritePropertyName("model"); writer.WriteValue("windows"); writer.WriteEndObject(); } try { string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { App.IsLogin =true; for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null && win.DataContext != null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; } } Settings.Default.UserDate.Email = intemail; Settings.Default.UserDate.IsLoginoff = false; access_token = jobject["result"]["access_token"].ToObject().ToLower(); Settings.Default.AppProperties.LoginToken = jobject["result"]["access_token"].ToObject().ToLower(); Settings.Default.Save(); GetUser(); } //return jobject["code"].ToObject().ToLower(); return "200"; } } catch { return "300"; } } /// /// 登录 /// /// /// /// /// public static String Login(string intemail, string intpassword, string uuid) { string postBody = $"?appId=16&deviceSign={uuid}&email={intemail}&password={intpassword}&platformType=0&model=windows"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + LoginUrl + postBody); request.Method = "Post"; request.ContentType = "application/x-www-form-urlencoded"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { //ListenerSubscription(); for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null && win.DataContext != null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; } } App.IsLogin = true; Settings.Default.UserDate.Email = intemail; Settings.Default.UserDate.IsLoginoff = false; access_token = jobject["result"]["access_token"].ToObject().ToLower(); Settings.Default.AppProperties.LoginToken = jobject["result"]["access_token"].ToObject().ToLower(); Settings.Default.Save(); GetUser(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// /// 登出 /// /// public static void Logout(string uuid) { string postBody = $"?deviceSign={uuid}&appId=16"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + LogoutUrl + postBody); request.Method = "Post"; request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}"); request.ContentType = "application/x-www-form-urlencoded"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); App.IsLogin = false; Settings.Default.UserDate.subscribestatus = -1; Settings.Default.UserDate.subscribepayType = 0; App.mainWindowViewModel.UpgradeVis = Visibility.Visible; for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null && win.DataContext != null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible; } } if (response != null) { response.Close(); } if (request != null) { request.Abort(); } } } catch { } } /// /// 注销 /// /// /// public static String Usergout(string code) { string postBody = $"?code={code}&appId=16"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + UseroutUrl + postBody); request.Method = "Post"; request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}"); request.ContentType = "application/x-www-form-urlencoded"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); App.IsLogin = false; Settings.Default.UserDate.subscribestatus = -1; Settings.Default.UserDate.subscribepayType = 0; for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null && win.DataContext != null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible; } } App.mainWindowViewModel.UpgradeVis = Visibility.Visible; if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// /// 重置密码 /// /// /// /// /// /// public static String Rebirth(string intemail, string firstpassword, string secondPassword, string intcode) { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + RebirthUrl); request.Method = "Post"; request.ContentType = "application/json"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("account"); writer.WriteValue(intemail); writer.WritePropertyName("appId"); writer.WriteValue(16); writer.WritePropertyName("firstPassword"); writer.WriteValue(firstpassword); writer.WritePropertyName("platformType"); writer.WriteValue(0); writer.WritePropertyName("secondPassword"); writer.WriteValue(secondPassword); writer.WritePropertyName("verifyCode"); writer.WriteValue(intcode); writer.WriteEndObject(); } try { string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; } } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// /// 设备是否被自动登出 /// public static String CheckDeviceStatusout() { string postBody = $"?appId=16&deviceSign={GetDeviceSerialNumber()}"; HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + CheckDeviceStatusUrl + postBody); request.Method = "Post"; request.ContentType = "application/x-www-form-urlencoded"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; try { response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); App.IsLogin = false; Settings.Default.UserDate.subscribestatus = -1; Settings.Default.UserDate.subscribepayType = 0; App.mainWindowViewModel.UpgradeVis = Visibility.Visible; if(App.Current.Windows!=null&&App.Current.Windows.Count!=0) { for (int i = 0; i < App.Current.Windows.Count; i++) { MainWindow win = App.Current.Windows[i] as MainWindow; if (win != null&& win.DataContext!=null) { (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible; (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed; (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible; } } } if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } /// ///上传设备启动信息到服务端 /// public static void CreateDeviceLog() { string url = RequestHost + DeviceLogUrl; try { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + DeviceLogUrl); request.Method = "Post"; request.ContentType = "application/json"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("appVersion"); writer.WriteValue(App.Version); //产品ID Mac21 Windows 22 writer.WritePropertyName("productId"); writer.WriteValue(22); writer.WritePropertyName("os"); writer.WriteValue(GetSystemVersionNumber()); writer.WritePropertyName("timeZone"); writer.WriteValue(TimeZoneInfo.Local.DisplayName); writer.WritePropertyName("language"); writer.WriteValue(CultureInfo.CurrentCulture.Name); //平台 Mac 0 Windows 1 writer.WritePropertyName("platform"); writer.WriteValue(1); writer.WritePropertyName("createdAt"); writer.WriteValue(DateTime.Now.ToFileTime()); writer.WritePropertyName("appId"); writer.WriteValue(16); writer.WritePropertyName("model"); writer.WriteValue("Windows"); writer.WritePropertyName("uniqueSn"); writer.WriteValue(GetDeviceSerialNumber()); writer.WritePropertyName("updatedAt"); writer.WriteValue(DateTime.Now.ToFileTime()); writer.WriteEndObject(); } string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { Console.WriteLine("软件启动信息上传成功"); } } } catch { } } //监听代码,暂时用不到,注释 //监听订阅行为 //public static HttpListener httpListener; //public static bool isListening = false; //public async static void ServerBoot() //{ // if (!isListening) // { // httpListener = new HttpListener(); // httpListener.Prefixes.Add("http://127.0.0.1:5544/"); // // 启动监听器 // httpListener.Start(); // Console.WriteLine($"开始喽"); // isListening = true; // // 在后台线程中等待请求并处理 // await Task.Run(() => ListenForRequests()); // } //} //private static async Task ListenForRequests() //{ // WakeId = Win32Helper.RegisterWindowMessage("msgWake_PDFMaster"); // Console.WriteLine("等待请求..."); // // 持续监听请求 // while (true) // { // // 等待接收请求 // HttpListenerContext context = await httpListener.GetContextAsync(); // // 允许跨域请求 // context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); // context.Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); // context.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); // // 处理请求 // if (context.Request.HttpMethod == "GET") // { // //返回 true 并结束监听 // if (App.IsLogin == true) // { // Win32Helper.PostMessage((IntPtr)0xffff, WakeId, IntPtr.Zero, IntPtr.Zero); // IntPtr waitPtr = Win32Helper.CreateEvent(IntPtr.Zero, true, false, "Global\\shareWaitNotify" + Guid.NewGuid()); // Win32Helper.WaitForSingleObject(waitPtr, 5000); // Win32Helper.CloseHandle(waitPtr); // } // byte[] responseBytes = System.Text.Encoding.UTF8.GetBytes("true"); // context.Response.StatusCode = (int)HttpStatusCode.OK; // context.Response.ContentLength64 = responseBytes.Length; // context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length); // context.Response.OutputStream.Close(); // httpListener.Stop(); // isListening = false; // break; // } // } //} } }