物流即时查询功能-韵达快递

今天我们来聊如何利用快递鸟提供的接口来查询韵达快递的物流轨迹。

讲解之前我们来看一下,接口完成以后的实际显示效果

以下是产品应用截图,调用快递鸟接口获得的轨迹信息:

实际上快递鸟返回的报文信息会更详细,在给客户展示的信息可根据产品需要来封装返回轨迹信息。

现在我们来聊一聊具体实现!

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

测试商户ID:

test1617571

测试API key:

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

API测试地址:

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

我以C#开发为例来讲解

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

https://v.qq.com/x/page/z3068yfw0fl.html(注册登陆获取快递鸟API Key)

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

请求系统级参数说明:

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

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

接口参数:

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

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

http://www.kdniao.com/documents

正如我前面的轨迹截图,韵达快递的编码是YD,物流单号是4602132422443

业务参数报文组合如下:

{‘OrderCode‘:‘‘,‘ShipperCode‘:‘YD‘,‘LogisticCode‘:‘4602132422443‘}

请求的完整报文(URL编码以后):

RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27YD%27%2c%27LogisticCode%27%3a%274602132422443%27%7d%0d%0a++++++++&EBusinessID=1617571&RequestType=1002&DataSign=NTE2NzQzODkwNDE3MzcxZDRhNDdmMTIzMDg0MGZkODA%3d&DataType=2

未编码的请求报文:

RequestData=

{‘OrderCode‘:‘‘,‘ShipperCode‘:‘YD‘,‘LogisticCode‘:‘4602132422443‘}

&EBusinessID=1617571&RequestType=1002&DataSign=NTE2NzQzODkwNDE3MzcxZDRhNDdmMTIzMDg0MGZkODA=&DataType=2

返回的报文信息:

{ "LogisticCode" : "4602132422443", "ShipperCode" : "YD", "Traces" : [ { "AcceptStation" : "【武汉市】 湖北市场部大智公司志翔分部-胡坤(18671561151) 已揽收", "AcceptTime" : "2020-01-16 17:21:14" }, { "AcceptStation" : "【武汉市】 已到达 湖北武汉分拨中心", "AcceptTime" : "2020-01-17 04:04:57" }, { "AcceptStation" : "【武汉市】 已离开 湖北武汉分拨中心 发往 深中地区包", "AcceptTime" : "2020-01-17 05:09:38" }, { "AcceptStation" : "【武汉市】 已离开 湖北武汉分拨中心 发往 广东深圳公司南山区欢乐谷分部", "AcceptTime" : "2020-01-17 23:37:28" }, { "AcceptStation" : "【深圳市】 已到达 广东深圳公司", "AcceptTime" : "2020-01-19 00:12:00" }, { "AcceptStation" : "【深圳市】 已离开 广东深圳公司 发往 广东深圳公司龙华区白石龙分拨分部(13530675811)", "AcceptTime" : "2020-01-19 00:22:53" }, { "AcceptStation" : "【深圳市】 已离开 广东深圳公司龙华区白石龙分拨分部 发往 广东深圳公司龙岗区民治鑫茂分部(0755-61884821|15012728905)", "AcceptTime" : "2020-01-19 05:34:03" }, { "AcceptStation" : "【深圳市】 广东深圳公司龙岗区民治鑫茂分部 派件员 庄泽秋(13411074145)正在为您派送", "AcceptTime" : "2020-01-19 21:37:14" }, { "AcceptStation" : "【代收点】您的快件已送达 鑫茂花园A区2栋1单元负一楼门口2号丰巢智能柜FC75518713保管,地址:鑫茂花园A区2栋1单元负一楼门口2号丰巢智能柜 如有疑问请电联快递员 庄泽秋(13411074145) 投诉电话: 021-39209001", "AcceptTime" : "2020-01-19 21:55:47" }, { "AcceptStation" : "【代收点】您的快件已签收,签收人在鑫茂花园A区2栋1单元负一楼门口2号丰巢智能柜FC75518713(鑫茂花园A区2栋1单元负一楼门口2号丰巢智能柜)领取,投诉电话:021-39209001", "AcceptTime" : "2020-01-20 11:15:10" } ], "State" : "3", "EBusinessID" : "1264783", "Success" : true }

C#关键代码:

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

}

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

http://www.kdniao.com/documents

在项目要发布生产环境时,调用正式的API,快递鸟会检查我们是否有实名认证,如果没有实名认证,是无法调用接口的。

腾讯视频教程:https://v.qq.com/x/page/g3068jcoras.html(如何快速通过实名认证)

提供源码下载:

https://download.csdn.net/download/yanghanwen/12139326

调用第三方物流接口,替换自己的key就能直接使用,主要实现了物流在线轨迹查询,订单订阅,轨迹推送,支持500多家的快递查询接口,包括主流的四通一达,支持上门取件服务,其他接口调用,修改调用指令和参数就能实现。

