基於C# .NET的常用快遞接口調用代碼實例

// 常用快遞調用示例代碼 - 聚合數據
// 在線接口文檔:https://www.juhe.cn/docs/api/id/43
// 代碼中JsonObject類下載地址:http://download.csdn.net/download/weixin_38668828/10220570

 /// <summary>
       ///返回json格式的字符串 物流信息(可以查看最下面寫的json返回實例)
        /// </summary>
        /// <returns></returns>
        public static string deliveryInfos()
        {
            //常用快遞查詢API
            string url1 = "http://v.juhe.cn/exp/index";
            var parameters1 = new Dictionary<string, string>();
            parameters1.Add("com", "sto"); //需要查詢的快遞公司編號
            parameters1.Add("no", "335013057****"); //需要查詢的訂單號
            parameters1.Add("key", "********************");//配置您申請的appkey
            parameters1.Add("dtype", "json"); //返回數據的格式,xml或json,默認json

            string result1 = sendPost(url1, parameters1, "get");//你所要得到的物流信息,格式爲json字符串(可以查看最下寫的json返回實例)

            JsonObject newObj1 = new JsonObject(result1);//字符串轉換爲json對象
            string errorCode1 = newObj1["error_code"].Value;//錯誤碼,0表示查詢正常,其他表示查詢不到物流信息或發生了其他錯誤
 if (errorCode1 == "0")
{ 
//newObj1["result"]["status"].Value這種寫法視爲了獲取json對象值中的對象值(寫的時候特別糾結newObj1["result"].Value獲取不到值,最後猜想這個格式和newObj1["error_code"].Value的格式不一樣,它是一個對象,抱着試一試的心態這樣寫newObj1["result"]["status"].Value,發現對了,皆大歡喜)


string status = newObj1["result"]["status"].Value;//1表示此快遞單的物流信息不會發生變化,此時您可以存儲下來,不用再調用接口(省錢,有錢任性的話可以不存);0表示有變化的可能性;
if (status=="1")
{
//對status 進行存儲操作,或者可以將返回的json字符串數據存儲下來
}
 return result1;
 }

#region start說明:這一整塊(到下面的end說明)可以直接用,不用修改
       /// <summary>
        /// Http (GET/POST)
        /// </summary>
        /// <param name="url">請求URL</param>
        /// <param name="parameters">請求參數</param>
        /// <param name="method">請求方法</param>
        /// <returns>響應內容</returns>
        static string sendPost(string url, IDictionary<string, string> parameters, string method)
        {
            if (method.ToLower() == "post")
            {
                HttpWebRequest req = null;
                HttpWebResponse rsp = null;
                System.IO.Stream reqStream = null;
                try
                {
                    req = (HttpWebRequest)WebRequest.Create(url);
                    req.Method = method;
                    req.KeepAlive = false;
                    req.ProtocolVersion = HttpVersion.Version10;
                    req.Timeout = 5000;
                    req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                    byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));
                    reqStream = req.GetRequestStream();
                    reqStream.Write(postData, 0, postData.Length);
                    rsp = (HttpWebResponse)req.GetResponse();
                    Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                    return GetResponseAsString(rsp, encoding);
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
                finally
                {
                    if (reqStream != null) reqStream.Close();
                    if (rsp != null) rsp.Close();
                }
            }
            else
            {
                //創建請求
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + BuildQuery(parameters, "utf8"));
                //GET請求
                request.Method = "GET";
                request.ReadWriteTimeout = 5000;
                request.ContentType = "text/html;charset=UTF-8";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));


                //返回內容
                string retString = myStreamReader.ReadToEnd();
                return retString;
            }
        }

        /// <summary>
        /// 組裝普通文本請求參數。
        /// </summary>
        /// <param name="parameters">Key-Value形式請求參數字典</param>
        /// <returns>URL編碼後的請求數據</returns>
        static string BuildQuery(IDictionary<string, string> parameters, string encode)
        {
            StringBuilder postData = new StringBuilder();
            bool hasParam = false;
            IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
            while (dem.MoveNext())
            {
                string name = dem.Current.Key;
                string value = dem.Current.Value;
                // 忽略參數名或參數值爲空的參數
                if (!string.IsNullOrEmpty(name))//&& !string.IsNullOrEmpty(value)
                {
                    if (hasParam)
                    {
                        postData.Append("&");
                    }
                    postData.Append(name);
                    postData.Append("=");
                    if (encode == "gb2312")
                    {
                        postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
                    }
                    else if (encode == "utf8")
                    {
                        postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
                    }
                    else
                    {
                        postData.Append(value);
                    }
                    hasParam = true;
                }
            }
            return postData.ToString();
        }

        /// <summary>
        /// 把響應流轉換爲文本。
        /// </summary>
        /// <param name="rsp">響應流對象</param>
        /// <param name="encoding">編碼方式</param>
        /// <returns>響應文本</returns>
        static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
        {
            System.IO.Stream stream = null;
            StreamReader reader = null;
            try
            {
                // 以字符流的方式讀取HTTP響應
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                return reader.ReadToEnd();
            }
            finally
            {
                // 釋放資源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
        }
   #endregion end說明:這一整塊可以直接用,不用修改
 #region json返回實例
            //  {
            //   "resultcode": "200", /* 老版狀態碼,新用戶請忽略此字段 */
            //  "reason": "查詢物流信息成功",
            //   "company": "申通", /* 快遞公司名字 */
            //  "result": {
            //    "com": "sto",
            //    "status": "1", /* 1表示此快遞單的物流信息不會發生變化,此時您可緩存下來;0表示有變化的可能性 */
            //    "no": "335013057****", /* 快遞單號 */
            //    "list": [
            //      {
            //        "remark": "離開郴州市 發往長沙市【郴州市】", /* 物流事件的描述 */
            //        "datetime": "2016-06-15 21:44:04",  /* 物流事件發生的時間 */
            //        "zone": "" /* 快件當時所在區域,由於快遞公司升級,現大多數快遞不提供此信息 */
            //      },
            //      }
            //      {
            //        "datetime": "2016-06-20 17:55:00",
            //        "remark": "投遞並簽收,簽收人:單位收發章 *【畢節地區】",
            //        "zone": ""
           
            //    ]
            //  },
            //  "error_code": 0 /* 錯誤碼,0表示查詢正常,其他表示查詢不到物流信息或發生了其他錯誤 */
            //}
#endregion




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章