本期的内容是讲:如何利用快递鸟提供的接口来查询中通快递的物流轨迹。

​我们先来看一下,接口完成以后的实际效果

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

现在我们来具体实现!

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

注册一个账号:点击注册

测试商户ID:

test1617571

测试API key:

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

API测试地址:

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

我以C#开发为例来讲解,中通快递查询接口

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

请求系统级参数说明:

备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)

这里提到了系统级参数,也相当于是公用参数,这些参数是调用每个接口都是必须要传参的。

接口参数:

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

如要查看其他快递公司的编码,扫描下方二维码领取:

正如我前面的轨迹截图,是一个中通的轨迹数据,中通快递的编码是ZTO,物流单号是78120038107849

业务参数报文组合如下:

{'OrderCode':'','ShipperCode':'ZTO','LogisticCode':'78120038107849'}

请求的完整报文:

RequestData=%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27ZTO%27%2c%27LogisticCode%27%3a%2778120038107849%27%7d&EBusinessID=1617571&RequestType=1002&DataSign=YzBmYTViYmExZmFhOGY1ZTY3MWY5OGFjYWRhNWVjNjU%3d&DataType=2

返回的报文信息:

`{

"LogisticCode": "78120038107849",

"ShipperCode": "ZTO",

"Traces": [

{

"AcceptStation": "【济源市】 【济源】(0391-6965909) 的 张霞(18839032214) 已揽收",

"AcceptTime": "2020-01-16 18:30:33"

},

{

"AcceptStation": "【济源市】 快件离开 【济源】 已发往 【深圳中心】",

"AcceptTime": "2020-01-16 18:36:41"

},

{

"AcceptStation": "【新乡市】 快件已经到达 【新乡中转】",

"AcceptTime": "2020-01-16 22:45:49"

},

{

"AcceptStation": "【新乡市】 快件离开 【新乡中转】 已发往 【深圳中心】",

"AcceptTime": "2020-01-16 22:47:48"

},

{

"AcceptStation": "【深圳市】 快件已经到达 【深圳中心】",

"AcceptTime": "2020-01-18 04:05:46"

},

{

"AcceptStation": "【深圳市】 快件离开 【深圳中心】 已发往 【深圳龙华】",

"AcceptTime": "2020-01-18 08:34:46"

},

{

"AcceptStation": "【深圳市】 快件已经到达 【深圳龙华】",

"AcceptTime": "2020-01-18 13:14:10"

},

{

"AcceptStation": "【深圳市】 【深圳龙华】 的陈智龙-王颖(13923773902) 正在第1次派件, 请保持电话畅通,并耐心等待(95720为中通快递员外呼专属号码,请放心接听)",

"AcceptTime": "2020-01-18 16:38:35"

},

{

"AcceptStation": "【深圳市】 快件已由【丰巢的鑫茂花园A区(丰巢智能快递柜)】代签收, 如有问题请电联(13923773902 / 4000633333,18025858922), 感谢您使用中通快递, 期待再次为您服务!",

"AcceptTime": "2020-01-18 17:32:15"

}

],

"State": "3",

"EBusinessID": "1617571",

"Success": true

}`

C#关键代码:

`  string requestData = "{'OrderCode':'','ShipperCode':'ZTO','LogisticCode':'78120038107849'}";

string dataSign = encrypt(requestData, “554343b2-7252-439b-b4eb-1af42c8f2175”, "UTF-8");

/// <summary>

/// 即时查询物流轨迹

/// </summary>

/// <param name="url">​ ​http://sandboxapi.kdniao.com​​:8080/kdniaosandbox/gateway/exterfaceInvoke.json</param>

/// <param name="eBusinessID">test1617571</param>

/// <param name="appKey">554343b2-7252-439b-b4eb-1af42c8f2175</param>

/// <param name="requestData">{'OrderCode':'','ShipperCode':'ZTO','LogisticCode':'78120038107849'}</param>

/// <returns></returns>

public string getOrderTracesByJson(string url,string eBusinessID, string appKey, string requestData)

{

Dictionary<string, string> param = new Dictionary<string, string>();

param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));

param.Add("EBusinessID", eBusinessID);

param.Add("RequestType", "1002");

string dataSign = encrypt(requestData, appKey, "UTF-8");

param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));

param.Add("DataType", "2");

string result = sendPost(url, param);

return result;

}

/// <summary>

/// Post方式提交数据,返回网页的源代码

/// </summary>

/// <param name="url">发送请求的 URL</param>

/// <param name="param">请求的参数集合</param>

/// <returns>远程资源的响应结果</returns>

private string sendPost(string url, Dictionary<string, string> param)

{

string result = "";

StringBuilder postData = new StringBuilder();

if (param != null && param.Count > 0)

{

foreach (var p in param)

{

if (postData.Length > 0)

{

postData.Append("&");

}

postData.Append(p.Key);

postData.Append("=");

postData.Append(p.Value);

}

}

// return postData.ToString();

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.Message;

}

return result;

}

///<summary>

///电商Sign签名

///</summary>

///<param name="content">内容</param>

///<param name="keyValue">Appkey</param>

///<param name="charset">URL编码 </param>

///<returns>DataSign签名</returns>

private string encrypt(String content, String keyValue, String charset)

{

if (keyValue != null)

{

return base64(MD5(content + keyValue, charset), charset);

}

return base64(MD5(content, charset), charset);

}

///<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));

}

`

