软件编程
位置:首页>> 软件编程>> C#编程>> C#实现快递api接口调用方法

C#实现快递api接口调用方法

作者:hebedich  发布时间:2022-06-15 01:31:58 

标签:C#,快递,api接口

无平台限制,依赖于快递api网接口


 ----------------实体类
 [DataContract]
 public class SyncResponseEntity
 {
   public SyncResponseEntity() { }
   /// <summary>
   /// 需要查询的快递代号
   /// </summary>
   [DataMember(Order = 0, Name = "id")]
   public string ID { get; set; }

/// <summary>
   /// 需要查询的快递名称
   /// </summary>
   [DataMember(Order = 1, Name = "name")]
   public string Name { get; set; }

/// <summary>
   /// 需要查询的快递单号
   /// </summary>
   [DataMember(Order = 2, Name = "order")]
   public string Order { get; set; }

/// <summary>
   /// 消息内容
   /// </summary>
   [DataMember(Order = 5, Name = "message")]
   public string Message { get; set; }

/// <summary>
   /// 服务器状态
   /// </summary>
   [DataMember(Order = 6, Name = "errcode")]
   public string ErrCode { get; set; }

/// <summary>
   /// 运单状态
   /// </summary>
   [DataMember(Order = 7, Name = "status")]
   public int Status { get; set; }

/// <summary>
   /// 跟踪记录
   /// </summary>
   [DataMember(Order = 8, Name = "data")]
   public List<Order> Data { get; set; }
 }

[DataContract(Name = "data")]
 public class Order
 {
   public Order() { }
   public Order(string time, string content)
   {
     this.Time = time;
     this.Content = content;
   }

[DataMember(Order = 0, Name = "time")]
   public string Time { get; set; }

[DataMember(Order = 1, Name = "content")]
   public string Content { get; set; }

}

---------调用方法
public static int uid = Utils.GetAppConfig<int>("KUAIDIAPI_UID", 0);
   public static string sync_url = Utils.GetAppConfig<string>("KUAIDIAPI_SYNC_URL", string.Empty);
   public static string key = Utils.GetAppConfig<string>("KUAIDIAPI_KEY", string.Empty);

/// <summary>
   /// 同步单号查询方法
   /// </summary>
   /// <typeparam name="T"></typeparam>
   /// <param name="id"></param>
   /// <param name="order"></param>
   /// <param name="isSign"></param>
   /// <param name="isLast"></param>
   /// <param name="defaultValue"></param>
   /// <returns></returns>
   public static T APIQueryDataSYNC<T>(string id,
                      string order,
                      bool isSign,
                      bool isLast,
                      T defaultValue)
   {
     try
     {
       string currTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
       string currKey = key;
       if (isSign)
       {
         currKey = Utils.GetSign(uid, key, id, order, currTime);
         currKey += "&issign=true";
       }

string url = sync_url + string.Format("?uid={0}&key={1}&id={2}&order={3}&time={4}",
                     uid, currKey, id, order, HttpUtility.UrlEncode(currTime));

string html = Utils.GET_WebRequestHTML("utf-8", url);

if (!string.IsNullOrEmpty(html))
         return Utils.JsonToObj<T>(html, defaultValue);
     }
     catch (Exception ex)
     {
       throw new Exception(ex.Message);
     }

return defaultValue;
   }

}

