ServiceHelper.cs 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263
  1. using Dragablz;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using PDF_Master.Model;
  5. using PDF_Master.Properties;
  6. using PDF_Master.ViewModels;
  7. using PDF_Master.Views;
  8. using Prism.Services.Dialogs;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Globalization;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Management;
  15. using System.Net;
  16. using System.Runtime.InteropServices;
  17. using System.Security.Cryptography;
  18. using System.Text;
  19. using System.Text.RegularExpressions;
  20. using System.Threading.Tasks;
  21. using System.Windows;
  22. namespace PDF_Master.Helper
  23. {
  24. /// <summary>
  25. /// 注册登陆相关的工具类
  26. /// </summary>
  27. ///
  28. public static class ServiceHelper
  29. {
  30. public static bool IsLogin=false;
  31. public static string ALLPassword = "";
  32. public static string access_token = "";
  33. public static string outemail = "";
  34. public static string outcode = "";
  35. public static string outregister = "";
  36. public static string outlogin = "";
  37. public static string code = "";
  38. public static string okcode = "";
  39. public static string remsg = "";
  40. public static string state = "";
  41. public static string AppCode = "com.brother.pdfreaderprofree.windows";
  42. #if DEBUG
  43. //测试环境
  44. public static string RequestHost = "http://139.196.160.101:8081";
  45. #else
  46. //正式环境
  47. public static string RequestHost = "https://pdfmaster.pdfreaderpro.com";
  48. #endif
  49. /// <summary>
  50. /// 验证邮箱
  51. /// </summary>
  52. public static string OKemailUrl = "/pdf-office-sso/auth/validUser";
  53. /// <summary>
  54. /// 验证验证码
  55. /// </summary>
  56. public static string OKcodeUrl = "/pdf-office-sso/auth/isEmailCodeValid";
  57. /// <summary>
  58. /// 发送验证码
  59. /// </summary>
  60. public static string GetcodeUrl = "/pdf-office-sso/auth/getVerifyCode";
  61. /// <summary>
  62. /// 注册邮箱
  63. /// </summary>
  64. public static string registerUrl = "/pdf-office-sso/auth/emailRegister";
  65. /// <summary>
  66. /// /登录
  67. /// </summary>
  68. public static string LoginUrl = "/pdf-office-sso/auth/emailLogin";
  69. /// <summary>
  70. /// 登出
  71. /// </summary>
  72. public static string LogoutUrl = "/pdf-office-sso/user/logout";
  73. /// <summary>
  74. /// 注销
  75. /// </summary>
  76. public static string UseroutUrl = "/pdf-office-sso/user/logOffForUser";
  77. /// <summary>
  78. /// 重置密码
  79. /// </summary>
  80. public static string RebirthUrl = "/pdf-office-sso/auth/resetPassword";
  81. /// <summary>
  82. /// 获取用户信息
  83. /// </summary>
  84. public static string GetUserUrl = "/pdf-office-sso/user/me";
  85. /// <summary>
  86. /// 收集软件启动数据
  87. /// </summary>
  88. public static string DeviceLogUrl = "/pdf-office-account/deviceLog/create";
  89. /// <summary>
  90. /// 设备是否被自动登出
  91. /// </summary>
  92. public static string CheckDeviceStatusUrl = "/pdf-office-sso/auth/checkDeviceStatus";
  93. /// <summary>
  94. /// 用于检查网络是否可以连接互联网,true表示连接成功,false表示连接失败
  95. /// </summary>
  96. /// <returns></returns>
  97. [DllImport("wininet.dll")]
  98. private extern static bool InternetGetConnectedState(int Description, int ReservedValue);
  99. public static bool IsConnectInternet()
  100. {
  101. int Description = 0;
  102. return InternetGetConnectedState(Description, 0);
  103. }
  104. private static string computerInfo;
  105. /// <summary>
  106. /// 电脑品牌信息
  107. /// </summary>
  108. public static string ComputerInfo
  109. {
  110. get
  111. {
  112. if (computerInfo == null)
  113. {
  114. computerInfo = GetComputerInfo();
  115. }
  116. return computerInfo;
  117. }
  118. set { computerInfo = value; }
  119. }
  120. private static string systemInfo;
  121. /// <summary>
  122. /// 系统信息
  123. /// </summary>
  124. public static string SystemInfo
  125. {
  126. get
  127. {
  128. if (systemInfo == null)
  129. {
  130. systemInfo = GetSystemInfo();
  131. }
  132. return systemInfo;
  133. }
  134. set { systemInfo = value; }
  135. }
  136. private static string GetSystemInfo()
  137. {
  138. try
  139. {
  140. string s = "";
  141. SelectQuery sq = new SelectQuery("Win32_OperatingSystem");
  142. ManagementObjectSearcher mos = new ManagementObjectSearcher(sq);
  143. ManagementObjectCollection moc = mos.Get();
  144. foreach (ManagementObject mo in moc)
  145. {
  146. s = mo.Properties["Version"].Value.ToString();
  147. }
  148. moc.Dispose();
  149. sq = null;
  150. return s;
  151. }
  152. catch { return ""; }
  153. }
  154. private static string GetComputerInfo()
  155. {
  156. try
  157. {
  158. string s = "";
  159. System.Windows.Controls.TextBox text = new System.Windows.Controls.TextBox();
  160. SelectQuery sq = new SelectQuery("Win32_ComputerSystem");
  161. ManagementObjectSearcher mos = new ManagementObjectSearcher(sq);
  162. ManagementObjectCollection moc = mos.Get();
  163. foreach (ManagementObject mo in moc)
  164. {
  165. s = mo.Properties["Manufacturer"].Value + " " + mo.Properties["Model"].Value;
  166. }
  167. moc.Dispose();
  168. sq = null;
  169. return s;
  170. }
  171. catch { return ""; }
  172. }
  173. /// <summary>
  174. /// 操作系统生成的UUID,用于获取虚拟机用户的设备识别码
  175. /// </summary>
  176. /// <returns></returns>
  177. public static string GetUUID()
  178. {
  179. string systemId = null;
  180. using (ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_ComputerSystemProduct"))
  181. {
  182. foreach (var item in mos.Get())
  183. {
  184. systemId = item["UUID"].ToString();
  185. }
  186. }
  187. return systemId;
  188. }
  189. /// <summary>
  190. /// 主板编号
  191. /// </summary>
  192. /// <returns></returns>
  193. public static string GetBoardId()
  194. {
  195. var st = string.Empty;
  196. var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
  197. foreach (var o in mos.Get())
  198. {
  199. var mo = (ManagementObject)o;
  200. st = mo["SerialNumber"].ToString();
  201. }
  202. return st;
  203. }
  204. /// <summary>
  205. /// 获取设备唯一ID
  206. /// </summary>
  207. /// <returns></returns>
  208. public static string GetDeviceSerialNumber()
  209. {
  210. StringBuilder DeviceBuilder = new StringBuilder();
  211. bool IsVirtual = false;
  212. string boardId = GetBoardId();
  213. string uuid = GetUUID();
  214. //判断是否是虚拟机用户
  215. if (boardId.ToLower() == "" || boardId.ToLower() == "none")
  216. {
  217. if (string.IsNullOrEmpty(uuid) || uuid.ToLower() == "none")
  218. return string.Empty;
  219. else
  220. IsVirtual = true;
  221. }
  222. //真实机器用户 用主板id作为唯一识别码
  223. if (!IsVirtual)
  224. {
  225. DeviceBuilder.Append(boardId);
  226. }
  227. else
  228. {
  229. DeviceBuilder.Append(uuid);
  230. }
  231. MD5 md5 = MD5.Create();
  232. List<byte> charbytes = new List<byte>();
  233. foreach (char code in DeviceBuilder.ToString().ToArray())
  234. {
  235. charbytes.Add((byte)code);
  236. }
  237. byte[] md5Array = md5.ComputeHash(charbytes.ToArray());
  238. DeviceBuilder = new StringBuilder();
  239. foreach (var code in md5Array)
  240. {
  241. DeviceBuilder.Append(code.ToString("X2"));
  242. }
  243. return DeviceBuilder.ToString();
  244. }
  245. /// <summary>
  246. /// 获取设备系统版本
  247. /// </summary>
  248. /// <returns></returns>
  249. public static string GetSystemVersionNumber()
  250. {
  251. var st = string.Empty;
  252. try
  253. {
  254. var mc = new ManagementClass("Win32_OperatingSystem");
  255. var moc = mc.GetInstances();
  256. foreach (var o in moc)
  257. {
  258. var mo = (ManagementObject)o;
  259. st = mo.Properties["Version"].Value.ToString();
  260. if (st != string.Empty)
  261. {
  262. break;
  263. }
  264. }
  265. }
  266. catch (Exception ex)
  267. {
  268. }
  269. return st;
  270. }
  271. /// <summary>
  272. /// 高级功能前弹出比较表
  273. /// </summary>
  274. /// <param name="post">是否请求服务器</param>
  275. public static bool IAPBeforeFunction(bool post = false)
  276. {
  277. (App.mainWindowViewModel.SelectedItem.DataContext as MainContentViewModel).IsUsedVIP=true;
  278. if (!post)
  279. {
  280. //判断本地有没有token,没有显示登录,有再判断登录状态
  281. if (Settings.Default.AppProperties.LoginToken != "")
  282. {
  283. if (ServiceHelper.GetUser() == "330"|| ServiceHelper.GetUser() == "304")
  284. {
  285. App.mainWindowViewModel.UserVis = Visibility.Collapsed;
  286. App.mainWindowViewModel.LoginVis = Visibility.Visible;
  287. App.mainWindowViewModel.OphVis = Visibility.Visible;
  288. if (Settings.Default.UserDate.IsLoginoff == false)
  289. {
  290. App.mainWindowViewModel.OpenLoginoff();
  291. Settings.Default.UserDate.IsLoginoff = true;
  292. Settings.Default.Save();
  293. }
  294. }
  295. }
  296. else
  297. {
  298. App.mainWindowViewModel.UserVis = Visibility.Collapsed;
  299. App.mainWindowViewModel.LoginVis = Visibility.Visible;
  300. App.mainWindowViewModel.OphVis = Visibility.Visible;
  301. }
  302. }
  303. //付费锁
  304. //删掉 Settings.Default.UserDate.isInFreeUseTime == false,没有试用期了;
  305. if (!App.IsLogin)
  306. {
  307. if(Settings.Default.UserDate.Email=="")
  308. {
  309. App.mainWindowViewModel.OpenRegister();
  310. return false;
  311. }
  312. else
  313. {
  314. App.mainWindowViewModel.OpenLogin();
  315. return false;
  316. }
  317. }
  318. return true;
  319. }
  320. //超时同步为20秒
  321. /// <summary>
  322. /// 用户信息获取
  323. /// </summary>
  324. /// <returns></returns>
  325. public static String GetUser()
  326. {
  327. HttpWebResponse response = null;
  328. ServicePointManager.DefaultConnectionLimit = 200;
  329. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + GetUserUrl + "");
  330. request.Method = "Get";
  331. request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}");
  332. request.ContentType = "text/html;charset=UTF-8";
  333. //request.Accept = "application/vnd.api+json;version=1";
  334. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  335. request.Timeout = 20000;
  336. request.ServicePoint.Expect100Continue = false;
  337. try
  338. {
  339. response = (HttpWebResponse)request.GetResponse();
  340. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  341. {
  342. string responseData = reader.ReadToEnd();
  343. Console.WriteLine(responseData);
  344. reader.Close();
  345. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  346. if (response != null)
  347. {
  348. response.Close();
  349. }
  350. if (request != null)
  351. {
  352. request.Abort();
  353. }
  354. Console.WriteLine(responseData);
  355. JToken jToken;
  356. if (jobject.TryGetValue("msg", out jToken) == false)
  357. {
  358. App.IsLogin = true;
  359. Settings.Default.UserDate.Email= jobject["email"].ToObject<string>().ToLower();
  360. Settings.Default.UserDate.id= jobject["id"].ToObject<string>().ToLower();
  361. JArray subscriptionInfoList = (JArray)jobject["subscriptionInfoList"];
  362. foreach (JToken info in subscriptionInfoList)
  363. {
  364. if ((int)info["platform"] == 2)
  365. {
  366. Settings.Default.UserDate.subscribeid = (string)info["id"];
  367. Settings.Default.UserDate.subscribeuserid = (string)info["userId"];
  368. Settings.Default.UserDate.subscribeplatform = (int)info["platform"];
  369. Settings.Default.UserDate.subscribestatus = (int)info["status"];
  370. if (Settings.Default.UserDate.subscribestatus > 0)
  371. {
  372. Settings.Default.UserDate.subscribeendDate = (string)info["endDate"];
  373. Settings.Default.UserDate.subscribepayType = (int)info["payType"];
  374. }
  375. }
  376. }
  377. //此处为主页UPgread按钮的Visible
  378. if (Settings.Default.UserDate.subscribestatus == 1)
  379. {
  380. for (int i = 0; i < App.Current.Windows.Count; i++)
  381. {
  382. MainWindow win = App.Current.Windows[i] as MainWindow;
  383. if (win != null&& win.DataContext!=null)
  384. {
  385. (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Collapsed;
  386. (win.DataContext as MainWindowViewModel).Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1);
  387. }
  388. }
  389. }
  390. else
  391. {
  392. for (int i = 0; i < App.Current.Windows.Count; i++)
  393. {
  394. MainWindow win = App.Current.Windows[i] as MainWindow;
  395. if (win != null&& win.DataContext!=null)
  396. {
  397. (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible;
  398. (win.DataContext as MainWindowViewModel).Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1);
  399. }
  400. }
  401. }
  402. #region 试用策略
  403. //Settings.Default.UserDate.isInFreeUseTime= jobject["isInFreeUseTime"].ToObject<bool>();
  404. //Settings.Default.UserDate.freeDate= jobject["freeDate"].ToObject<string>().ToLower();
  405. //if(DateTime.Parse(Settings.Default.UserDate.freeDate)<=DateTime.Now)
  406. //{
  407. // Settings.Default.UserDate.isInFreeUseTime = false;
  408. //}
  409. #endregion
  410. App.mainWindowViewModel.Useremailchar = Settings.Default.UserDate.Email.Substring(0, 1);
  411. Settings.Default.Save();
  412. return "ture";
  413. }
  414. else
  415. {
  416. return "false";
  417. }
  418. }
  419. }
  420. catch (System.Net.WebException e)
  421. {
  422. int statusCode = 0;
  423. if (e.Response is HttpWebResponse)
  424. {
  425. //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确
  426. statusCode = (int)((HttpWebResponse)e.Response).StatusCode;
  427. }
  428. //试用策略注释
  429. //if (DateTime.Parse(Settings.Default.UserDate.freeDate) <= DateTime.Now)
  430. //{
  431. // Settings.Default.UserDate.isInFreeUseTime = false;
  432. //}
  433. Console.WriteLine(e.Message);
  434. //无权限
  435. if (Settings.Default.AppProperties.LoginToken == "")
  436. return "No Token";
  437. else if(statusCode == 401)
  438. {
  439. if(CheckDeviceStatusout()=="330")
  440. {
  441. App.IsLogin = false;
  442. return "330";
  443. }
  444. else
  445. {
  446. return "304";
  447. }
  448. }
  449. else return "300";
  450. }
  451. catch
  452. {
  453. //试用策略注释
  454. //if (DateTime.Parse(Settings.Default.UserDate.freeDate) <= DateTime.Now)
  455. //{
  456. // Settings.Default.UserDate.isInFreeUseTime = false;
  457. //}
  458. return "300";
  459. }
  460. }
  461. /// <summary>
  462. /// 验证email格式
  463. /// </summary>
  464. /// <param name="intemail"></param>
  465. /// <param name="validType"></param>
  466. /// <returns></returns>
  467. public static String Ok_email(string intemail, string validType)
  468. {
  469. HttpWebResponse response = null;
  470. ServicePointManager.DefaultConnectionLimit = 200;
  471. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + OKemailUrl);
  472. request.Method = "Post";
  473. request.ContentType = "application/json";
  474. //request.Accept = "application/vnd.api+json;version=1";
  475. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  476. request.Timeout = 20000;
  477. request.ServicePoint.Expect100Continue = false;
  478. StringWriter sw = new StringWriter();
  479. using (JsonWriter writer = new JsonTextWriter(sw))
  480. {
  481. writer.WriteStartObject();
  482. writer.WritePropertyName("appId");
  483. writer.WriteValue(16);
  484. writer.WritePropertyName("platformType");
  485. writer.WriteValue(0);
  486. writer.WritePropertyName("username");
  487. writer.WriteValue(intemail);
  488. writer.WritePropertyName("validType");
  489. writer.WriteValue(validType);
  490. writer.WriteEndObject();
  491. }
  492. try
  493. {
  494. string postBody = sw.ToString();
  495. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  496. {
  497. writer.Write(postBody);
  498. writer.Close();
  499. }
  500. response = (HttpWebResponse)request.GetResponse();
  501. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  502. {
  503. string responseData = reader.ReadToEnd();
  504. Console.WriteLine(responseData);
  505. reader.Close();
  506. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  507. //outemail = jobject["msg"].ToObject<string>().ToLower();
  508. if (response != null)
  509. {
  510. response.Close();
  511. }
  512. if (request != null)
  513. {
  514. request.Abort();
  515. }
  516. return jobject["code"].ToObject<string>().ToLower();
  517. }
  518. }
  519. catch
  520. {
  521. return "300";
  522. }
  523. }
  524. /// <summary>
  525. /// 获取验证码
  526. /// </summary>
  527. /// <param name="action"></param>
  528. /// <param name="email"></param>
  529. /// <returns></returns>
  530. public static string Get_code(string action, string email)
  531. {
  532. string post = $"?action={action}&appId=16&receiver={email}&type=0";
  533. HttpWebResponse response = null;
  534. ServicePointManager.DefaultConnectionLimit = 200;
  535. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + GetcodeUrl + post);
  536. request.Method = "Get";
  537. request.ContentType = "text/html;charset=UTF-8";
  538. //request.Accept = "application/vnd.api+json;version=1";
  539. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  540. request.Timeout = 20000;
  541. request.ServicePoint.Expect100Continue = false;
  542. try
  543. {
  544. response = (HttpWebResponse)request.GetResponse();
  545. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  546. {
  547. string responseData = reader.ReadToEnd();
  548. Console.WriteLine(responseData);
  549. reader.Close();
  550. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  551. if (response != null)
  552. {
  553. response.Close();
  554. }
  555. if (request != null)
  556. {
  557. request.Abort();
  558. }
  559. return jobject["code"].ToObject<string>().ToLower();
  560. }
  561. }
  562. catch
  563. {
  564. return "300";
  565. }
  566. }
  567. /// <summary>
  568. /// 验证验证码是否正确
  569. /// </summary>
  570. /// <param name="email"></param>
  571. /// <param name="code"></param>
  572. /// <param name="type"></param>
  573. /// <returns></returns>
  574. public static String Ok_code(string email, string code, string type)
  575. {
  576. string post = $"?account={email}&code={code}&type={type}&appId=16";
  577. HttpWebResponse response = null;
  578. ServicePointManager.DefaultConnectionLimit = 200;
  579. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + OKcodeUrl + post);
  580. request.Method = "Get";
  581. request.ContentType = "text/html;charset=UTF-8";
  582. //request.Accept = "application/vnd.api+json;version=1";
  583. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  584. request.Timeout = 20000;
  585. request.ServicePoint.Expect100Continue = false;
  586. try
  587. {
  588. response = (HttpWebResponse)request.GetResponse();
  589. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  590. {
  591. string responseData = reader.ReadToEnd();
  592. Console.WriteLine(responseData);
  593. reader.Close();
  594. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  595. if (response != null)
  596. {
  597. response.Close();
  598. }
  599. if (request != null)
  600. {
  601. request.Abort();
  602. }
  603. return jobject["code"].ToObject<string>().ToLower();
  604. }
  605. }
  606. catch
  607. {
  608. return "300";
  609. }
  610. }
  611. /// <summary>
  612. /// 注册账号
  613. /// </summary>
  614. /// <param name="intemail"></param>
  615. /// <param name="intpassword"></param>
  616. /// <param name="intcode"></param>
  617. /// <param name="uuid"></param>
  618. /// <returns></returns>
  619. public static String Register_email(string intemail, string intpassword, string intcode, string uuid)
  620. {
  621. HttpWebResponse response = null;
  622. ServicePointManager.DefaultConnectionLimit = 200;
  623. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + registerUrl);
  624. request.Method = "Post";
  625. request.ContentType = "application/json";
  626. //request.Accept = "application/vnd.api+json;version=1";
  627. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  628. request.Timeout = 20000;
  629. request.ServicePoint.Expect100Continue = false;
  630. StringWriter sw = new StringWriter();
  631. using (JsonWriter writer = new JsonTextWriter(sw))
  632. {
  633. writer.WriteStartObject();
  634. writer.WritePropertyName("appId");
  635. writer.WriteValue(16);
  636. writer.WritePropertyName("deviceSign");
  637. writer.WriteValue(uuid);
  638. writer.WritePropertyName("password");
  639. writer.WriteValue(intpassword);
  640. writer.WritePropertyName("platformType");
  641. writer.WriteValue(0);
  642. writer.WritePropertyName("username");
  643. writer.WriteValue(intemail);
  644. writer.WritePropertyName("verifyCode");
  645. writer.WriteValue(intcode);
  646. writer.WritePropertyName("model");
  647. writer.WriteValue("windows");
  648. writer.WriteEndObject();
  649. }
  650. try
  651. {
  652. string postBody = sw.ToString();
  653. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  654. {
  655. writer.Write(postBody);
  656. writer.Close();
  657. }
  658. response = (HttpWebResponse)request.GetResponse();
  659. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  660. {
  661. string responseData = reader.ReadToEnd();
  662. Console.WriteLine(responseData);
  663. reader.Close();
  664. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  665. if (response != null)
  666. {
  667. response.Close();
  668. }
  669. if (request != null)
  670. {
  671. request.Abort();
  672. }
  673. if (jobject["code"].ToObject<string>().ToLower() == "200")
  674. {
  675. App.IsLogin =true;
  676. for (int i = 0; i < App.Current.Windows.Count; i++)
  677. {
  678. MainWindow win = App.Current.Windows[i] as MainWindow;
  679. if (win != null)
  680. {
  681. (win.DataContext as MainWindowViewModel).UserVis = Visibility.Visible;
  682. (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Collapsed;
  683. (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed;
  684. }
  685. }
  686. Settings.Default.UserDate.Email = intemail;
  687. Settings.Default.UserDate.IsLoginoff = false;
  688. access_token = jobject["result"]["access_token"].ToObject<string>().ToLower();
  689. Settings.Default.AppProperties.LoginToken = jobject["result"]["access_token"].ToObject<string>().ToLower();
  690. Settings.Default.Save();
  691. GetUser();
  692. }
  693. //return jobject["code"].ToObject<string>().ToLower();
  694. return "200";
  695. }
  696. }
  697. catch
  698. {
  699. return "300";
  700. }
  701. }
  702. /// <summary>
  703. /// 登录
  704. /// </summary>
  705. /// <param name="intemail"></param>
  706. /// <param name="intpassword"></param>
  707. /// <param name="uuid"></param>
  708. /// <returns></returns>
  709. public static String Login(string intemail, string intpassword, string uuid)
  710. {
  711. string postBody = $"?appId=16&deviceSign={uuid}&email={intemail}&password={intpassword}&platformType=0&model=windows";
  712. HttpWebResponse response = null;
  713. ServicePointManager.DefaultConnectionLimit = 200;
  714. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + LoginUrl + postBody);
  715. request.Method = "Post";
  716. request.ContentType = "application/x-www-form-urlencoded";
  717. //request.Accept = "application/vnd.api+json;version=1";
  718. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  719. request.Timeout = 20000;
  720. request.ServicePoint.Expect100Continue = false;
  721. try
  722. {
  723. response = (HttpWebResponse)request.GetResponse();
  724. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  725. {
  726. string responseData = reader.ReadToEnd();
  727. Console.WriteLine(responseData);
  728. reader.Close();
  729. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  730. if (response != null)
  731. {
  732. response.Close();
  733. }
  734. if (request != null)
  735. {
  736. request.Abort();
  737. }
  738. if (jobject["code"].ToObject<string>().ToLower() == "200")
  739. {
  740. //ListenerSubscription();
  741. for (int i = 0; i < App.Current.Windows.Count; i++)
  742. {
  743. MainWindow win = App.Current.Windows[i] as MainWindow;
  744. if (win != null)
  745. {
  746. (win.DataContext as MainWindowViewModel).UserVis = Visibility.Visible;
  747. (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Collapsed;
  748. (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed;
  749. }
  750. }
  751. App.IsLogin = true;
  752. Settings.Default.UserDate.Email = intemail;
  753. Settings.Default.UserDate.IsLoginoff = false;
  754. access_token = jobject["result"]["access_token"].ToObject<string>().ToLower();
  755. Settings.Default.AppProperties.LoginToken = jobject["result"]["access_token"].ToObject<string>().ToLower();
  756. Settings.Default.Save();
  757. GetUser();
  758. }
  759. return jobject["code"].ToObject<string>().ToLower();
  760. }
  761. }
  762. catch
  763. {
  764. return "300";
  765. }
  766. }
  767. /// <summary>
  768. /// 登出
  769. /// </summary>
  770. /// <param name="uuid"></param>
  771. public static void Logout(string uuid)
  772. {
  773. string postBody = $"?deviceSign={uuid}&appId=16";
  774. HttpWebResponse response = null;
  775. ServicePointManager.DefaultConnectionLimit = 200;
  776. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + LogoutUrl + postBody);
  777. request.Method = "Post";
  778. request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}");
  779. request.ContentType = "application/x-www-form-urlencoded";
  780. //request.Accept = "application/vnd.api+json;version=1";
  781. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  782. request.Timeout = 20000;
  783. request.ServicePoint.Expect100Continue = false;
  784. try
  785. {
  786. response = (HttpWebResponse)request.GetResponse();
  787. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  788. {
  789. string responseData = reader.ReadToEnd();
  790. Console.WriteLine(responseData);
  791. reader.Close();
  792. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  793. App.IsLogin = false;
  794. Settings.Default.UserDate.subscribestatus = -1;
  795. Settings.Default.UserDate.subscribepayType = 0;
  796. App.mainWindowViewModel.UpgradeVis = Visibility.Visible;
  797. for (int i = 0; i < App.Current.Windows.Count; i++)
  798. {
  799. MainWindow win = App.Current.Windows[i] as MainWindow;
  800. if (win != null)
  801. {
  802. (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed;
  803. (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible;
  804. (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed;
  805. (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible;
  806. }
  807. }
  808. if (response != null)
  809. {
  810. response.Close();
  811. }
  812. if (request != null)
  813. {
  814. request.Abort();
  815. }
  816. }
  817. }
  818. catch
  819. {
  820. }
  821. }
  822. /// <summary>
  823. /// 注销
  824. /// </summary>
  825. /// <param name="code"></param>
  826. /// <returns></returns>
  827. public static String Usergout(string code)
  828. {
  829. string postBody = $"?code={code}&appId=16";
  830. HttpWebResponse response = null;
  831. ServicePointManager.DefaultConnectionLimit = 200;
  832. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + UseroutUrl + postBody);
  833. request.Method = "Post";
  834. request.Headers.Add("Authorization", $"Bearer {Settings.Default.AppProperties.LoginToken}");
  835. request.ContentType = "application/x-www-form-urlencoded";
  836. //request.Accept = "application/vnd.api+json;version=1";
  837. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  838. request.Timeout = 20000;
  839. request.ServicePoint.Expect100Continue = false;
  840. try
  841. {
  842. response = (HttpWebResponse)request.GetResponse();
  843. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  844. {
  845. string responseData = reader.ReadToEnd();
  846. Console.WriteLine(responseData);
  847. reader.Close();
  848. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  849. App.IsLogin = false;
  850. Settings.Default.UserDate.subscribestatus = -1;
  851. Settings.Default.UserDate.subscribepayType = 0;
  852. for (int i = 0; i < App.Current.Windows.Count; i++)
  853. {
  854. MainWindow win = App.Current.Windows[i] as MainWindow;
  855. if (win != null)
  856. {
  857. (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed;
  858. (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible;
  859. (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed;
  860. (win.DataContext as MainWindowViewModel).UpgradeVis = Visibility.Visible;
  861. }
  862. }
  863. App.mainWindowViewModel.UpgradeVis = Visibility.Visible;
  864. if (response != null)
  865. {
  866. response.Close();
  867. }
  868. if (request != null)
  869. {
  870. request.Abort();
  871. }
  872. return jobject["code"].ToObject<string>().ToLower();
  873. }
  874. }
  875. catch
  876. {
  877. return "300";
  878. }
  879. }
  880. /// <summary>
  881. /// 重置密码
  882. /// </summary>
  883. /// <param name="intemail"></param>
  884. /// <param name="firstpassword"></param>
  885. /// <param name="secondPassword"></param>
  886. /// <param name="intcode"></param>
  887. /// <returns></returns>
  888. public static String Rebirth(string intemail, string firstpassword, string secondPassword, string intcode)
  889. {
  890. HttpWebResponse response = null;
  891. ServicePointManager.DefaultConnectionLimit = 200;
  892. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + RebirthUrl);
  893. request.Method = "Post";
  894. request.ContentType = "application/json";
  895. //request.Accept = "application/vnd.api+json;version=1";
  896. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  897. request.Timeout = 20000;
  898. request.ServicePoint.Expect100Continue = false;
  899. StringWriter sw = new StringWriter();
  900. using (JsonWriter writer = new JsonTextWriter(sw))
  901. {
  902. writer.WriteStartObject();
  903. writer.WritePropertyName("account");
  904. writer.WriteValue(intemail);
  905. writer.WritePropertyName("appId");
  906. writer.WriteValue(16);
  907. writer.WritePropertyName("firstPassword");
  908. writer.WriteValue(firstpassword);
  909. writer.WritePropertyName("platformType");
  910. writer.WriteValue(0);
  911. writer.WritePropertyName("secondPassword");
  912. writer.WriteValue(secondPassword);
  913. writer.WritePropertyName("verifyCode");
  914. writer.WriteValue(intcode);
  915. writer.WriteEndObject();
  916. }
  917. try
  918. {
  919. string postBody = sw.ToString();
  920. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  921. {
  922. writer.Write(postBody);
  923. writer.Close();
  924. }
  925. response = (HttpWebResponse)request.GetResponse();
  926. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  927. {
  928. string responseData = reader.ReadToEnd();
  929. Console.WriteLine(responseData);
  930. reader.Close();
  931. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  932. if (response != null)
  933. {
  934. response.Close();
  935. }
  936. if (request != null)
  937. {
  938. request.Abort();
  939. }
  940. for (int i = 0; i < App.Current.Windows.Count; i++)
  941. {
  942. MainWindow win = App.Current.Windows[i] as MainWindow;
  943. if (win != null)
  944. {
  945. (win.DataContext as MainWindowViewModel).UserVis = Visibility.Collapsed;
  946. (win.DataContext as MainWindowViewModel).LoginVis = Visibility.Visible;
  947. (win.DataContext as MainWindowViewModel).RegisterVis = Visibility.Collapsed;
  948. }
  949. }
  950. return jobject["code"].ToObject<string>().ToLower();
  951. }
  952. }
  953. catch
  954. {
  955. return "300";
  956. }
  957. }
  958. /// <summary>
  959. /// 设备是否被自动登出
  960. /// </summary>
  961. public static String CheckDeviceStatusout()
  962. {
  963. string postBody = $"?appId=16&deviceSign={GetDeviceSerialNumber()}";
  964. HttpWebResponse response = null;
  965. ServicePointManager.DefaultConnectionLimit = 200;
  966. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + CheckDeviceStatusUrl + postBody);
  967. request.Method = "Post";
  968. request.ContentType = "application/x-www-form-urlencoded";
  969. //request.Accept = "application/vnd.api+json;version=1";
  970. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  971. request.Timeout = 20000;
  972. request.ServicePoint.Expect100Continue = false;
  973. try
  974. {
  975. response = (HttpWebResponse)request.GetResponse();
  976. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  977. {
  978. string responseData = reader.ReadToEnd();
  979. Console.WriteLine(responseData);
  980. reader.Close();
  981. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  982. if (response != null)
  983. {
  984. response.Close();
  985. }
  986. if (request != null)
  987. {
  988. request.Abort();
  989. }
  990. return jobject["code"].ToObject<string>().ToLower();
  991. }
  992. }
  993. catch
  994. {
  995. return "300";
  996. }
  997. }
  998. /// <summary>
  999. ///上传设备启动信息到服务端
  1000. /// </summary>
  1001. public static void CreateDeviceLog()
  1002. {
  1003. string url = RequestHost + DeviceLogUrl;
  1004. try
  1005. {
  1006. HttpWebResponse response = null;
  1007. ServicePointManager.DefaultConnectionLimit = 200;
  1008. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestHost + DeviceLogUrl);
  1009. request.Method = "Post";
  1010. request.ContentType = "application/json";
  1011. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  1012. request.Timeout = 20000;
  1013. request.ServicePoint.Expect100Continue = false;
  1014. StringWriter sw = new StringWriter();
  1015. using (JsonWriter writer = new JsonTextWriter(sw))
  1016. {
  1017. writer.WriteStartObject();
  1018. writer.WritePropertyName("appVersion");
  1019. writer.WriteValue(App.Version);
  1020. //产品ID Mac21 Windows 22
  1021. writer.WritePropertyName("productId");
  1022. writer.WriteValue(22);
  1023. writer.WritePropertyName("os");
  1024. writer.WriteValue(GetSystemVersionNumber());
  1025. writer.WritePropertyName("timeZone");
  1026. writer.WriteValue(TimeZoneInfo.Local.DisplayName);
  1027. writer.WritePropertyName("language");
  1028. writer.WriteValue(CultureInfo.CurrentCulture.Name);
  1029. //平台 Mac 0 Windows 1
  1030. writer.WritePropertyName("platform");
  1031. writer.WriteValue(1);
  1032. writer.WritePropertyName("createdAt");
  1033. writer.WriteValue(DateTime.Now.ToFileTime());
  1034. writer.WritePropertyName("appId");
  1035. writer.WriteValue(16);
  1036. writer.WritePropertyName("model");
  1037. writer.WriteValue("Windows");
  1038. writer.WritePropertyName("uniqueSn");
  1039. writer.WriteValue(GetDeviceSerialNumber());
  1040. writer.WritePropertyName("updatedAt");
  1041. writer.WriteValue(DateTime.Now.ToFileTime());
  1042. writer.WriteEndObject();
  1043. }
  1044. string postBody = sw.ToString();
  1045. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  1046. {
  1047. writer.Write(postBody);
  1048. writer.Close();
  1049. }
  1050. response = (HttpWebResponse)request.GetResponse();
  1051. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  1052. {
  1053. string responseData = reader.ReadToEnd();
  1054. Console.WriteLine(responseData);
  1055. reader.Close();
  1056. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  1057. if (response != null)
  1058. {
  1059. response.Close();
  1060. }
  1061. if (request != null)
  1062. {
  1063. request.Abort();
  1064. }
  1065. if (jobject["code"].ToObject<string>().ToLower() == "200")
  1066. {
  1067. Console.WriteLine("软件启动信息上传成功");
  1068. }
  1069. }
  1070. }
  1071. catch { }
  1072. }
  1073. //监听订阅行为
  1074. public static void ListenerSubscription()
  1075. {
  1076. var listener = new HttpListener();
  1077. string url = "http://139.196.160.101:8081/";
  1078. try
  1079. {
  1080. // 监听的 URL,可以指定多个 URL
  1081. listener.Prefixes.Add(url);
  1082. // 启动 HttpListener
  1083. listener.Start();
  1084. Console.WriteLine("HTTP 服务器已启动,等待请求...");
  1085. // 循环接收请求
  1086. while (true)
  1087. {
  1088. // 等待请求并获取对应的上下文
  1089. var context = listener.GetContext();
  1090. // 处理请求,并返回响应,不需要响应时可以注释
  1091. //ProcessRequest(context);
  1092. }
  1093. }
  1094. catch (Exception ex)
  1095. {
  1096. Console.WriteLine("出现异常:" + ex.Message);
  1097. }
  1098. finally
  1099. {
  1100. // 停止 HttpListener
  1101. listener.Stop();
  1102. }
  1103. }
  1104. //监听数据响应
  1105. static void ProcessRequest(HttpListenerContext context)
  1106. {
  1107. // 获取请求对象
  1108. var request = context.Request;
  1109. // 获取响应对象
  1110. var response = context.Response;
  1111. // 设置响应内容
  1112. string responseText = "Hello, world!"; // 这里可以根据需要生成动态的响应内容
  1113. byte[] responseData = System.Text.Encoding.UTF8.GetBytes(responseText);
  1114. // 设置响应头
  1115. response.ContentType = "text/plain";
  1116. response.ContentLength64 = responseData.Length;
  1117. // 写入响应数据
  1118. response.OutputStream.Write(responseData, 0, responseData.Length);
  1119. // 关闭响应流
  1120. response.Close();
  1121. Console.WriteLine("请求已处理:{0} {1}", request.HttpMethod, request.Url);
  1122. }
  1123. }
  1124. }