京东快递 单号查询接口 C# .net

如何利用快递鸟提供的接口来查询京东快递的物流轨迹。

首先我们准备好需要用到的资源,

测试商户ID:

test1617571

测试API key:

554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使用)

API测试地址:

http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json

接口参数,也叫业务参数,请求的业务接口不同,参数的字段,内容也不同,是跟着业务变化的,这里我们实现的是即时查询接口,请求指令类型:1002,快递鸟官网要求必须传递快递公司编码和物流单号 ,京东快递的编码是JD

如要查看其他快递公司的编码,点击此链接:

http://www.kdniao.com/documents

我们用真实单号(JDVC02975597147)来完成轨迹接口调用,

请求 JSON

{‘OrderCode’:’’,‘ShipperCode’:JD’,LogisticCode’:’ JDVC02975597147’}

请求的完整报文(URL编码以后):RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27JD%27%2c%27LogisticCode%27%3a%27JDVC02975597147%27%2c%27CustomerName%27%3a%27%e5%95%86%e5%ae%b6%e7%bc%96%e7%a0%81%27%7d%0d%0a++&EBusinessID=1264783&RequestType=1002&DataSign=NTBlZDNiMDdlNDYxNDBjYjc1ZjFkNDA2YTgwNzM3OTc%3d&DataType=2

未编码的请求报文:

RequestData= {‘OrderCode’:’’,‘ShipperCode’:‘JD’,‘LogisticCode’:‘JDVC02975597147’,‘CustomerName’:‘商家编码’} & EBusinessID=1264783&RequestType=1002&DataSign=NTBlZDNiMDdlNDYxNDBjYjc1ZjFkNDA2YTgwNzM3OTc=&DataType=2

返回报文信息

{
                   "LogisticCode": "JDVC02975597147",
                   "ShipperCode": "JD",
                   "Traces": [{
                                      "AcceptStation": "揽收任务已分配给刘杰添,配送员电话13902201195",
                                      "AcceptTime": "2020-02-28 15:06:32"
                   }, {
                                      "AcceptStation": "货物已交付京东物流",
                                      "AcceptTime": "2020-02-28 19:01:17"
                   }, {
                                      "AcceptStation": "配送员李连胜已经揽收完成",
                                      "AcceptTime": "2020-02-28 19:01:17"
                   }, {
                                      "AcceptStation": "货物已到达【广州黄埔分拣中心】",
                                      "AcceptTime": "2020-02-28 23:14:54"
                   }, {
                                      "AcceptStation": "货物已完成分拣,离开【广州黄埔分拣中心】",
                                      "AcceptTime": "2020-02-28 23:31:53"
                   }, {
                                      "AcceptStation": "货物已完成分拣,离开【佛山狮山分拣中心】",
                                      "AcceptTime": "2020-02-29 02:53:29"
                   }, {
                                      "AcceptStation": "配送员开始配送,请您准备收货,配送员,赵罗灿,手机号,18818484932",
                                      "AcceptTime": "2020-02-29 11:40:35"
                   }, {
                                      "AcceptStation": "货物已分配,等待配送",
                                      "AcceptTime": "2020-02-29 12:08:59"
                   }, {
                                      "AcceptStation": "货物已由【岗坪镇加油站正对面京东家电店内】代收,感谢您选择京东物流!",
                                      "AcceptTime": "2020-02-29 17:49:51"
                   }],
                   "State": "3",
                   "EBusinessID": "1264783",
                   "Success": true
}
//电商ID
string eEBusinessID = "test1617571";
 //电商加密私钥,快递鸟提供,注意保管,不要泄漏
string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";
 //请求url
string reqURL = "http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
//请求指令 
string reqType="1002";
//2-json 
string dataType = "2"; 
//字符编码采用UTF-8 
string charset = "UTF-8"; 
//JSON字符串string 
string jsonStr = 
"{\"OrderCode\":\"\",\"ShipperCode\":\"JTSD\",\"LogisticCode\":\"JT0000052600488\"}" ;
//把(jsonStr+APIKey)进行MD5加密
string md5Str=MD5(jsonStr + apiKey, charset);
//把md5Str 进行Base64编码
string base64Str=base64(md5Str,charset);
//进行URL编码 (utf-8)
string datasign = HttpUtility.UrlEncode(base64Str, charset); 
//请求报文参数 
string postStr = "RequestType=reqType&EBusinessID= eEBusinessID&RequestData=jsonStr 
&DataSign= datasign&DataType=dataType"; 
//通讯协议使用Http协议Post请求方式 返回轨迹数据
string post = SendPost(reqURL, postStr);
//获取到的post数据就是快递鸟返回的完整报文,接下来自己写一个解析json的方法就能获取到里面的字段信息。
10.3,C#调用方法

///<summary>
    /// 字符串MD5加密
    ///</summary>
    ///<param name="str">要加密的字符串</param>
    ///<param name="charset">编码方式</param>
    ///<returns>密文</returns>
    private string MD5(string str, string charset)
    {
        byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);
        try
        {
            System.Security.Cryptography.MD5CryptoServiceProvider check;
            check = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] somme = check.ComputeHash(buffer);
            string ret = "";
            foreach (byte a in somme)
            {
                if (a < 16)
                    ret += "0" + a.ToString("X");
                else
                    ret += a.ToString("X");
            }
            return ret.ToLower();
        }
        catch
        {
            throw;
        }
    }
    /// <summary>
    /// base64编码
    /// </summary>
    /// <param name="str">内容</param>
    /// <param name="charset">编码方式</param>
    /// <returns></returns>
    private string base64(String str, String charset)
    {
        return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}
 /// <summary>
    /// Post方式提交数据,返回网页的源代码
    /// </summary>
    /// <param name="url">发送请求的 URL</param>
    /// <param name="postData">请求报文参数</param>
    /// <returns>远程资源的响应结果</returns>
    private string SendPost(string url, string postData)
    {
        string result = "";
        byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = url;
            request.Accept = "*/*";
            request.Timeout = 30 * 1000;
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET
 CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
            request.Method = "POST";
            request.ContentLength = byteData.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(byteData, 0, byteData.Length);
            stream.Flush();
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream backStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));
            result = sr.ReadToEnd();
            sr.Close();
            backStream.Close();
            response.Close();
            request.Abort();
        }
        catch (Exception ex)
        {
            result = ex.ToString();
        }
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值