public static ExpressPushRouteNode Parse(string xmlString) { XmlDocument xmlDocument = xmlString?.ToXmlDocument(); if (xmlDocument == null) { return(null); } var requestNodeList = xmlDocument.GetElementsByTagName("WaybillRoute"); if (requestNodeList?.Count > 0) { var dict = requestNodeList[0].GetAttributes(); if (dict != null && dict.Count > 0) { if (dict.ContainsKey("id") && dict.ContainsKey("mailno") && dict.ContainsKey("orderid") && dict.ContainsKey("acceptTime") && dict.ContainsKey("acceptAddress") && dict.ContainsKey("remark")) { var expressPushRouteNode = new ExpressPushRouteNode() { MailNo = dict["mailno"], Id = long.Parse(dict["id"]), OrderId = dict["orderid"], AcceptAddress = dict["acceptAddress"], AcceptTime = DateTime.ParseExact(dict["acceptTime"], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture), Remark = dict["remark"], }; if (dict.ContainsKey("opCode")) { var opCode = dict["opCode"]; if (!opCode.IsNullOrWhiteSpace() && opCode.IsNumber()) { expressPushRouteNode.OperateCode = (RouteOperateCode)opCode.AsIntOrDefault(); } } return(expressPushRouteNode); } } } return(null); }
/// <summary> /// 路由通知报文解析处理 /// <para> /// 详细说明请查看丰桥API说明<seealso cref="https://qiao.sf-express.com/pages/developDoc/index.html?level2=532019"/> /// </para> /// </summary> /// <param name="xmlString">报文字符</param> /// <param name="actionProcess">报文解析后执行的处理</param> /// <returns>返回响应报文</returns> public static string RouteProcess(string xmlString, Func <ExpressPushRouteNode, bool> actionProcess) { if (xmlString.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(xmlString)); } ExpressPushRouteNode expressPushRouteNode = ExpressPushRouteNodeParser.Parse(xmlString); if (expressPushRouteNode == null) { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><Head>ERR</Head><ERROR code=\"4002\">报文解析错误</ERROR></Response>"); } var reult = actionProcess.Invoke(expressPushRouteNode); if (reult) { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><Head>OK</Head></Response>"); } else { return("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Response><Head>ERR</Head><ERROR code=\"4001\">系统发生数据错误或运行时异常</ERROR></Response>"); } }