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.Text;
using System.Threading.Tasks;
namespace MainForm.ClassFile.XiaomiAPI_MES
{
///
/// 小米MES - X5协议接⼝
///
public class XiaomiMESHttp_X5
{
#region 变量
///
/// 系统分配的应⽤ID;mes_test
///
protected static string Appid { set; get; } = GlobalContext.MESAppId;
///
/// Appkey;mes
///
protected static string Appkey { set; get; } = GlobalContext.MESAppKey;
///
/// 接口地址
///
protected static string MESUrl { set; get; } = string.Empty;
///
/// 接口方法
///
protected static string Method { set; get; } =string.Empty;
#endregion 变量
#region 其他方法
///
/// 计算md5签名
/// 1、计算md5
/// 2、转大写字母
///
/// 应⽤ID
/// 报文内容;json字符串
/// 应用密钥
/// 大写的md5签名
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;
}
///
/// BASE64序列化
///
///
///
public static string BodyToBASE64(string bodyJson)
{
byte[] bytes = Encoding.UTF8.GetBytes(bodyJson);
string base64Str = Convert.ToBase64String(bytes);
return base64Str;
}
#endregion 其他方法
///
/// Post请求可用
///
///
/// 报文头
/// 报文内容(大概是header+body)
///
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(retString);
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;
}
/////
///// Get请求
/////
/////
/////
//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;
//}
}
///
/// 小米MES - X5协议接⼝ - 入参 - 报文头
///
public class XiaomiMES_X5RequestHeader
{
///
/// 系统分配的应⽤ID;mes_test
/// 长度50
/// 必填
///
public string AppId { get; set; } = string.Empty;
///
/// API接⼝名称;mes
/// 长度100
/// 非必填
///
public string Method { get; set; } = string.Empty;
///
/// md5签名
/// 长度50
/// 必填
///
public string Sign { get; set; } = string.Empty;
///
/// 接⼝地址;http:/域名/restful/x5/mes
/// 长度255
/// 非必填
///
public string Url { get; set; } = string.Empty;
}
///
/// 小米MES - X5协议接⼝ - 入参 - 报文内容(Body)
///
public class XiaomiMES_X5RequestBody
{
///
/// 用户名
/// 长度50
/// 必填
///
public string UserName { get; set; } = string.Empty;
}
///
/// 小米MES - X5协议接⼝ - 出参
///
public class XiaomiMES_X5Response
{
///
/// 出参 Header
///
public XiaomiMES_X5ResponseHeader header { get; set; } = new XiaomiMES_X5ResponseHeader();
///
/// 出参 具体业务数据
/// Json
///
public string body { get; set; } = string.Empty;
}
///
/// 小米MES - X5协议接⼝ - 出参 - 报文头(Header)
///
public class XiaomiMES_X5ResponseHeader
{
///
/// 状态码
/// 200表⽰成功,⾮200表⽰失败
///
public string code { get; set; } = string.Empty;
///
/// 状态描述
/// code为⾮200,这⾥表⽰具体的失败原因,如果code为200,这⾥成功的描述,可能是空
///
public string desc { get; set; } = string.Empty;
}
}