/// <summary> /// 订单状态通知报文解析处理 /// <para> /// 详细说明请查看丰桥API说明<seealso cref="https://qiao.sf-express.com/pages/developDoc/index.html?level2=330428"/> /// </para> /// </summary> /// <param name="xmlString">报文字符</param> /// <param name="actionProcess">报文解析后执行的处理</param> /// <returns>返回响应报文</returns> public static string PushOrderStateProcess(string xmlString, Func <ExpressOrderState, bool> actionProcess) { if (xmlString.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(xmlString)); } ExpressOrderState expressOrderState = ExpressOrderStateParser.Parse(xmlString); if (expressOrderState == null) { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><success>false</success><msg>解析报文出错!</msg></Response>"); } var reult = actionProcess.Invoke(expressOrderState); if (reult) { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><success>true</success></Response>"); } else { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><success>false</success><msg>订单状态接收异常</msg></Response>"); } }
public static ExpressOrderState Parse(string xmlString) { var xmlDocument = xmlString?.ToXmlDocument(); if (xmlDocument == null) { return(null); } var requestNodeList = xmlDocument.GetElementsByTagName("Request"); if (requestNodeList?.Count > 0) { var nodes = requestNodeList[0].ChildNodes; if (nodes != null && nodes.Count > 0) { var dict = new Dictionary <string, string>(); foreach (XmlNode item in nodes) { if (!string.IsNullOrWhiteSpace(item.InnerText)) { dict.Add(item.Name, item.InnerText); } } if (dict.ContainsKey("carrierCode") && dict.ContainsKey("waybillNo") && dict.ContainsKey("orderStateCode") && dict.ContainsKey("orderStateDesc")) { var expressOrderState = new ExpressOrderState() { MailNo = dict["waybillNo"], OrderStateCode = dict["orderStateCode"], OrderStateDesc = dict["orderStateDesc"], CarrierCode = dict["carrierCode"] }; if (dict.ContainsKey("orderNo")) { expressOrderState.OrderId = dict["orderNo"]; } if (dict.ContainsKey("empPhone")) { expressOrderState.EmpPhone = dict["empPhone"]; } if (dict.ContainsKey("empCode")) { expressOrderState.EmpCode = dict["empCode"]; } if (dict.ContainsKey("netCode")) { expressOrderState.NetCode = dict["netCode"]; } if (dict.ContainsKey("lastTime")) { expressOrderState.LastTime = DateTime.ParseExact(dict["lastTime"], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); } if (dict.ContainsKey("bookTime")) { expressOrderState.BookTime = DateTime.ParseExact(dict["bookTime"], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); } return(expressOrderState); } } } return(null); }