中通快递 | 轨迹查询接口相关推荐

  1. 申通快递轨迹查询----java完整demo

    开发前需先申请接口API.话不多说,直接上代码,发送的参数可以参考申通开放平台的开发文档 申通开放平台- -快递轨迹查询 下面放一张摘自申通开放平台的对接图片. public class UPostM ...

  2. python调用api应用接口_第三方免费快递物流查询接口平台(快递鸟)api接口调用...

    随着网购的发展,快递业也随之壮大.快递查询接口对接的需求量也越来越大,下面是对免费快递接口做的整理,并附上调用流程,分享给大家. 项目开发中,有些需求难免会用到关于快递的一些Api接口:本篇主要介绍的 ...

  3. 通过快递鸟如何接入中通快递电子面单

    一.接入前准备(TO商家业务人员) 1.申请快递鸟用户ID和API key 1.1登录快递鸟官网注册页面http://www.kdniao.com/reg注册快递鸟账号: 1.2登录快递鸟用户管理后台 ...

  4. ecshop插件_ECSHOP和SHOPEX快递单号查询中通快递插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...

  5. 支持批量查询中通快递单号的推荐软件

    中通快递单号可以一次性查询吗?为了方便用户查询快递物流信息,今天小编就跟大家分享一款辅助软件:"固乔快递查询助手",它可以为用户提供中通快递物流单号的一次性查询功能,下面为大家分享 ...

  6. win 8 store app 免费中通快递查询 隐私声明

    免费中通快递查询 隐私声明: 1.我们不会收集和使用你的个人信息. 2.用户使用我们的服务,应遵守国家有关法律法规和规章制度. 3.用户在使用过程中遇到任何问题,可以通过评论与评分将建议反馈给我们,我 ...

  7. 教你怎样同时查询中通快递多个未签收单号的物流信息

    怎样在电脑上同时查询多个中通快递未签收单号的物流信息呢?今天小编给大家分享一款查询软件--快递批量查询高手,下面一起来操作. 前提条件 快递批量查询高手 多个中通单号 操作步骤 运行快递批量查询高手, ...

  8. 想要批量查询中通快递单号的话,要用什么辅助软件来实现

    从事电商的小伙伴是不是经常要对大量中通快递单号进行查询呢?逐个查询的话不但需要认真核对中通快递单号是否正确,这需要浪费大量的时间和精力.今天小编教大家一招,可以帮助大家轻松快速查询大量中通快递单号,一 ...

  9. 快速查询中通快递物流信息,筛选出更新量为1的单号标色

    快递已成为我们购物的生活的一部分,但是单号中的物流信息如何快速查询出呢?并查看各个单号揽收后没有再发往下一站,也就是快递中的更新量.这里给大家分享快递查询出多个单号物流信息,分析出更新量只有1的单号. ...

  10. 物流 快递信息查询接口(阿里快递物流接口案例)

    [快递查询api,快递物流自动单号识别]可查询快递物流信息近500+家全国快递查询API,1个单号,自动识别,包括:顺丰.申通.圆通.韵达.中通.汇通.EMS.天天.国通.德邦.宅急送等几百家快递物流 ...

最新文章

  1. 测试函数: Ackely,Rastrigin,Griewangk,SumSquartes,Sphere,Quartic,Schwefel' Problem 12等
  2. AndroidStudio-4-如何导入项目
  3. 分支语句、循环语句、函数初步
  4. windows当代理服务器-CCProx的使用
  5. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
  6. 在PHP中对象真的是按引用传递的吗
  7. android 微信支付过程,android 微信 支付 接入流程总结
  8. 【pwnable.kr】passcode
  9. 2014 北京区域赛 dp
  10. 《学习笔记》在AngularJS视图中实现指令
  11. windows xp 自动关机命令
  12. css怎么实现三角形边框,css border实现的三角形图案
  13. Git基础(18):如何使用GitLab
  14. 程序员转岗产品经理有哪些优势和劣势?
  15. 思科路由器如何强行中断命令
  16. 企业微信组织架构同步优化的思路
  17. 《两化融合 数字化转型 价值效益参考模型》国家标准全文
  18. PDF文件签名与盖章
  19. think php 广告位,海报广告位管理 - 简单好用的海报和广告管理工具 – 基于ThinkPHP和Bootstrap的极速后台开发框架...
  20. 关于二叉排序树的平均查找长度的计算

热门文章

  1. static关键字分析(含解析图)
  2. 你可能不知道的iOS性能优化建议(来自前Apple工程师)
  3. 用java做出长方体的表面积_计算长方体、四棱锥的表面积和体积(Java)acm.sdut...
  4. UG NX二次开发(C#)-装配-替换组件
  5. UG二次开发 获得文档存盘历史
  6. 移动硬盘linux双系统,安装ubuntu到移动硬盘(UEFI+GPT),实现在别的电脑也可以使用(详细教程),...
  7. 【数学】T检验(显著性检验)
  8. 上传图片,使用很简单的办法上传图片
  9. 快速实现中文翻译多国语言
  10. 卡通渲染 类罪恶装备与崩坏3渲染总结