V2Method.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using SufeiUtil;
  4. using SXLibrary;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data.SQLite;
  8. using System.Diagnostics;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Web;
  13. using System.Windows.Forms;
  14. using HttpHelper = SufeiUtil.HttpHelper;
  15. namespace MOKA_Factory_Tools.Business
  16. {
  17. internal class V2Method
  18. {
  19. #if DEBUG
  20. public static void Test()
  21. {
  22. MidList mid;
  23. bool bRet = GetMidInfo("http://test.scbc.qhmoka.com/scbc-server/clientType/getMessage.do", "TEST_WJF", "04-D4-C4-EE-6B-CD", null, out mid);
  24. if (bRet)
  25. {
  26. List<KeyType> key2Write;
  27. string msg;
  28. KeyInfo keys;
  29. bRet = GetMidKey(mid.host, "SN0321-test9999", "TEST_WJF", "20220321APSN9999", "BBB", null, null, out keys, out msg);
  30. List<MidAddress> midlist;
  31. GetOfflineData(mid.host, "TEST_WJF", null, out midlist);
  32. if (bRet)
  33. {
  34. Action<KeyData> SetEnable = (keydata) =>
  35. {
  36. if (keydata != null && keydata.data.Length > 0)
  37. keydata.enable = true;
  38. };
  39. SetEnable(keys.Mac);
  40. SetEnable(keys.HDCP);
  41. SetEnable(keys.DID);
  42. SetEnable(keys.HDCP22);
  43. SetEnable(keys.CI_plus);
  44. SetEnable(keys.Playready);
  45. ReportOnlineData(mid.host, "TEST_WJF", "SN0321-test9999", false, ref keys, null, out msg);
  46. ReportOfflineData(mid.host, "2022-07-18 14:40:42", "SN0321-test9999", null, null, false, "", 1000);
  47. }
  48. }
  49. }
  50. #endif
  51. /// <summary>
  52. ///
  53. /// </summary>
  54. /// <param name="url"></param>
  55. /// <param name="order"></param>
  56. /// <param name="pcmac"></param>
  57. /// <param name="sqliteConn"></param>
  58. /// <param name="mid"></param>
  59. /// <returns></returns>
  60. public static bool GetMidInfo(string url, string order, string pcmac, SQLiteConnection sqliteConn, out MidList mid)
  61. {
  62. mid = new MidList();
  63. string postData = string.Format("{{\"bid\":\"{0}\",\"mac\":\"{1}\"}}", order, pcmac);
  64. HttpHelper http = new HttpHelper();
  65. HttpItem item = new HttpItem()
  66. {
  67. URL = url,//URL这里都是测试URl必需项
  68. Encoding = Encoding.UTF8,//编码格式(utf-8,gb2312,gbk)可选项 默认类会自动识别//Encoding = Encoding.Default,
  69. Method = "post",
  70. Postdata = postData,
  71. PostEncoding = Encoding.UTF8,
  72. KeepAlive = false
  73. };
  74. item.ContentType = "application/json;charset=utf-8";
  75. System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
  76. stopwatch.Start();
  77. HttpResult result = http.GetHtml(item);
  78. stopwatch.Stop();
  79. string usingtime = stopwatch.ElapsedMilliseconds.ToString();
  80. stopwatch.Reset();
  81. string ParseText = result.Html;
  82. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  83. {
  84. Log.WriteGetKeyLog("\r\nGet MID info\r\nUsing time:" + usingtime + "ms\r\n" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + postData);
  85. }
  86. else
  87. {
  88. Log.WriteErrorLog("\r\nFail to GetMidInfo:" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + postData);
  89. CommonMethod.ReportErrormsg("Fail to GetMidInfo", result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + postData, sqliteConn);
  90. return false;
  91. }
  92. try
  93. {
  94. JObject jObject = JObject.Parse(ParseText);
  95. mid.message = jObject["message"].Value<string>();
  96. mid.code = jObject["code"].Value<string>();
  97. mid.factoryname = jObject["factoryName"].Value<string>();
  98. mid.factoryNum = jObject["factoryNum"].Value<string>();
  99. mid.version = jObject["version"].Value<string>();
  100. mid.quantity = jObject["quantity"].Value<string>();
  101. mid.projectid = jObject["projectId"].Value<string>();
  102. mid.clienttype = jObject["clientType"].Value<string>();
  103. mid.host = jObject["host"].Value<string>();
  104. mid.whiteType = jObject["whiteType"].Value<string>();
  105. object a = jObject["rokuCustomer"];
  106. if (jObject["rokuCustomer"].ToString().Length > 0)
  107. {
  108. mid.rokuCustomer = new RokuCustomer()
  109. {
  110. id = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "id").Trim(),
  111. ordernum = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "ordernum").Trim(),
  112. brand = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "brand").Trim(),
  113. region = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "region").Trim(),
  114. oemmodel = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "oemmodel").Trim(),
  115. supporturl = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "supporturl").Trim(),
  116. supportphone = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "supportphone").Trim(),
  117. productiondate = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "productiondate").Trim(),
  118. remotetype = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "remotetype").Trim(),
  119. updatetime = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "updatetime").Trim(),
  120. createtime = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "createtime").Trim(),
  121. isdelete = CommonMethod.JSON_SeleteNode(jObject["rokuCustomer"], "isdelete").Trim()
  122. };
  123. }
  124. mid.keytype = new Dictionary<string, string>();
  125. foreach (var ss in jObject["obj"]) //查找某个字段与值
  126. {
  127. mid.keytype.Add(ss["name"].Value<string>(), ss["type"].Value<string>());
  128. }
  129. if (mid.code == "1000")
  130. return true;
  131. }
  132. catch (Exception ex)
  133. {
  134. Log.WriteErrorLog("\r\nFail to parse MID info," + ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + postData);
  135. CommonMethod.ReportErrormsg("Fail to parse MID info", ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + postData, sqliteConn);
  136. MessageBox.Show("Fail to parse MID info\r\n " + ex.Message);
  137. }
  138. return false;
  139. }
  140. public static bool GetMidKey(string url, string sn, string order, string psn, string firetv_device_code, List<KeyType> key2Write, SQLiteConnection connection, out KeyInfo keys, out string msg)
  141. {
  142. msg = "";
  143. keys = new KeyInfo();
  144. string code;
  145. bool result = false;
  146. HttpHelper http = new HttpHelper();
  147. HttpItem item = new HttpItem()
  148. {
  149. Encoding = Encoding.UTF8,
  150. Method = "post",
  151. ContentType = "application/json",
  152. KeepAlive = false
  153. };
  154. // 计算函数耗时;
  155. Stopwatch watch = new Stopwatch();
  156. watch.Start();
  157. item.URL = url + "/bind/order";
  158. item.Postdata = string.Format("{{\"orderNum\":\"{0}\",\"sn\":\"{1}\",\"psn\":\"{2}\",\"orderCode\":\"{3}\",\"skipKey\":{4}}}", order, sn, psn, firetv_device_code, key2Write == null ? "[]" : JsonConvert.SerializeObject(key2Write).ToString());
  159. HttpResult httpResult = http.GetHtml(item);
  160. if (httpResult.StatusCode == System.Net.HttpStatusCode.OK)
  161. {
  162. try
  163. {
  164. JObject jObject = JObject.Parse(httpResult.Html);
  165. msg = CommonMethod.JSON_SeleteNode(jObject, "msg");
  166. code = CommonMethod.JSON_SeleteNode(jObject, "code");
  167. if (code == "0")
  168. {
  169. Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(jObject["data"].ToString());
  170. if (data != null)
  171. {
  172. Func<string, string, bool> CheckMD5 = (data, md5) =>
  173. {
  174. if (data == null)
  175. return true;
  176. if (!GetMD5.GetStrMd5(data).Equals(md5, StringComparison.OrdinalIgnoreCase))
  177. return false;
  178. return true;
  179. };
  180. if (data.ContainsKey("mac") && data.ContainsKey("mac_md5"))
  181. {
  182. keys.Mac.data = data["mac"];
  183. keys.Mac.md5 = data["mac_md5"];
  184. if (!CheckMD5(keys.Mac.data, keys.Mac.md5))
  185. {
  186. msg = string.Format("Mac Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Mac.data, keys.Mac.md5);
  187. goto end;
  188. }
  189. }
  190. if (data.ContainsKey("btMac") && data.ContainsKey("btMac_md5"))
  191. {
  192. keys.BT_MAC.data = data["btMac"];
  193. keys.BT_MAC.md5 = data["btMac_md5"];
  194. if (!CheckMD5(keys.BT_MAC.data, keys.BT_MAC.md5))
  195. {
  196. msg = string.Format("BT_MAC Key Value md5 Is Incorrect: data={0}, md5={1}", keys.BT_MAC.data, keys.BT_MAC.md5);
  197. goto end;
  198. }
  199. }
  200. if (data.ContainsKey("wifiMac") && data.ContainsKey("wifiMac_md5"))
  201. {
  202. keys.WiFi_MAC.data = data["wifiMac"];
  203. keys.WiFi_MAC.md5 = data["wifiMac_md5"];
  204. if (!CheckMD5(keys.WiFi_MAC.data, keys.WiFi_MAC.md5))
  205. {
  206. msg = string.Format("WiFi_MAC Key Value md5 Is Incorrect: data={0}, md5={1}", keys.WiFi_MAC.data, keys.WiFi_MAC.md5);
  207. goto end;
  208. }
  209. }
  210. if (data.ContainsKey("deviceid") && data.ContainsKey("deviceid_md5"))
  211. {
  212. keys.DID.data = data["deviceid"];
  213. keys.DID.md5 = data["deviceid_md5"];
  214. if (!CheckMD5(keys.DID.data, keys.DID.md5))
  215. {
  216. msg = string.Format("DID Key Value md5 Is Incorrect: data={0}, md5={1}", keys.DID.data, keys.DID.md5);
  217. goto end;
  218. }
  219. }
  220. if (data.ContainsKey("hdcp") && data.ContainsKey("hdcp_md5"))
  221. {
  222. keys.HDCP.data = data["hdcp"];
  223. keys.HDCP.md5 = data["hdcp_md5"];
  224. if (!CheckMD5(keys.HDCP.data, keys.HDCP.md5))
  225. {
  226. msg = string.Format("HDCP Key Value md5 Is Incorrect: data={0}, md5={1}", keys.HDCP.data, keys.HDCP.md5);
  227. goto end;
  228. }
  229. }
  230. if (data.ContainsKey("hdcp2") && data.ContainsKey("hdcp2_md5"))
  231. {
  232. keys.HDCP22.data = data["hdcp2"];
  233. keys.HDCP22.md5 = data["hdcp2_md5"];
  234. if (!CheckMD5(keys.HDCP22.data, keys.HDCP22.md5))
  235. {
  236. msg = string.Format("HDCP22 Key Value md5 Is Incorrect: data={0}, md5={1}", keys.HDCP22.data, keys.HDCP22.md5);
  237. goto end;
  238. }
  239. }
  240. if (data.ContainsKey("ci") && data.ContainsKey("ci_md5"))
  241. {
  242. keys.CI_plus.data = data["ci"];
  243. keys.CI_plus.md5 = data["ci_md5"];
  244. if (!CheckMD5(keys.CI_plus.data, keys.CI_plus.md5))
  245. {
  246. msg = string.Format("CI_plus Key Value md5 Is Incorrect: data={0}, md5={1}", keys.CI_plus.data, keys.CI_plus.md5);
  247. goto end;
  248. }
  249. }
  250. if (data.ContainsKey("ecp") && data.ContainsKey("ecp_md5"))
  251. {
  252. keys.ECP.data = data["ecp"];
  253. keys.ECP.md5 = data["ecp_md5"];
  254. if (!CheckMD5(keys.ECP.data, keys.ECP.md5))
  255. {
  256. msg = string.Format("ECP Key Value md5 Is Incorrect: data={0}, md5={1}", keys.ECP.data, keys.ECP.md5);
  257. goto end;
  258. }
  259. }
  260. if (data.ContainsKey("acas") && data.ContainsKey("acas_md5"))
  261. {
  262. keys.ACASKey_Data.data = data["acas"];
  263. keys.ACASKey_Data.md5 = data["acas_md5"];
  264. if (!CheckMD5(keys.ACASKey_Data.data, keys.ACASKey_Data.md5))
  265. {
  266. msg = string.Format("ACASKey_Data Key Value md5 Is Incorrect: data={0}, md5={1}", keys.ACASKey_Data.data, keys.ACASKey_Data.md5);
  267. goto end;
  268. }
  269. }
  270. if (data.ContainsKey("lek") && data.ContainsKey("lek_md5"))
  271. {
  272. keys.LEK.data = data["lek"];
  273. keys.LEK.md5 = data["lek_md5"];
  274. if (!CheckMD5(keys.LEK.data, keys.LEK.md5))
  275. {
  276. msg = string.Format("LEK Key Value md5 Is Incorrect: data={0}, md5={1}", keys.LEK.data, keys.LEK.md5);
  277. goto end;
  278. }
  279. }
  280. if (data.ContainsKey("pek") && data.ContainsKey("pek_md5"))
  281. {
  282. keys.PEK.data = data["pek"];
  283. keys.PEK.md5 = data["pek_md5"];
  284. if (!CheckMD5(keys.PEK.data, keys.PEK.md5))
  285. {
  286. msg = string.Format("PEK Key Value md5 Is Incorrect: data={0}, md5={1}", keys.PEK.data, keys.PEK.md5);
  287. goto end;
  288. }
  289. }
  290. if (data.ContainsKey("playready") && data.ContainsKey("playready_md5"))
  291. {
  292. keys.Playready.data = data["playready"];
  293. keys.Playready.md5 = data["playready_md5"];
  294. if (!CheckMD5(keys.Playready.data, keys.Playready.md5))
  295. {
  296. msg = string.Format("Playready Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Playready.data, keys.Playready.md5);
  297. goto end;
  298. }
  299. }
  300. if (data.ContainsKey("netfilx") && data.ContainsKey("netfilx_md5"))
  301. {
  302. keys.ESN.data = data["netfilx"];
  303. keys.ESN.md5 = data["netfilx_md5"];
  304. if (!CheckMD5(keys.ESN.data, keys.ESN.md5))
  305. {
  306. msg = string.Format("ESN Key Value md5 Is Incorrect: data={0}, md5={1}", keys.ESN.data, keys.ESN.md5);
  307. goto end;
  308. }
  309. }
  310. if (data.ContainsKey("hash") && data.ContainsKey("hash_md5"))
  311. {
  312. keys.Hashkey.data = data["hash"];
  313. keys.Hashkey.md5 = data["hash_md5"];
  314. if (!CheckMD5(keys.Hashkey.data, keys.Hashkey.md5))
  315. {
  316. msg = string.Format("Hashkey Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Hashkey.data, keys.Hashkey.md5);
  317. goto end;
  318. }
  319. }
  320. if (data.ContainsKey("mgk") && data.ContainsKey("mgk_md5"))
  321. {
  322. keys.MGK.data = data["mgk"];
  323. keys.MGK.md5 = data["mgk_md5"];
  324. if (!CheckMD5(keys.MGK.data, keys.MGK.md5))
  325. {
  326. msg = string.Format("MGK Key Value md5 Is Incorrect: data={0}, md5={1}", keys.MGK.data, keys.MGK.md5);
  327. goto end;
  328. }
  329. }
  330. if (data.ContainsKey("youtube") && data.ContainsKey("youtube_md5"))
  331. {
  332. keys.YouTube_KEY.data = data["youtube"];
  333. keys.YouTube_KEY.md5 = data["youtube_md5"];
  334. if (!CheckMD5(keys.YouTube_KEY.data, keys.YouTube_KEY.md5))
  335. {
  336. msg = string.Format("YouTube_KEY Key Value md5 Is Incorrect: data={0}, md5={1}", keys.YouTube_KEY.data, keys.YouTube_KEY.md5);
  337. goto end;
  338. }
  339. }
  340. if (data.ContainsKey("fairplay") && data.ContainsKey("fairplay_md5"))
  341. {
  342. keys.Fairplay.data = data["fairplay"];
  343. keys.Fairplay.md5 = data["fairplay_md5"];
  344. if (!CheckMD5(keys.Fairplay.data, keys.Fairplay.md5))
  345. {
  346. msg = string.Format("Fairplay Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Fairplay.data, keys.Fairplay.md5);
  347. goto end;
  348. }
  349. }
  350. if (data.ContainsKey("widevine") && data.ContainsKey("widevine_md5"))
  351. {
  352. keys.Widevine.data = data["widevine"];
  353. keys.Widevine.md5 = data["widevine_md5"];
  354. if (!CheckMD5(keys.Widevine.data, keys.Widevine.md5))
  355. {
  356. msg = string.Format("Widevine Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Widevine.data, keys.Widevine.md5);
  357. goto end;
  358. }
  359. }
  360. if (data.ContainsKey("attention") && data.ContainsKey("attention_md5"))
  361. {
  362. keys.Attestation.data = data["attention"];
  363. keys.Attestation.md5 = data["attention_md5"];
  364. if (!CheckMD5(keys.Attestation.data, keys.Attestation.md5))
  365. {
  366. msg = string.Format("Attestation Key Value md5 Is Incorrect: data={0}, md5={1}", keys.Attestation.data, keys.Attestation.md5);
  367. goto end;
  368. }
  369. }
  370. if (data.ContainsKey("dsn") && data.ContainsKey("dsn_md5"))
  371. {
  372. keys.DSN.data = data["dsn"];
  373. keys.DSN.md5 = data["dsn_md5"];
  374. if (!CheckMD5(keys.DSN.data, keys.DSN.md5))
  375. {
  376. msg = string.Format("DSN Key Value md5 Is Incorrect: data={0}, md5={1}", keys.DSN.data, keys.DSN.md5);
  377. goto end;
  378. }
  379. }
  380. if (data.ContainsKey("dak") && data.ContainsKey("dak_md5"))
  381. {
  382. keys.DAK.data = data["dak"];
  383. keys.DAK.md5 = data["dak_md5"];
  384. if (!CheckMD5(keys.DAK.data, keys.DAK.md5))
  385. {
  386. msg = string.Format("DAK Key Value md5 Is Incorrect: data={0}, md5={1}", keys.DAK.data, keys.DAK.md5);
  387. goto end;
  388. }
  389. }
  390. result = true;
  391. }
  392. }
  393. }
  394. catch
  395. {
  396. msg = "解析Json失败";
  397. }
  398. }
  399. end:
  400. watch.Stop();
  401. Log.WriteInfoLog(string.Format("[GetIDMKeys] order={0},sn={1},Elapsed={2} GetKeys={3}", order, sn, watch.Elapsed.TotalMilliseconds, result ? "成功" : "失败"));
  402. if (!result)
  403. CommonMethod.ReportErrormsg("Fail to GetIDMKeys ", msg + "\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + httpResult.Html, connection);
  404. return result;
  405. }
  406. private static string GetReportJson(string order, string sn, bool isNodid, ref KeyInfo keyinfo)
  407. {
  408. Func<string, string, JObject, bool> AddJsonItem = (name, value, jobj) =>
  409. {
  410. if (name == null || name.Length == 0)
  411. return false;
  412. if (value == null || value.Length == 0)
  413. return false;
  414. if (jobj == null)
  415. return false;
  416. jobj.Add(name, (JToken)value);
  417. return true;
  418. };
  419. Func<KeyData, JObject, bool> AddKeyJson = (keydata, jobj) =>
  420. {
  421. if (keydata == null || jobj == null || keydata.data == null)
  422. return false;
  423. if (keydata.keyfrom == KEY_FROM.FROM_IDM && keydata.enable)
  424. {
  425. jobj.Add(keydata.name, (JToken)keydata.data);
  426. }
  427. return true;
  428. };
  429. try
  430. {
  431. JObject postJson = new JObject();
  432. AddJsonItem("ordernum", order, postJson);
  433. AddJsonItem("sn", sn, postJson);
  434. AddJsonItem("nodid", isNodid.ToString(), postJson);
  435. if (keyinfo != null)
  436. {
  437. AddKeyJson(keyinfo.MGK, postJson);
  438. AddKeyJson(keyinfo.Mac, postJson);
  439. AddKeyJson(keyinfo.HDCP, postJson);
  440. AddKeyJson(keyinfo.HDCP22, postJson);
  441. AddKeyJson(keyinfo.ESN, postJson);
  442. //AddKeyJson(keyinfo.WiDi, postJson);
  443. AddKeyJson(keyinfo.Widevine, postJson);
  444. AddKeyJson(keyinfo.CI_plus, postJson);
  445. AddKeyJson(keyinfo.Attestation, postJson);
  446. AddKeyJson(keyinfo.MGK, postJson);
  447. AddKeyJson(keyinfo.Fairplay, postJson);
  448. AddKeyJson(keyinfo.DSN, postJson);
  449. AddKeyJson(keyinfo.WiFi_MAC, postJson);
  450. AddKeyJson(keyinfo.BT_MAC, postJson);
  451. AddKeyJson(keyinfo.LEK, postJson);
  452. AddKeyJson(keyinfo.PEK, postJson);
  453. AddKeyJson(keyinfo.Playready, postJson);
  454. AddKeyJson(keyinfo.Hashkey, postJson);
  455. AddKeyJson(keyinfo.ECP, postJson);
  456. AddKeyJson(keyinfo.YouTube_KEY, postJson);
  457. AddKeyJson(keyinfo.EDIDPid, postJson);
  458. AddKeyJson(keyinfo.EDIDModelName, postJson);
  459. AddKeyJson(keyinfo.ACASKey_Data, postJson);
  460. //AddKeyJson(keyinfo.ACASKey_Tool, postJson);//内置
  461. AddKeyJson(keyinfo.DAK, postJson);
  462. //AddKeyJson(keyinfo.FVP, postJson);
  463. }
  464. return postJson.ToString();
  465. }
  466. catch (Exception ex)
  467. {
  468. Log.WriteErrorLog("\r\nFail to GetReportJson," + ex.Message + ":" + "\r\nOrder:" + order + "\r\nSN:" + sn);
  469. }
  470. return "";
  471. }
  472. /// <summary>
  473. /// 在线抄写完成上报 Key
  474. /// </summary>
  475. /// <param name="url"></param>
  476. /// <param name="order"></param>
  477. /// <param name="sn"></param>
  478. /// <param name="isNodid"></param>
  479. /// <param name="keyinfo"></param>
  480. /// <param name="sqliteConn"></param>
  481. /// <param name="msg"></param>
  482. /// <returns></returns>
  483. public static bool ReportOnlineData(string url, string order, string sn, bool isNodid, ref KeyInfo keyinfo, SQLiteConnection sqliteConn, out string msg)
  484. {
  485. msg = "";
  486. HttpHelper http = new HttpHelper();
  487. HttpItem item = new HttpItem()
  488. {
  489. Encoding = Encoding.UTF8,//编码格式(utf-8,gb2312,gbk)可选项 默认类会自动识别//Encoding = Encoding.Default,
  490. Method = "post",
  491. Postdata = GetReportJson(order, sn, isNodid, ref keyinfo),
  492. PostEncoding = Encoding.UTF8,
  493. KeepAlive = false
  494. };
  495. item.URL = url + "/reportData/report";
  496. item.ContentType = "application/json;charset=utf-8";
  497. System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
  498. stopwatch.Start();
  499. HttpResult result = http.GetHtml(item);
  500. stopwatch.Stop();
  501. string usingtime = stopwatch.ElapsedMilliseconds.ToString();
  502. stopwatch.Reset();
  503. string ParseText = result.Html;
  504. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  505. {
  506. Log.WriteGetKeyLog("\r\nReportOnlineData info\r\nUsing time:" + usingtime + "ms\r\n" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  507. }
  508. else
  509. {
  510. Log.WriteErrorLog("\r\nFail to ReportOnlineData:" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  511. CommonMethod.ReportErrormsg("Fail to ReportOnlineData", result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata, sqliteConn);
  512. return false;
  513. }
  514. try
  515. {
  516. JObject jObject = JObject.Parse(ParseText);
  517. msg = jObject["message"].Value<string>();
  518. string code = jObject["code"].Value<string>();
  519. if (code == "0")
  520. return true;
  521. }
  522. catch (Exception ex)
  523. {
  524. Log.WriteErrorLog("\r\nFail to ReportOnlineData," + ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  525. CommonMethod.ReportErrormsg("Fail to ReportOnlineData", ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata, sqliteConn);
  526. }
  527. return false;
  528. }
  529. //reportData/reportList
  530. /// <summary>
  531. /// 离线抄写上报
  532. /// </summary>
  533. /// <param name="url"></param>
  534. /// <param name="copydate"></param>
  535. /// <param name="SN"></param>
  536. /// <param name="localDBNow"></param>
  537. /// <param name="sqliteConn"></param>
  538. /// <param name="repeatupload"></param>
  539. /// <param name="id"></param>
  540. /// <param name="timeout"></param>
  541. /// <returns></returns>
  542. public static bool ReportOfflineData(string url, string copydate, string SN, SQLiteConnection localDBNow, SQLiteConnection sqliteConn, bool repeatupload, string id, int timeout)
  543. {
  544. HttpHelper http = new HttpHelper();
  545. HttpItem item = new HttpItem()
  546. {
  547. Encoding = Encoding.UTF8,
  548. Method = "post",
  549. Postdata = string.Format("{{\"sn\":\"{0}\",\"date\":\"{1}\"}}", SN, copydate),
  550. PostEncoding = Encoding.UTF8,
  551. KeepAlive = false
  552. };
  553. item.URL = url + "/reportData/reportList";
  554. item.ContentType = "application/json;charset=utf-8";
  555. System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
  556. stopwatch.Start();
  557. HttpResult result = http.GetHtml(item);
  558. stopwatch.Stop();
  559. string usingtime = stopwatch.ElapsedMilliseconds.ToString();
  560. stopwatch.Reset();
  561. string ParseText = result.Html;
  562. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  563. {
  564. Log.WriteGetKeyLog("\r\nReportOfflineData info\r\nUsing time:" + usingtime + "ms\r\n" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  565. }
  566. else
  567. {
  568. Log.WriteErrorLog("\r\nFail to ReportOfflineData:" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  569. CommonMethod.ReportErrormsg("Fail to ReportOfflineData", result.StatusDescription + result.Html + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata, sqliteConn);
  570. if (repeatupload)
  571. return false;
  572. if (CommonMethod.HTTPChecker(url))
  573. SQLiteHelper.InsertDelayCopyReport(sqliteConn, new object[] { "preload_mode", url, SN + "@" + copydate });
  574. return false;
  575. }
  576. try
  577. {
  578. JObject jObject = JObject.Parse(ParseText);
  579. string msg = jObject["msg"].Value<string>();
  580. string code = jObject["code"].Value<string>();
  581. if (code == "0")
  582. {
  583. //更新上报内容
  584. if (SQLiteHelper.UpdateReportStatus(localDBNow, SN))
  585. {
  586. //更新成功
  587. Log.WriteGetKeyLog("\r\nUpdateReportStatus success:\r\n" + url + "/reportlist.do?\r\n" + "sn=" + SN + "\r\ndate=" + copydate + "\r\n" + ParseText);
  588. return true;
  589. }
  590. else
  591. {
  592. Log.WriteErrorLog("\r\nFail to UpdateReportStatus: " + SN);
  593. return false;
  594. }
  595. }
  596. else
  597. {
  598. CommonMethod.ReportErrormsg("Fail to UploadPreloadCopyResult", "Address: " + url + "/reportlist.do?" + "\r\nPostdata: " + "sn=" + SN + "\r\ndate=" + copydate + "\r\n" + ParseText, sqliteConn);
  599. Log.WriteErrorLog("\r\nUpdateReportStatus code return error,should be 1000 " + "\r\n" + SN + ":" + ParseText + "\r\nAddress:" + url + "/reportlist.do?" + "\r\nPostdata: " + "sn=" + SN + "\r\ndate=" + copydate);
  600. if (repeatupload)
  601. {
  602. SQLiteHelper.DeleteDelayCopyReport(sqliteConn, id);
  603. }
  604. }
  605. }
  606. catch (Exception ex)
  607. {
  608. Log.WriteErrorLog("\r\nFail to ReportOfflineData," + ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata);
  609. CommonMethod.ReportErrormsg("Fail to ReportOfflineData", ex.Message + ":" + ParseText + "\r\nAddress:" + url + "\r\nPostdata:" + item.Postdata, sqliteConn);
  610. }
  611. return false;
  612. }
  613. public static bool GetOfflineData(string url, string order, SQLiteConnection sqliteConn, out List<MidAddress> midAddressList)
  614. {
  615. midAddressList = new List<MidAddress>();
  616. HttpHelper http = new HttpHelper();
  617. HttpItem item = new HttpItem()
  618. {
  619. Encoding = Encoding.UTF8,
  620. Method = "post",
  621. Postdata = string.Format("{{\"ordernum\":\"{0}\",\"mac\":\"{1}\"}}", order, HttpUtility.UrlEncode(TestMode.MAC)),
  622. KeepAlive = false
  623. };
  624. item.URL = url + "/offline/getofflinelist";
  625. item.ContentType = "application/json;charset=utf-8";
  626. HttpResult result = http.GetHtml(item);
  627. string ParseText = result.Html;
  628. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  629. {
  630. }
  631. else
  632. {
  633. Log.WriteErrorLog("\r\nFail to GetOfflineData:" + result.StatusDescription + "\r\n" + result.Html + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata);
  634. CommonMethod.ReportErrormsg("Fail to GetOfflineData", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata, sqliteConn);
  635. return false;
  636. }
  637. try
  638. {
  639. JObject jObject = JObject.Parse(ParseText);
  640. if (jObject["data"] != null)
  641. {
  642. foreach (var data in jObject["data"])
  643. {
  644. midAddressList.Add(new MidAddress()
  645. {
  646. des = CommonMethod.JSON_SeleteNode(jObject, "des"),
  647. code = CommonMethod.JSON_SeleteNode(jObject, "code"),
  648. order = data["order_number"].ToObject<string>(),
  649. number = data["order_quantity"].ToObject<string>(),
  650. pid = data["project_id"].ToObject<string>(),
  651. ctype = data["client_type"].ToObject<string>(),
  652. purl = data["packet_url"].ToObject<string>(),
  653. psize = data["packet_size"].ToObject<string>(),
  654. pmd5 = data["packet_md5"].ToObject<string>(),
  655. version = data["soft_version"].ToObject<string>(),
  656. host = url
  657. });
  658. }
  659. Log.WriteGetKeyLog("\r\nGet GetOfflineData success:" + "\r\n" + result.Html + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata);
  660. return true;
  661. }
  662. Log.WriteErrorLog("\r\nFail to GetOfflineData," + ParseText + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata);
  663. }
  664. catch (Exception ex)
  665. {
  666. Log.WriteErrorLog("\r\nFail to GetOfflineData," + ex.Message + ":" + ParseText + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata);
  667. CommonMethod.ReportErrormsg("Fail to GetOfflineData", ex.Message + "\r\n" + ParseText + "\r\nAddress:" + item.URL + "\r\nPostdata:" + item.Postdata, sqliteConn);
  668. MessageBox.Show("Fail to GetOfflineData info\r\n " + ex.Message);
  669. return false;
  670. }
  671. return false;
  672. }
  673. public static bool ReportDownloadStatus(string url, string order, SQLiteConnection sqliteConn)
  674. {
  675. HttpHelper http = new HttpHelper();
  676. HttpItem item = new HttpItem()
  677. {
  678. Encoding = null,
  679. Method = "post",
  680. Postdata = string.Format("{{\"orderNumber\":\"{0}\"}}", order),
  681. KeepAlive = false
  682. };
  683. item.URL = url += "/offline/getreportofflinesn";
  684. item.ContentType = "application/json;charset=utf-8";
  685. HttpResult result = http.GetHtml(item);
  686. string ParseText = result.Html;
  687. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  688. {
  689. //
  690. }
  691. else
  692. {
  693. Log.WriteErrorLog("\r\nFail to report download status:" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order));
  694. CommonMethod.ReportErrormsg("Fail to report download status", result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order), sqliteConn);
  695. return false;
  696. }
  697. try
  698. {
  699. JObject jObject = JObject.Parse(ParseText);
  700. string msg = CommonMethod.JSON_SeleteNode(jObject, "msg");
  701. string code = CommonMethod.JSON_SeleteNode(jObject, "code");
  702. if (code == "0")
  703. return true;
  704. else
  705. {
  706. Log.WriteErrorLog("\r\nError report download status,should be 1000:" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order));
  707. CommonMethod.ReportErrormsg("Error download status code return", result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order), sqliteConn);
  708. return false;
  709. }
  710. }
  711. catch (Exception ex)
  712. {
  713. MessageBox.Show(ex.Message);
  714. Log.WriteErrorLog("\r\n" + ex.Message + ":" + result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order));
  715. CommonMethod.ReportErrormsg("Error parse download status return", result.StatusDescription + result.Html + "\r\nAddress:" + url + "/getreportofflinesn.do?" + "\r\nPostdata:" + ("orderNumber =" + order), sqliteConn);
  716. return false;
  717. }
  718. }
  719. };
  720. };