コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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>");
            }
        }