当前位置:首页 > 林北杂谈 > 正文

圆通快递运单号查询(物流跟踪系统)


今天我们就来谈谈如何使用快鸟提供的接口来查询童渊快递的物流轨迹。

在解释之前,我们先来看看界面完成后的实际显示效果。

以下是中通通过调用快鸟接口获得的物流轨迹信息。显示的界面效果需要我们自己开发:


圆通快递运单号查询(物流跟踪系统)  第1张

现在来说说具体的实现吧!

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

测试商家ID:

测试1617571

测试API密钥:

54343 B2-7252-439 b-B4EB-1 af 42 c8 f 2175(该键只能在测试环境中使用)

API测试地址:

http://sandbox API . kdn iao . com:8080/kdniaosandbox/gateway/extraceface invoke . JSON

我就以C#开发为例来说明一下,

如果你还没有注册快鸟,或者还不知道如何获取API Key,可以访问这个腾讯视频教程:

Https://v.qq.com/x/page/z3068yfw0fl.html(注册并登录以获取express bird API密钥)

接下来,我们来解释一下请求参数。

请求系统级参数描述:


圆通快递运单号查询(物流跟踪系统)  第2张

备注:R-必选,O-可选,C-该参数在消息中的某些条件下是可选的。

这里说的是系统级参数,也相当于公共参数。这些参数需要传递给每个接口。

接口参数:


圆通快递运单号查询(物流跟踪系统)  第3张

参数,也称为业务参数,随业务接口、参数的字段和内容而变化,随业务而变化。这里实现即时查询接口,请求指令类型为1002。快鸟官网要求必须通过快递公司代码和物流号。童渊快递的代码是YTO。

要查看其他快递公司的代码,请单击此链接:

http://www.kdniao.com/documents

就像我面前的赛道截图一样,童渊快递的代码是YTO,物流编号是78120038107849。

业务参数消息组合如下:

{'订单代码& # 39;:'','托运人代码& # 39;:'YTO & # 39;,'物流代码& # 39;:'YT4313813113511 & # 39}

完整的请求消息(URL编码后):

request data = % 0d % 0a ++++++++% 7b % 27 order code % 27% 3a % 27% 27% 2c % 27 shipper code % 27% 3a % 27 yto % 27% 2c % 27 logistic code % 27% 3a % 27yt 4313813113511% 27% 7d % 0d % 0a ++++++++++++++& e businessid = 1617571 & request type = 1002 & datas

未编码的请求消息:

RequestData = { & # 39订单代码& # 39;:'','托运人代码& # 39;:'YTO & # 39;,'物流代码& # 39;:'YT4313813113511 & # 39}

& e businessid = 1617571 & request type = 1002 & data sign = yjuxyznlytbimjyyjizje 4 zgq 4 zjgyyjhngrizjq = & DataType = 2

返回的消息信息:

{

"物流代码& # 34;: "YT4313813113511 & # 34,

"托运人代码& # 34;: "YTO & # 34;,

"痕迹& # 34;: [{

"AcceptStation & # 34: "[青岛胶州市公司山东省]已收到张富强(18521137295)& # 34;,

"AcceptTime & # 34: "2019-12-29 18:15:41"

}, {

"AcceptStation & # 34: "【青岛胶州市公司】已经打包& # 34;,

"AcceptTime & # 34: "2019-12-29 18:41:22"

}, {

"AcceptStation & # 34: "【山东省青岛市胶州市】已发出下一站【青岛中转中心公司】& # 34;,

"AcceptTime & # 34: "2019-12-29 18:44:43"

}, {

"AcceptStation & # 34: "【青岛转运中心公司】已收到& # 34;,

"AcceptTime & # 34: "2019-12-29 19:40:51"

}, {

"AcceptStation & # 34: "【青岛转运中心】已发出下一站【深圳转运中心公司】& # 34;,

"AcceptTime & # 34: "2019-12-29 20:10:01"

}, {

"AcceptStation & # 34: "【深圳转运中心公司】已收到& # 34;,

"AcceptTime & # 34: "2019-12-31 13:39:41"

}, {

"AcceptStation & # 34: "【深圳转运中心】已发出下一站【广东省深圳宝安机场公司】& # 34;,

"AcceptTime & # 34: "2019-12-31 14:04:58"

}, {

"AcceptStation & # 34: "【广东省深圳市宝安机场公司】已赚& # 34;,

"AcceptTime & # 34: "2020-01-01 01:43:02"

}, {

"AcceptStation & # 34: "【广东省深圳市宝安机场公司】调度员:罗佳宁电话:13924819329如有疑问,请联系:0755-27393821 & # 34;,

"AcceptTime & # 34: "2020-01-01 09:36:26"

}, {

"AcceptStation & # 34: "客户签名:B5超人已签约YTO快递,我们期待再次为您服务。如有疑问,请联系:13924819329,投诉电话0755-27393821 & # 34;,

"AcceptTime & # 34: "2020-01-02 12:52:32"

}],

"国家& # 34;: "3",

"电子商务& # 34;: "1617571",

"成功& # 34;:正确

} {

"订单代码& # 34;: "012657018199",

"托运人代码& # 34;: "STO & # 34;,

"工资类型& # 34;: 1,

"MonthCode & # 34: "1234567890",

"ExpType & # 34: 1,

"发件人& # 34;: {

"公司& # 34;: "吕& # 34;,

"姓名& # 34;: "泰勒& # 34;,

"移动& # 34;: "15018442396",

"普罗文斯名称& # 34;: "上海& # 34;,

"CityName & # 34: "上海& # 34;,

"ExpAreaName & # 34: "青浦区& # 34;,

"地址& # 34;: "明珠路& # 34;

},

