123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- using Fa_Xiaomi_N801A.MainForm.EDEHelper;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- namespace MainForm.ClassFile.XiaomiAPI_MES
- {
- /// <summary>
- /// 小米MES - X5协议接⼝
- /// </summary>
- public class XiaomiMESHttp_X5
- {
- #region 变量
- /// <summary>
- /// 系统分配的应⽤ID;mes_test
- /// </summary>
- protected static string Appid { set; get; } = GlobalContext.MESAppId;
- /// <summary>
- /// Appkey;mes
- /// </summary>
- protected static string Appkey { set; get; } = GlobalContext.MESAppKey;
- /// <summary>
- /// 接口地址
- /// </summary>
- protected static string MESUrl { set; get; } = string.Empty;
- /// <summary>
- /// 接口方法
- /// </summary>
- protected static string Method { set; get; } = string.Empty;
- #endregion 变量
- #region 其他方法
- /// <summary>
- /// 计算md5签名
- /// 1、计算md5
- /// 2、转大写字母
- /// </summary>
- /// <param name="appid">应⽤ID</param>
- /// <param name="body">报文内容;json字符串</param>
- /// <param name="appkey">应用密钥</param>
- /// <returns>大写的md5签名</returns>
- public static string GetSign_Up(string appid, string bodyJson, string appkey)
- {
- string sign = appid + bodyJson + appkey;
- // 计算大写的md5
- string md5Up = Md5Helper.GetMD5Value_String(sign, false, true);
- return md5Up;
- }
- /// <summary>
- /// BASE64序列化
- /// </summary>
- /// <param name="bodyJson"></param>
- /// <returns></returns>
- public static string BodyToBASE64(string bodyJson)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(bodyJson);
- string base64Str = Convert.ToBase64String(bytes);
- return base64Str;
- }
- #endregion 其他方法
- /// <summary>
- /// Post请求可用
- /// </summary>
- /// <param name="Url"></param>
- /// <param name="header">报文头</param>
- /// <param name="Data">报文内容(大概是header+body)</param>
- /// <returns></returns>
- public static XiaomiMES_X5Response Post(string url, string data, XiaomiMES_X5RequestHeader x5Header = null, XiaomiMES_X5RequestBody x5Body = null)
- {
- XiaomiMES_X5Response x5Response = new XiaomiMES_X5Response();
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- Stream myResponseStream = null;
- StreamReader myStreamReader = null;
- HttpWebResponse response = null;
- try
- {
- request = (HttpWebRequest)WebRequest.Create(url);
- request.Method = "POST";
- request.Referer = "";
- request.Timeout = 8000; // 8s
- //request.Proxy = new WebProxy("192.168.1.12",80);
- byte[] bytes = Encoding.UTF8.GetBytes(data);
- //request.ContentType = "multipart/form-data; charset=UTF-8"; ;//窗体数据被编码为名称/值对形式
- //request.Headers.Add("appid", x5Header.AppId);
- //request.Headers.Add("method", x5Header.Method);
- //request.Headers.Add("url", x5Header.Url);
- //request.Headers.Add("sign", x5Header.Sign);
- //request.Headers.Add("sign_type", "md5"); // md5
- //request.Headers.Add("userName", x5Body.UserName);
- request.ContentType = "application/json;charset=utf-8";
- request.ContentLength = bytes.Length;
- myResponseStream = request.GetRequestStream();
- myResponseStream.Write(bytes, 0, bytes.Length);
- string retString;
- response = (HttpWebResponse)request.GetResponse();
- myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
- retString = myStreamReader.ReadToEnd();
- //解析结果
- JObject joRoot;
- joRoot = (JObject)JsonConvert.DeserializeObject(retString);
- x5Response = new XiaomiMES_X5Response();
- string headerJson = joRoot["header"].ToString();
- x5Response.header = JsonConvert.DeserializeObject<XiaomiMES_X5ResponseHeader>(headerJson);
- x5Response.body = joRoot["body"].ToString();
- }
- catch (Exception ex)
- {
- x5Response = new XiaomiMES_X5Response
- {
- header = new XiaomiMES_X5ResponseHeader()
- {
- code = string.Empty,
- desc = ex.Message.ToString(),
- },
- body = string.Empty
- };
- }
- finally
- {
- response?.Close();
- request?.Abort();
- myStreamReader?.Close();
- myResponseStream?.Close();
- }
- return x5Response;
- }
- public static string DoX5Post(string url, string data)
- {
- using (var client = new HttpClient())
- {
- var content = new StringContent($"data={Uri.EscapeDataString(data)}", Encoding.UTF8, "application/x-www-form-urlencoded");
- var response = client.PostAsync(url, content).Result;
- if (!response.IsSuccessStatusCode && response.StatusCode == System.Net.HttpStatusCode.MethodNotAllowed)
- {
- Console.WriteLine("The HTTP method is not allowed for this resource.");
- }
- response.EnsureSuccessStatusCode();
- var responseBody = response.Content.ReadAsStringAsync().Result;
- return responseBody;
- }
- }
- ///// <summary>
- ///// Get请求
- ///// </summary>
- ///// <param name="Url"></param>
- ///// <returns></returns>
- //public static ResponseData Get(string Url)
- //{
- // ResponseData responseData = new ResponseData();
- // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
- // HttpWebResponse response = null;
- // Stream myResponseStream = null;
- // StreamReader myStreamReader = null;
- // try
- // {
- // request.Proxy = null;
- // request.KeepAlive = false;
- // request.Method = "GET";
- // request.ContentType = "application/json; charset=UTF-8";
- // //request.ContentType = "application/x-www-form-urlencoded";//窗体数据被编码为名称/值对形式
- // request.AutomaticDecompression = DecompressionMethods.GZip;
- // response = (HttpWebResponse)request.GetResponse();
- // myResponseStream = response.GetResponseStream();
- // myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
- // string retString = myStreamReader.ReadToEnd();
- // //解析结果
- // JObject joRoot;
- // joRoot = (JObject)JsonConvert.DeserializeObject(retString);
- // responseData = new ResponseData
- // {
- // code = joRoot["code"].ToString(),
- // msg = joRoot["msg"].ToString(),
- // data = joRoot["data"].ToString()
- // };
- // }
- // catch (Exception ex)
- // {
- // responseData = new ResponseData
- // {
- // code = "",
- // msg = ex.Message.ToString(),
- // data = string.Empty
- // };
- // }
- // finally
- // {
- // response?.Close();
- // request?.Abort();
- // myStreamReader?.Close();
- // myResponseStream?.Close();
- // }
- // return responseData;
- //}
- }
- /// <summary>
- /// 小米MES - X5协议接⼝ - 入参 - 报文头
- /// </summary>
- public class XiaomiMES_X5RequestHeader
- {
- /// <summary>
- /// 系统分配的应⽤ID;mes_test
- /// 长度50
- /// 必填
- /// </summary>
- public string appid { get; set; } = string.Empty;
- /// <summary>
- /// API接⼝名称;mes
- /// 长度100
- /// 非必填
- /// </summary>
- public string method { get; set; } = string.Empty;
- /// <summary>
- /// md5签名
- /// 长度50
- /// 必填
- /// </summary>
- public string sign { get; set; } = string.Empty;
- /// <summary>
- /// 接⼝地址;http:/域名/restful/x5/mes
- /// 长度255
- /// 非必填
- /// </summary>
- public string url { get; set; } = string.Empty;
- }
- /// <summary>
- /// 小米MES - X5协议接⼝ - 入参 - 报文内容(Body)
- /// </summary>
- public class XiaomiMES_X5RequestBody
- {
- /// <summary>
- /// 用户名
- /// 长度50
- /// 必填
- /// </summary>
- public string UserName { get; set; } = string.Empty;
- }
- /// <summary>
- /// 小米MES - X5协议接⼝ - 出参
- /// </summary>
- public class XiaomiMES_X5Response
- {
- /// <summary>
- /// 出参 Header
- /// </summary>
- public XiaomiMES_X5ResponseHeader header { get; set; } = new XiaomiMES_X5ResponseHeader();
- /// <summary>
- /// 出参 具体业务数据
- /// Json
- /// </summary>
- public string body { get; set; } = string.Empty;
- }
- /// <summary>
- /// 小米MES - X5协议接⼝ - 出参 - 报文头(Header)
- /// </summary>
- public class XiaomiMES_X5ResponseHeader
- {
- /// <summary>
- /// 状态码
- /// 200表⽰成功,⾮200表⽰失败
- /// </summary>
- public string code { get; set; } = string.Empty;
- /// <summary>
- /// 状态描述
- /// code为⾮200,这⾥表⽰具体的失败原因,如果code为200,这⾥成功的描述,可能是空
- /// </summary>
- public string desc { get; set; } = string.Empty;
- }
- }
|