using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PDF_Master.Model; using PDF_Master.Properties; using Prism.Services.Dialogs; using System; using System.Collections.Generic; 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.Threading.Tasks; using System.Windows; namespace PDF_Master.Helper { /// /// 注册登陆相关的工具类 /// /// public static class ServiceHelper { 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"; #else //正式环境 public static string RequestHost = "https://pdfmaster.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"; /// /// 用于检查网络是否可以连接互联网,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 bool IAPBeforeFunction(bool post = false) { App.IsUsedVIP= true; if (!post) { //判断本地有没有token,没有显示登录,有再判断登录状态 if (Settings.Default.AppProperties.LoginToken != "") { if (ServiceHelper.GetUser() == "401") { App.mainWindowViewModel.UserVis = Visibility.Collapsed; App.mainWindowViewModel.LoginVis = Visibility.Visible; App.mainWindowViewModel.OphVis = Visibility.Visible; if (Settings.Default.UserDate.IsLoginoff == false) { App.mainWindowViewModel.OpenLoginoff(); Settings.Default.UserDate.IsLoginoff = true; Settings.Default.Save(); } } } else { App.mainWindowViewModel.UserVis = Visibility.Collapsed; App.mainWindowViewModel.LoginVis = Visibility.Visible; App.mainWindowViewModel.OphVis = Visibility.Visible; } } //付费锁 //删掉 Settings.Default.UserDate.isInFreeUseTime == false,没有试用期了; if (!App.IsLogin) { if(Settings.Default.UserDate.Email=="") { App.mainWindowViewModel.OpenRegister(); return false; } else { App.mainWindowViewModel.OpenLogin(); return false; } } return true; } //超时同步为20秒 /// /// 用户信息获取 /// /// public static String GetUser() { 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(); } Console.WriteLine(responseData); JToken jToken; if(jobject.TryGetValue("msg" ,out jToken)==false) { 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) { App.mainWindowViewModel.UpgradeVis = Visibility.Collapsed; } else { App.mainWindowViewModel.UpgradeVis = Visibility.Visible; } #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) { App.IsLogin = false; return "401"; } 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 { 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; 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") { 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; 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; 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(); } return jobject["code"].ToObject().ToLower(); } } catch { return "300"; } } } }