"接收者& # 34;: {

"公司& # 34;: "GCCUI & # 34,

"姓名& # 34;: "扬恩& # 34;,

"移动& # 34;: "15018442396",

"普罗文斯名称& # 34;: "北京& # 34;,

"CityName & # 34: "北京& # 34;,

"ExpAreaName & # 34: "朝阳区& # 34;,

"地址& # 34;: "三里屯大街& # 34;

},

"商品& # 34;: [{

"GoodsName & # 34: "鞋子& # 34;,

"商品数量& # 34;: 1,

"GoodsWeight & # 34: 1

}],

"重量& # 34;: 1,

"数量& # 34;: 1,

"卷& # 34;: 0,

"备注& # 34;: "小心轻放& # 34;

}

# c键码:

///& lt;总结& gt

///物流轨迹实时查询

///& lt;/summary & gt;

///& lt;param name = & # 34网址& # 34;& gthttp://sandbox API . kdn iao . com:8080/kdniaosandbox/gateway/extraceface invoke . JSON & lt;/param & gt;

///& lt;param name = & # 34电子商务& # 34;& gttest1617571</param & gt;

///& lt;param name = & # 34appKey & # 34& gt554343 B2-7252-439 b-b4eb-1 af 42 c8 f 2175 & lt;/param & gt;

///& lt;param name = & # 34requestData & # 34& gt{'订单代码& # 39;:'','托运人代码& # 39;:'ZTO & # 39;,'物流代码& # 39;:'78120038107849'} & lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共字符串getOrderTracesByJson(字符串url,字符串eBusinessID,字符串appKey,字符串requestData)

