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

 更新时间:2020年6月25日 11:32  点击:2014

无平台限制,依赖于快递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就大功告成。

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

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25