Beispiel #1
0
        public ExpressData GetExpressData(string expressCompanyName, string shipOrderNumber)
        {
            string         kuaidi100Code  = GetExpress(expressCompanyName).Kuaidi100Code;
            string         str            = string.Format("http://www.kuaidi100.com/query?type={0}&postid={1}", kuaidi100Code, shipOrderNumber);
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(str);

            httpWebRequest.Timeout = 8000;
            ExpressData expressDatum = new ExpressData();

            try
            {
                HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    expressDatum.Message = "网络错误";
                }
                else
                {
                    Stream        responseStream = response.GetResponseStream();
                    StreamReader  streamReader   = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
                    StringBuilder stringBuilder  = new StringBuilder(streamReader.ReadToEnd());
                    stringBuilder.Replace("&", "").Replace(" ", "").Replace("&", "");
                    JObject jObjects = JObject.Parse(stringBuilder.ToString());
                    string  str1     = "200";
                    if (jObjects["status"] == null || !(jObjects["status"].ToString() == str1))
                    {
                        expressDatum.Message = jObjects["message"].ToString();
                    }
                    else
                    {
                        JArray item = jObjects["data"] as JArray;
                        if (item == null)
                        {
                            throw new ApplicationException("查询源数据格式错误,没有找到data节点");
                        }
                        List <ExpressDataItem> expressDataItems = new List <ExpressDataItem>();
                        foreach (JToken jTokens in item)
                        {
                            if (jTokens["time"] == null)
                            {
                                throw new ApplicationException("查询源数据格式错误,没有找到time节点");
                            }
                            if (jTokens["context"] == null)
                            {
                                throw new ApplicationException("查询源数据格式错误,没有找到context节点");
                            }
                            ExpressDataItem expressDataItem = new ExpressDataItem()
                            {
                                Time    = DateTime.ParseExact(jTokens["time"].ToString(), "yyyy-MM-dd HH:mm:ss", null),
                                Content = jTokens["context"].ToString()
                            };
                            expressDataItems.Add(expressDataItem);
                        }
                        expressDatum.Success          = true;
                        expressDatum.ExpressDataItems = expressDataItems;
                    }
                }
            }
            catch (Exception exception)
            {
                Log.Error(string.Format("快递查询错误:{{kuaidi100Code:{0},shipOrderNumber:{1}}}", kuaidi100Code, shipOrderNumber), exception);
                expressDatum.Message = "未知错误";
            }
            return(expressDatum);
        }
Beispiel #2
0
        public ExpressData GetExpressDataSF(string logisticsCode)
        {
            //https://qiao.sf-express.com/pages/developDoc/index.html?level2=296618&level3=902583&level4=893568
            var settting = SiteSettingApplication.SiteSettings;
            //查询请求XML报文
            string xml = string.Format(
                "<Request service='RouteService' lang='zh-CN'>" +
                "<Head>{0}</Head>" +
                "<Body>" +
                "<RouteRequest tracking_type = '1' method_type = '1' tracking_number = '{1}'/>" +
                "</Body>" +
                "</Request>", settting.SFKuaidiCustomerCode, logisticsCode);

            string Checkword  = settting.SFKuaidiCheckWord;                                 //开发者账号对应的校验码; // "j8DzkIFgmlomPt0aLuwU";
            string verifyCode = MD5ToBase64String(xml + Checkword);                         //生成接口校验码
            string requestUrl = "http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService"; //测试、生产环境同一个地址

            string      result    = DoPostSF(requestUrl, xml, verifyCode);                  //返回结果XML
            bool        isSuccess = false;
            ExpressData data      = new ExpressData();
            var         itemList  = new List <ExpressDataItem>();
            //解析返回结果
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(result);
            var headNode = xmlDoc.SelectSingleNode("/Response/Head");

            if (headNode != null)
            {
                if (headNode.InnerText.ToLower() == "ok")
                {
                    isSuccess = true;
                }
                else
                {//错误记录日志
                    var errNode = xmlDoc.SelectSingleNode("/Response/ERROR");
                    if (errNode != null)
                    {
                        data.Message = errNode.InnerText;
                    }
                }
            }
            if (isSuccess)
            {
                var      routeNodes = xmlDoc.SelectNodes("/Response/Body/RouteResponse/Route");
                DateTime dt         = new DateTime();
                string   address    = string.Empty;
                foreach (XmlNode route in routeNodes)
                {
                    ExpressDataItem item = new ExpressDataItem();
                    if (DateTime.TryParse(route.Attributes["accept_time"].Value, out dt))
                    {
                        item.Time = dt;
                    }
                    if (route.Attributes["accept_address"] != null)
                    {//accept_address 可能没有
                        address = route.Attributes["accept_address"].Value;
                    }
                    item.Content = address + " " + route.Attributes["remark"].Value;
                    itemList.Add(item);
                }
            }
            data.ExpressDataItems = itemList;
            data.Success          = isSuccess;
            return(data);

            /*
             * <Response service="RouteService">
             *  <Head>OK</Head>
             *  <Body>
             *  <RouteResponse mailno="444003077898">
             *  <Route accept_time="2015-01-04 10:11:26" accept_address="深圳" remark="已收件" opcode="50"/>
             *  <Route accept_time="2015-01-05 17:41:50" remark="此件签单返还的单号为 123638813180" opcode="922"/>
             *  <RouteResponse mailno="444003077899">
             *  <Route accept_time="2015-01-04 10:11:26" accept_address="深圳" remark="已收件" opcode="50"/>
             *  <Route accept_time="2015-01-05 17:41:50" remark="此件签单返还的单号为 123638813181" opcode="922"/>
             *  </RouteResponse>
             *  </Body>
             * </Response>
             * //失败
             * <Response service=”RouteService”>
             *  <Head>ERR</Head>
             *  <ERROR code="4001">系统发生数据错误或运行时异常</ERROR>
             * </Response>
             */
        }