ServiceHelper.cs 49 KB

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