/// <summary>
 /// 辅助工具类
 /// </summary>
 public class Utils
 {
   public static string GetSign(int uid, string key, string id, string order, string time)
   {
     string sign = string.Format("uid={0}&key={1}&id={2}&order={3}&time={4}",
                   uid,
                   key,
                   id,
                   HttpUtility.UrlEncode(order.ToLower()),
                   HttpUtility.UrlEncode(time));

return Md5Encrypt(sign.ToLower(), "utf-8");
   }

public static string Md5Encrypt(string strToBeEncrypt, string encodingName)
   {
     MD5 md5 = new MD5CryptoServiceProvider();
     Byte[] FromData = System.Text.Encoding.GetEncoding(encodingName).GetBytes(strToBeEncrypt);
     Byte[] TargetData = md5.ComputeHash(FromData);
     string Byte2String = "";
     for (int i = 0; i < TargetData.Length; i++)
     {
       Byte2String += TargetData[i].ToString("x2");
     }
     return Byte2String;
   }

public static T GetRequest<T>(string key, T defaultValue)
   {
     string value = HttpContext.Current.Request[key];

if (string.IsNullOrEmpty(value))
     {
       return defaultValue;
     }
     else
     {
       try
       {
         return (T)Convert.ChangeType(value, typeof(T));
       }
       catch
       {
         return defaultValue;
       }
     }
   }

public static T GetAppConfig<T>(string key, T defaultValue)
   {
     string value = ConfigurationManager.AppSettings[key];

if (string.IsNullOrEmpty(value))
     {
       return defaultValue;
     }
     else
     {
       try
       {
         return (T)Convert.ChangeType(value, typeof(T));
       }
       catch
       {
         return defaultValue;
       }
     }
   }

public static string ObjToJson<T>(T data)
   {
     try
     {
       DataContractJsonSerializer serializer = new DataContractJsonSerializer(data.GetType());
       using (MemoryStream ms = new MemoryStream())
       {
         serializer.WriteObject(ms, data);
         return Encoding.UTF8.GetString(ms.ToArray());
       }
     }
     catch
     {
       return null;
     }
   }

public static T JsonToObj<T>(string json, T defaultValue)
   {
     try
     {
       System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
       using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
       {
         object obj = serializer.ReadObject(ms);

return (T)Convert.ChangeType(obj, typeof(T));
       }
     }
     catch
     {
       return defaultValue;
     }
   }

public static T XmlToObj<T>(string xml, T defaultValue)
   {
     try
     {
       System.Runtime.Serialization.DataContractSerializer serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(T));
       using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
       {
         object obj = serializer.ReadObject(ms);

return (T)Convert.ChangeType(obj, typeof(T));
       }
     }
     catch
     {
       return defaultValue;
     }
   }

public static string ObjToXml<T>(T data)
   {
     System.Runtime.Serialization.DataContractSerializer serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(T));
     using (MemoryStream ms = new MemoryStream())
     {
       serializer.WriteObject(ms, data);
       return Encoding.UTF8.GetString(ms.ToArray());

}
   }

public static string GET_WebRequestHTML(string encodingName, string htmlUrl)
   {
     string html = string.Empty;

try
     {
       Encoding encoding = Encoding.GetEncoding(encodingName);

WebRequest webRequest = WebRequest.Create(htmlUrl);
       HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
       Stream responseStream = httpWebResponse.GetResponseStream();
       StreamReader streamReader = new StreamReader(responseStream, encoding);

html = streamReader.ReadToEnd();

httpWebResponse.Close();
       responseStream.Close();
       streamReader.Close();
     }
     catch (WebException ex)
     {
       throw new Exception(ex.Message);
     }

return html;
   }

/// <summary>
   /// 将网址类容转换成文本字符串 post请求
   /// </summary>
   /// <param name="data">要post的数据</param>
   /// <param name="url">目标url</param>
   /// <returns>服务器响应</returns>
   public static string POST_HttpWebRequestHTML( string encodingName,
                          string htmlUrl,
                          string postData)
   {
     string html = string.Empty;

try
     {
       Encoding encoding = Encoding.GetEncoding(encodingName);

byte[] bytesToPost = encoding.GetBytes(postData);

WebRequest webRequest = WebRequest.Create(htmlUrl);
       HttpWebRequest httpRequest = webRequest as System.Net.HttpWebRequest;

httpRequest.Method = "POST";
       httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
       httpRequest.ContentType = "application/x-www-form-urlencoded";
       httpRequest.ContentLength = bytesToPost.Length;
       httpRequest.Timeout = 15000;
       httpRequest.ReadWriteTimeout = 15000;
       Stream requestStream = httpRequest.GetRequestStream();
       requestStream.Write(bytesToPost, 0, bytesToPost.Length);
       requestStream.Close();

HttpWebResponse httpWebResponse = (HttpWebResponse)httpRequest.GetResponse();
       Stream responseStream = httpWebResponse.GetResponseStream();
       StreamReader streamReader = new StreamReader(responseStream, encoding);

html = streamReader.ReadToEnd();
     }
     catch (WebException ex)
     {
       throw new Exception(ex.Message);
     }

return html;
   }
 }

/// <summary>
 /// 接口类型
 /// </summary>
 public enum APIType
 {
   //同步查询
   SYNC = 1
 }

基本上代码都在上面。在带www.kuaidiapi.cn上申请一个uid就大功告成。

以上所述就是本文的全部内容了,希望大家能够喜欢。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com