using System.Linq; using System.Net.Http; using System.Net; using System.Text; using System.Web.Http; using Newtonsoft.Json; using static HH.WCS.Mobox3.AnGang.api.OtherModel; using System.Threading.Tasks; namespace HH.WCS.Mobox3.AnGang.api { /// /// ERP 调用的接口 /// [RoutePrefix("api")] public class ErpController : ApiController { /// /// 入库数据同步(ERP) /// /// /// [HttpPost] [Route("InboundDataSync")] public IHttpActionResult InboundDataSync(InboundDataSyncInfo model) { LogHelper.Info("触发API:入库数据同步" + JsonConvert.SerializeObject(model), "API"); //var headers = Request.Headers; //var checkRes = CheckHeaders(headers); //if (!checkRes.isSuccess) { // return CreateErrorResponse(checkRes.code, checkRes.message); //} var res = ApiHelper.InboundDataSync(model); return CreateSuccessResponse(res); } /// /// 出库发料同步(ERP) /// /// /// [HttpPost] [Route("OutboundDataSync")] public IHttpActionResult OutboundDataSync(OutboundDataSyncInfo model) { LogHelper.Info("触发API:出库发料同步" + JsonConvert.SerializeObject(model), "API"); //var headers = Request.Headers; //var checkRes = CheckHeaders(headers); //if (!checkRes.isSuccess) { // return CreateErrorResponse(checkRes.code, checkRes.message); //} var res = ApiHelper.OutboundDataSync(model); return CreateSuccessResponse(res); } private CheckHeadersResult CheckHeaders(System.Net.Http.Headers.HttpRequestHeaders headers) { // 必须字段验证 if (!headers.Contains("sourceAppCode") || !headers.Contains("serviceId") || !headers.Contains("msgSendTime")) { return CreateCheckHeadersResult(false, "2003", "缺少必要请求头参数"); } var headerModel = new { SourceAppCode = headers.GetValues("sourceAppCode").First(), Password = headers.Contains("password") ? headers.GetValues("password").First() : null, ServiceId = headers.GetValues("serviceId").First(), MsgToken = headers.Contains("msgToken") ? headers.GetValues("msgToken").First() : null, MsgSendTime = headers.GetValues("msgSendTime").First() }; // 验证Header var validationResult = ValidateHeaders(headerModel); if (validationResult != null) { return validationResult; } // 验证Body if (Request.Content.Headers.ContentLength > 2 * 1024 * 1024) { return CreateCheckHeadersResult(false, "2102", "消息内容过长,超过2M"); } return CreateCheckHeadersResult(true); } private IHttpActionResult CreateSuccessResponse(object data) { return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) { Headers = { { "returnCode", "0" } }, Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json") }); } private IHttpActionResult CreateErrorResponse(string code, string message) { return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) { Headers = { { "returnCode", code } }, Content = new StringContent(message) }); } private CheckHeadersResult ValidateHeaders(dynamic headers) { // 实现所有Header验证逻辑 if (!IsRegisteredApp(headers.SourceAppCode, headers.Password)) { return CreateCheckHeadersResult(false, "2201", "源调用系统未注册"); } if (!IsValidService(headers.ServiceId)) { return CreateCheckHeadersResult(false, "2202", "代理服务未注册"); } if (!IsValidDateTime(headers.MsgSendTime)) { return CreateCheckHeadersResult(false, "2101", "时间格式校验失败"); } if (!string.IsNullOrEmpty(headers.MsgToken) && headers.MsgToken.Length > 32) { return CreateCheckHeadersResult(false, "2104", "消息令牌过长,超过32位"); } return null; } private bool IsRegisteredApp(string appId, string password) { return true; } private bool IsValidService(string serviceId) { return true; } private bool IsValidDateTime(string dataTime) { return true; } private CheckHeadersResult CreateCheckHeadersResult(bool isSuccess, string code = "", string message = "") { return new CheckHeadersResult { code = code, message = message, isSuccess = isSuccess }; } } public class CheckHeadersResult { public bool isSuccess { get; set; } public string code { get; set; } public string message { get; set; } } }