当前位置: 移动技术网 > IT编程>开发语言>c# > C#实现快递api接口调用方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

无平台限制,依赖于快递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
  }

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网