中国邮政包裹快递查询(中国邮政物流官网)
如何使用快鸟提供的接口查询邮政快递的物流轨迹?
在解释之前,我们先来看看界面完成后的实际显示效果。
以下为产品应用截图,调用快鸟接口获取的轨迹信息:
其实快鸟返回的消息信息会更详细,展示给客户的信息可以根据产品需求进行包装。
现在来说说具体的实现吧!
首先,我们准备好我们需要的资源,
测试商家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#开发为例来说明。
接下来,我们来解释一下请求参数。
请求系统级参数描述:
备注:R-必选,O-可选,C-该参数在消息中的某些条件下是可选的。
这里说的是系统级参数,也相当于公共参数。这些参数需要传递给每个接口。
接口参数:
参数,也称为业务参数,随业务接口、参数的字段和内容而变化,随业务而变化。这里实现即时查询接口,请求指令类型为1002。官网,一个快递鸟,要求必须传快递公司代码和物流号,邮政快递代码是YZPY。
要查看其他快递公司的代码,请单击此链接:
http://www.kdniao.com/documents
就像我面前的赛道截图,邮政快递编码是YZPY,物流编号是9861545869525。
业务参数消息组合如下:
{#039;订单代码 # 039;:#039;#039;,#039;托运人代码 # 039;:#039;YZPY # 039,#039;物流代码 # 039;:#039;9861545869525#039;}
完整的请求消息(URL编码后):
request data = % 0d % 0a ++++++++++% 7b % 27 order code % 27% 3a % 27% 27% 2c % 27 shipper code % 27% 3a % 27 yzpy % 27% 2c % 27 logistic code % 27% 3a % 279861545869525% 27% 7d % 0d % 0a++++++++++++++。EBusinessID = 1264783 amp请求类型= 1002 ampdata sign = mjq 2 ywzimtu 1 mzc 5 ymfimtftkmwyyji 3 ytlimjrkymu % 3d amp;数据类型=2
未编码的请求消息:
请求数据=
{#039;订单代码 # 039;:#039;#039;,#039;托运人代码 # 039;:#039;YZPY # 039,#039;物流代码 # 039;:#039;9861545869525#039;}
ampEBusinessID = 1264783 amp请求类型= 1002 ampdata sign = mjq 2 ywzimtu 1 mzc 5 ymfimtfkmwyyji 3 ytlimjrkymu = amp;数据类型=2
返回的消息信息:
{
"物流代码 quot: quot9861545869525 quot,
"托运人代码 quot: quotYZPY quot,
"痕迹 quot: [
{
"接受站 quot: quot【邮政仙居包裹快递部】已收到,发货代理:周峰,电话:18358689325 quot,
"接受时间 quot: quot2020-02-19 16:10:29 quot;
},
{
"接受站 quot: quot离开【邮政仙居包裹快递部】,下一站【仙居中心】”,
"接受时间 quot: quot2020-02-19 16:10:33 quot;
},
{
"接受站 quot: quot到达【浙江省仙居县加工中心】”,
"接受时间 quot: quot2020-02-19 16:10:34 quot;
},
{
"接受站 quot: quot离开【浙江省仙居县处理中心】,下一站【台州中心局邮件处理中心】",
"接受时间 quot: quot2020-02-21 11:13:33 quot;
}
],
"国家 quot: quot2 quot,
"电子商务协会 quot: quot1264783 quot,
"成功 gt;:正确
}
# c键码:
/// lt;总结 gt
///物流轨迹实时查询
/// lt;/summary gt;
/// lt;param name = quoturl quot gthttp://sandbox API . kdn iao . com:8080/kdniaosandbox/gateway/extraceface invoke . JSON lt;/param gt;
/// lt;param name = quot电子商务协会 quot gttest1617571lt/param gt;
/// lt;param name = quotappKey quot gt554343 B2-7252-439 b-b4eb-1 af 42 c8 f 2175 lt;/param gt;
/// lt;param name = quot请求数据 quot gt{#039;订单代码 # 039;:#039;#039;,#039;托运人代码 # 039;:#039;ZTO # 039;,#039;物流代码 # 039;:#039;78120038107849#039;} lt/param gt;
/// lt;returns gt lt/returns gt;
公共字符串getOrderTracesByJson(字符串url,字符串eBusinessID,字符串appKey,字符串requestData)
{
字典 ltstring,string gtparam =新词典 ltstring,string gt();
参数。添加( quot请求数据 quot,属性。UrlEncode(requestData,编码。UTF8));
参数。添加( quot电子商务协会 quot,ebuinessid);
参数。添加( quot请求类型, quot1002 quot);
string data sign = encrypt(request data,appKey, quotUTF-8 quot;);
参数。添加( quot数据签名 quot,属性。UrlEncode(dataSign,编码。UTF8));
参数。添加( quot数据类型 quot, quot2 quot);
string result = sendPost(url,param);
返回结果;
}
/// lt;总结 gt
///通过post提交数据,返回网页源代码。
/// lt;/summary gt;
/// lt;param name = quoturl quot gt发送的请求的URL
/// lt;param name = quot参数 quot gt请求的参数集
/// lt;returns gt远程资源的响应结果
私有字符串sendPost(字符串url,字典 ltstring,string gt参数)
{
字符串结果= quot";
StringBuilder postData = new StringBuilder();
if (param!= null amp amp参数。Count gt0)
{
foreach(参数中的变量p)
{
if (postData。长度 gt0)
{
postData。追加( quot amp");
}
postData。追加(p . Key);
postData。追加( quot= quot);
postData。追加(参数值);
}
}
//返回postData。ToString();
byte[] byteData =编码。get encoding( quot;UTF-8 quot;).GetBytes(postData。ToString());
尝试
{
HttpWebRequest请求= (HttpWebRequest)WebRequest。创建(URL);
请求。ContentType = quotapplication/x-www-form-urlencoded quot;;
请求。Referer = url
请求。接受= quot*/* quot;;
请求。超时= 30 * 1000;
请求。UserAgent = quotMozilla/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) quot;;
请求。Method = quot帖子 quot;
请求。ContentLength = byteData。长度;
Stream stream =请求。GetRequestStream();
溪流。写(字节数据,0,字节数据。长度);
溪流。flush();
溪流。close();
HttpWebResponse响应= (HttpWebResponse)请求。GetResponse();
流backStream =响应。GetResponseStream();
StreamReader Sr = new StreamReader(back stream,Encoding。get encoding( quot;UTF-8 quot;));
result = Sr . ReadToEnd();
Sr . Close();
逆流而上。close();
回应。close();
请求。abort();
}
catch(例外ex)
{
结果= ex。消息;
}
返回结果;
}
/// lt;总结 gt
///电子商务签名签名
/// lt;/summary gt;
/// lt;param name = quot内容 quot gt内容
/// lt;param name = quot键值 quot gtAppkey lt/param gt;
/// lt;param name = quot字符集 quot gtURL编码
/// lt;returns gt数据签名
私有字符串加密(字符串内容、字符串键值、字符串字符集)
{
if (keyValue!=空)
{
返回base64(MD5(content + keyValue,charset),charset);
}
返回base64(MD5(内容,字符集),字符集);
}
/// lt;总结 gt
///字符串MD5加密
/// lt;/summary gt;
/// lt;param name = quotstr quot gt要加密的字符串
/// lt;param name = quot字符集 quot 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 = quot";
foreach(somme中的字节a)
{
如果(a lt16)
ret+= quot;0 gt;+a . ToString( quot;X quot);
其他
ret+= a . ToString( quot;X quot);
}
返回ret。to lower();
}
捕捉
{
扔;
}
}
/// lt;总结 gt
/// base64编码
/// lt;/summary gt;
/// lt;param name = quotstr quot gt内容
/// lt;param name = quot字符集 quot gt编码方法
/// lt;returns gt lt/returns gt;
私有字符串base64(字符串str,字符串字符集)
{
返回转换。ToBase64String(系统。text . encoding . get encoding(charset)。GetBytes(str));
}
附上详细的接口文档给大家:
http://www.kdniao.com/documents
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)