XiaomiMESHttp_X5.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. using Fa_Xiaomi_N801A.MainForm.EDEHelper;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace MainForm.ClassFile.XiaomiAPI_MES
  12. {
  13. /// <summary>
  14. /// 小米MES - X5协议接⼝
  15. /// </summary>
  16. public class XiaomiMESHttp_X5
  17. {
  18. #region 变量
  19. /// <summary>
  20. /// 系统分配的应⽤ID;mes_test
  21. /// </summary>
  22. protected static string Appid { set; get; } = GlobalContext.MESAppId;
  23. /// <summary>
  24. /// Appkey;mes
  25. /// </summary>
  26. protected static string Appkey { set; get; } = GlobalContext.MESAppKey;
  27. /// <summary>
  28. /// 接口地址
  29. /// </summary>
  30. protected static string MESUrl { set; get; } = string.Empty;
  31. /// <summary>
  32. /// 接口方法
  33. /// </summary>
  34. protected static string Method { set; get; } =string.Empty;
  35. #endregion 变量
  36. #region 其他方法
  37. /// <summary>
  38. /// 计算md5签名
  39. /// 1、计算md5
  40. /// 2、转大写字母
  41. /// </summary>
  42. /// <param name="appid">应⽤ID</param>
  43. /// <param name="body">报文内容;json字符串</param>
  44. /// <param name="appkey">应用密钥</param>
  45. /// <returns>大写的md5签名</returns>
  46. public static string GetSign_Up(string appid, string bodyJson, string appkey)
  47. {
  48. string sign = appid + bodyJson + appkey;
  49. // 计算大写的md5
  50. string md5Up = Md5Helper.GetMD5Value_String(sign, false, true);
  51. return md5Up;
  52. }
  53. /// <summary>
  54. /// BASE64序列化
  55. /// </summary>
  56. /// <param name="bodyJson"></param>
  57. /// <returns></returns>
  58. public static string BodyToBASE64(string bodyJson)
  59. {
  60. byte[] bytes = Encoding.UTF8.GetBytes(bodyJson);
  61. string base64Str = Convert.ToBase64String(bytes);
  62. return base64Str;
  63. }
  64. #endregion 其他方法
  65. /// <summary>
  66. /// Post请求可用
  67. /// </summary>
  68. /// <param name="Url"></param>
  69. /// <param name="header">报文头</param>
  70. /// <param name="Data">报文内容(大概是header+body)</param>
  71. /// <returns></returns>
  72. public static XiaomiMES_X5Response Post(string url, string data, XiaomiMES_X5RequestHeader x5Header = null, XiaomiMES_X5RequestBody x5Body = null)
  73. {
  74. XiaomiMES_X5Response x5Response = new XiaomiMES_X5Response();
  75. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  76. Stream myResponseStream = null;
  77. StreamReader myStreamReader = null;
  78. HttpWebResponse response = null;
  79. try
  80. {
  81. request = (HttpWebRequest)WebRequest.Create(url);
  82. request.Method = "POST";
  83. request.Referer = "";
  84. request.Timeout = 8000; // 8s
  85. //request.Proxy = new WebProxy("192.168.1.12",80);
  86. byte[] bytes = Encoding.UTF8.GetBytes(data);
  87. //request.ContentType = "multipart/form-data; charset=UTF-8"; ;//窗体数据被编码为名称/值对形式
  88. //request.Headers.Add("appid", x5Header.AppId);
  89. //request.Headers.Add("method", x5Header.Method);
  90. //request.Headers.Add("url", x5Header.Url);
  91. //request.Headers.Add("sign", x5Header.Sign);
  92. //request.Headers.Add("sign_type", "md5"); // md5
  93. //request.Headers.Add("userName", x5Body.UserName);
  94. request.ContentType = "application/json;charset=utf-8";
  95. request.ContentLength = bytes.Length;
  96. myResponseStream = request.GetRequestStream();
  97. myResponseStream.Write(bytes, 0, bytes.Length);
  98. string retString;
  99. response = (HttpWebResponse)request.GetResponse();
  100. myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  101. retString = myStreamReader.ReadToEnd();
  102. //解析结果
  103. JObject joRoot;
  104. joRoot = (JObject)JsonConvert.DeserializeObject(retString);
  105. x5Response = new XiaomiMES_X5Response();
  106. string headerJson = joRoot["header"].ToString();
  107. x5Response.header = JsonConvert.DeserializeObject<XiaomiMES_X5ResponseHeader>(retString);
  108. x5Response.body = joRoot["body"].ToString();
  109. }
  110. catch (Exception ex)
  111. {
  112. x5Response = new XiaomiMES_X5Response
  113. {
  114. header = new XiaomiMES_X5ResponseHeader()
  115. {
  116. code = string.Empty,
  117. desc = ex.Message.ToString(),
  118. },
  119. body = string.Empty
  120. };
  121. }
  122. finally
  123. {
  124. response?.Close();
  125. request?.Abort();
  126. myStreamReader?.Close();
  127. myResponseStream?.Close();
  128. }
  129. return x5Response;
  130. }
  131. ///// <summary>
  132. ///// Get请求
  133. ///// </summary>
  134. ///// <param name="Url"></param>
  135. ///// <returns></returns>
  136. //public static ResponseData Get(string Url)
  137. //{
  138. // ResponseData responseData = new ResponseData();
  139. // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
  140. // HttpWebResponse response = null;
  141. // Stream myResponseStream = null;
  142. // StreamReader myStreamReader = null;
  143. // try
  144. // {
  145. // request.Proxy = null;
  146. // request.KeepAlive = false;
  147. // request.Method = "GET";
  148. // request.ContentType = "application/json; charset=UTF-8";
  149. // //request.ContentType = "application/x-www-form-urlencoded";//窗体数据被编码为名称/值对形式
  150. // request.AutomaticDecompression = DecompressionMethods.GZip;
  151. // response = (HttpWebResponse)request.GetResponse();
  152. // myResponseStream = response.GetResponseStream();
  153. // myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
  154. // string retString = myStreamReader.ReadToEnd();
  155. // //解析结果
  156. // JObject joRoot;
  157. // joRoot = (JObject)JsonConvert.DeserializeObject(retString);
  158. // responseData = new ResponseData
  159. // {
  160. // code = joRoot["code"].ToString(),
  161. // msg = joRoot["msg"].ToString(),
  162. // data = joRoot["data"].ToString()
  163. // };
  164. // }
  165. // catch (Exception ex)
  166. // {
  167. // responseData = new ResponseData
  168. // {
  169. // code = "",
  170. // msg = ex.Message.ToString(),
  171. // data = string.Empty
  172. // };
  173. // }
  174. // finally
  175. // {
  176. // response?.Close();
  177. // request?.Abort();
  178. // myStreamReader?.Close();
  179. // myResponseStream?.Close();
  180. // }
  181. // return responseData;
  182. //}
  183. }
  184. /// <summary>
  185. /// 小米MES - X5协议接⼝ - 入参 - 报文头
  186. /// </summary>
  187. public class XiaomiMES_X5RequestHeader
  188. {
  189. /// <summary>
  190. /// 系统分配的应⽤ID;mes_test
  191. /// 长度50
  192. /// 必填
  193. /// </summary>
  194. public string AppId { get; set; } = string.Empty;
  195. /// <summary>
  196. /// API接⼝名称;mes
  197. /// 长度100
  198. /// 非必填
  199. /// </summary>
  200. public string Method { get; set; } = string.Empty;
  201. /// <summary>
  202. /// md5签名
  203. /// 长度50
  204. /// 必填
  205. /// </summary>
  206. public string Sign { get; set; } = string.Empty;
  207. /// <summary>
  208. /// 接⼝地址;http:/域名/restful/x5/mes
  209. /// 长度255
  210. /// 非必填
  211. /// </summary>
  212. public string Url { get; set; } = string.Empty;
  213. }
  214. /// <summary>
  215. /// 小米MES - X5协议接⼝ - 入参 - 报文内容(Body)
  216. /// </summary>
  217. public class XiaomiMES_X5RequestBody
  218. {
  219. /// <summary>
  220. /// 用户名
  221. /// 长度50
  222. /// 必填
  223. /// </summary>
  224. public string UserName { get; set; } = string.Empty;
  225. }
  226. /// <summary>
  227. /// 小米MES - X5协议接⼝ - 出参
  228. /// </summary>
  229. public class XiaomiMES_X5Response
  230. {
  231. /// <summary>
  232. /// 出参 Header
  233. /// </summary>
  234. public XiaomiMES_X5ResponseHeader header { get; set; } = new XiaomiMES_X5ResponseHeader();
  235. /// <summary>
  236. /// 出参 具体业务数据
  237. /// Json
  238. /// </summary>
  239. public string body { get; set; } = string.Empty;
  240. }
  241. /// <summary>
  242. /// 小米MES - X5协议接⼝ - 出参 - 报文头(Header)
  243. /// </summary>
  244. public class XiaomiMES_X5ResponseHeader
  245. {
  246. /// <summary>
  247. /// 状态码
  248. /// 200表⽰成功,⾮200表⽰失败
  249. /// </summary>
  250. public string code { get; set; } = string.Empty;
  251. /// <summary>
  252. /// 状态描述
  253. /// code为⾮200,这⾥表⽰具体的失败原因,如果code为200,这⾥成功的描述,可能是空
  254. /// </summary>
  255. public string desc { get; set; } = string.Empty;
  256. }
  257. }