{

字典& ltstring,string & gtparam =新词典& ltstring,string & gt();

参数。添加(& # 34;RequestData & # 34,属性。UrlEncode(requestData,编码。UTF8));

参数。添加(& # 34;电子商务& # 34;,ebuinessid);

参数。添加(& # 34;请求类型& # 34;, "1002");

string data sign = encrypt(request data,appKey,& # 34;UTF-8 & # 34;);

参数。添加(& # 34;DataSign & # 34,属性。UrlEncode(dataSign,编码。UTF8));

参数。添加(& # 34;数据类型& # 34;, "2");

string result = sendPost(url,param);

返回结果;

}

///& lt;总结& gt

///通过post提交数据,返回网页源代码。

///& lt;/summary & gt;

///& lt;param name = & # 34网址& # 34;& gt发送的请求的URL

///& lt;param name = & # 34param & # 34& gt请求的参数集

///& lt;returns & gt远程资源的响应结果

私有字符串sendPost(字符串url,字典& ltstring,string & gt参数)

{

字符串结果= & # 34;";

StringBuilder postData = new StringBuilder();

if (param!= null && param。Count & gt0)

{

foreach(参数中的变量p)

{

if (postData。长度& gt0)

{

postData。追加(& # 34;&");

}

postData。追加(p . Key);

postData。追加(& # 34;=");

postData。追加(参数值);

}

}

//返回postData。ToString();

byte[] byteData =编码。get encoding(& # 34;UTF-8 & # 34;).GetBytes(postData。ToString());

尝试

{

HttpWebRequest请求= (HttpWebRequest)WebRequest。创建(URL);

请求。ContentType = & # 34application/x-www-form-urlencoded & # 34;;

请求。Referer = url

请求。接受= & # 34;*/*";

请求。超时= 30 * 1000;

请求。UserAgent = & # 34Mozilla/4.0(兼容;MSIE 6.0Windows NT 5.1SV1。净CLR 2 . 0 . 50727;。净CLR 3 . 0 . 04506 . 648;。净CLR 3 . 0 . 4506 . 2152;。净CLR 3 . 5 . 30729)& # 34;;

请求。方法= & # 34;邮政& # 34;;

请求。ContentLength = byteData。长度;

Stream stream =请求。GetRequestStream();

溪流。写(字节数据,0,字节数据。长度);

溪流。flush();

溪流。close();

HttpWebResponse响应= (HttpWebResponse)请求。GetResponse();

流backStream =响应。GetResponseStream();

StreamReader Sr = new StreamReader(back stream,Encoding。get encoding(& # 34;UTF-8 & # 34;));

result = Sr . ReadToEnd();

Sr . Close();

逆流而上。close();

回应。close();

请求。abort();

}

catch(例外ex)

{

结果= ex。消息;

}

返回结果;

}

///& lt;总结& gt

///电子商务签名签名

///& lt;/summary & gt;

///& lt;param name = & # 34内容& # 34;& gt内容

///& lt;param name = & # 34keyValue & # 34& gtAppkey & lt/param & gt;

///& lt;param name = & # 34字符集& # 34;& gtURL编码

///& lt;returns & gt数据签名

私有字符串加密(字符串内容、字符串键值、字符串字符集)

{

if (keyValue!=空)

{

返回base64(MD5(content + keyValue,charset),charset);

}

返回base64(MD5(内容,字符集),字符集);

}

///& lt;总结& gt

///字符串MD5加密

///& lt;/summary & gt;

///& lt;param name = & # 34str & # 34& gt要加密的字符串

///& lt;param name = & # 34字符集& # 34;& gt编码方法

///& lt;returns & gt密文

私有字符串MD5(字符串,字符串字符集)

{

byte[] buffer = System。text . encoding . get encoding(charset)。GetBytes(str);

尝试

{

系统。security . cryptography . MD 5 cryptoserviceprovider检查;

检查=新系统。security . cryptography . MD 5 cryptoserviceprovider();

byte[] somme = check。ComputeHash(缓冲区);

string ret = & # 34";

foreach(somme中的字节a)

{

如果(a & lt16)

ret+= & # 34;0"+a . ToString(& # 34;X & # 34);

其他

ret+= a . ToString(& # 34;X & # 34);

}

返回ret。to lower();

}

捕捉

{

扔;

}

}

///& lt;总结& gt

/// base64编码

///& lt;/summary & gt;

///& lt;param name = & # 34str & # 34& gt内容

///& lt;param name = & # 34字符集& # 34;& gt编码方法

///& lt;returns & gt& lt/returns & gt;

私有字符串base64(字符串str,字符串字符集)

{

返回转换。ToBase64String(系统。text . encoding . get encoding(charset)。GetBytes(str));

}

附上详细的接口文档给大家:

http://www.kdniao.com/documents

0