演示截图:

原文地址:https://www.cnblogs.com/51api/p/12341172.html

时间: 2024-11-07 21:41:14

物流即时查询功能-韵达快递的相关文章

物流即时查询功能-百世快递

今天我们来聊如何利用快递鸟提供的接口来查询百世快递的物流轨迹. 讲解之前我们来看一下,接口完成以后的实际显示效果 以下是产品应用截图,调用快递鸟接口获得的轨迹信息: 实际上快递鸟返回的报文信息会更详细,在给客户展示的信息可根据产品需要来封装返回轨迹信息. 现在我们来聊一聊具体实现! 首先我们准备好需要用到的资源, 测试商户ID: test1617571 测试API key: 554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使用) API测试地址: h

物流即时查询功能-申通快递

今天我们来聊如何利用快递鸟提供的接口来查询[申通快递]的物流轨迹. 讲解之前我们来看一下,接口完成以后的实际显示效果 以下是我调用快递鸟接口获得的申通物流轨迹信息,显示的界面效果需要自己开发: 现在我们来聊一聊具体实现! 首先我们准备好需要用到的资源, 测试商户ID: test1617571 测试API key: 554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使用) API测试地址: http://sandboxapi.kdniao.com:808

如何最快实现物流即使查询功能-物流轨迹查询API

上一篇文章我们介绍了一个物流服务提供商,推荐大家使用快递鸟接口,主要介绍了如何注册账号,获得密钥,找不到注册地址的,我在发一下: http://kdniao.com/reg 今天我们来聊如何利用快递鸟提供的接口来实现即时查询. 在开发之前,我们先来了解一下什么是即时查询,按我的理解就是,我们提供运单号和快递公司编码,然后调用快递鸟提供的查询接口,即可查询运单号的发货情况,我们可以通过这个接口获悉到包裹的收件时间,派送时间,签收时间,签收人,如果体验做的更好一点,通过大数据可以分析这个包裹的预计派

PHP 通过单号查询快递( 申通、EMS、顺丰、圆通、中通、韵达、天天、汇通、全峰、德邦、宅急送)

<?php header('content-type:text/html;charset=utf-8'); /** * @param $url String * @param array $post * @param array $options * @return mixed at most json */ function curl_get($url, array $post = NULL, array $options = array()) { $defaults = array( CUR

调用第三方快递物流公司API接口即时查询信息方法

主要是利用快递鸟提供的物流服务,通过对接快递鸟的API,调用即时查询接口,获取物流信息.这里采用java语言,调用快递鸟的接口为例.步骤如下: 1.首先,得去快递鸟的官方网站注册一个账号并进行实名认证,获得一个用户ID跟API key ,主要是作为个人唯一标识方便调用接口 2.接下来介绍API接口参数:API参数 一.接口描述/说明(1)查询接口支持按照运单号查询(单个查询).?(2)接口需要指定快递单号的快递公司编码,格式不对或则编码错误都会返失败的信息.?如:EMS物流单号应选择快递公司编码

ECSHOP和SHOPEX快递单号查询韵达插件V8.6专版

发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅急送快递.德邦物流.百世快递.汇通快递.中通快递.天天快递等知名快递订单查询服务, 另有全球各国邮局邮政.国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用曲阜市

解决在TP5中无法使用快递鸟的即时查询API

快递鸟的接口对接其实很简单,先去官网注册账号,登陆把基本信息填好,然后在产品管理中订购一下"物流查询",免费,不过其他产品是收费,免费的有对接口调用频率限制,结合自己的应用流量够用就可以. 使用前复制一下账号下的用户ID和API key,并且快递鸟对各个API提供了各种语言的demo,其实下载下来,找一下平时寄快递的运单号,本地运行一下就能用了.(名称: KdApiSearchDemo) 其实拿到demo代码,可以放到项目中,因为demo是以面向过程写的,所以为了方便自然就想封装一下.

物流轨迹查询API - 产品应用篇

上一篇文章我们介绍了,如何利用快递鸟提供的接口来实现即时查询以及物流跟踪.提供了C#版本,Java版本, PHP的代码来实现接口对接, 今天我们聊聊,如何应用这个产品,能为我们做些什么? 如果你是电商平台.自营商城.ERP.打单工具.楼宇/物业系统.云打印.微信小程序/公众号.APP.OA等,那你一定需要这个功能,有配货业务,就有获取物流轨迹信息的需求. 快递鸟接口作为第三方接口,集合了多家物流的数据,通过规范格式统一输出一套规则,不对物流信息做处理,不做语言转换,只对数据字段做转换,分析物流状

JAVA 快递查询接口API调用-快递鸟接口

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEn