ServiceHelper.cs 48 KB

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