浅谈各种快递单号查询接口种类及对接方法
快递单号查询自动识别接口API技术文档
快递单号查询自动识别接口API
快递鸟
版本
1功能说明
通过运单单号自动识别所属的快递公司。
同一个单号可能属于一家或者多家公司,快递鸟提供的服务为智能识别可能的快递公司,识别结果还需用户审核。
接口说明如下:
该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。
接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。
接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序,排名靠前的命中率更高。
若识别失败,快递鸟返回的匹配结果为空。
2接口规则
(1)、接口只支持Json格式参数,接口指令2002。
只支持POST请求方式,utf-8编码。
(2)、支持增值服务,保价、代收货款、货款直退、货款垫付等。
(3)、测试地址:
:8081/Ebusiness/EbusinessOrderHandle.aspx
(4)、正式地址:/Ebusiness/EbusinessOrderHandle.aspx
3系统级输入参数
4应用级输入参数
5返回结果参数。
100个快递单号查询接口API公司编码
100个快递单号查询接口API公司编码
电商平台的物流模块包括有发货打单获取快递单号和大头笔、智选物流选出最优快递公司、快递单号查询物流轨迹跟踪、运费险、时效配送、在线一键退换货寄件等需求,这背后就需要有专业的第三方物流解决方案服务商来做支撑,淘系电商平台有菜鸟,其他电商平台有快递鸟,这样电商平台就不需要一家家找各家快递公司做接口对接了。
满足全流程的物流状态监控、实时推送获取物流轨迹,一键退换货、预约快递员上门准时取件等需求。
如何快速成功对接快递接口呢?有几个关键点:
1、在快递鸟注册账号获得用户ID和APIKey,对应各Demo中的EBusinessID、APIKey,这个是对接中必须要用到的。
2、在官网或技术支持群下载技术文档,接口开发可在官网下载接口DEMO。
3、快递公司对应的编码也需要清楚,
比如顺丰对应编码SF、中通快递对应编码ZTO、百世快递对应编码HTKY、圆通快递对应编码YTO、申通快递对应编码STO、韵达对应编码YD、邮政快递包裹对应编码YZPY、EMS包裹对应编码EMS、天天快递包裹对应编码HHTT、京东快递包裹对应编码JD、德邦快递对应编码DBL、优速快递对应编码UC、宅急送对应编码ZJS,
下面就列出100+物流公司编码供您使用,全部的编码请在快递鸟网站下载获取。
快递物流寄件下单api接口调用对接
快递物流寄件下单api接口调用对接为了让你对接更简单,我会分享源代码,把源码复制到你的项目上,就能快速完成电商售后退货快递寄件下单预约快递员上门取件接口对接,调用快递鸟提供的上门取件API标准接口,成功调用后,快递员会准时上门取件,同时支持快递单号物流轨迹查询,快递鸟物流单号查询api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用。
1 接口规范说明1.1 接口规范及说明1.1.1 报文及报文编码报文格式:Json格式请求方法的编码格式(utf-8):交互协议上统一用UTF-8,避免传递中文数据出现乱码。
1.1.2 接口数据包结构图例- 数据包结构(系统级{数据})1.1.3 JSON示例1.1.4 系统级参数*快递所有接口统一使用此系统级参数,根据不同的请求接口指令接入不同的接口。
1.1.5 流程示意图1.1.6 名词定义1.2 签名说明1.2.1 关于签名快递鸟和第三方电子商务公司系统进行对接,有一定的安全机制。
采用IP认证加签名的方式对接,具体方案如下:1. 防止数据被篡改2. 注:DataSign生成后,对方接收到数据后,以同样的算法进行签名(推送接口RequestType为101/102不需要进行URL编码),生成摘要,对比两者的摘要是否相同,如果不同,说明传递过程中发生数据篡改。
2.调用接口的身份认证注册成为快递鸟用户后,会生成对应的用户ID和APIKey,用户ID相当于用户名,APIKey相当于密码。
举例:1.假设2.那么DataSign签名的内容为3.接收方收到数据后,获得EBusinessID 和RequestData和DataSign等这几个数据。
4.接收方对EBusinessID得到APIKey,RequestData+APIKey的数据进行md5和base64后的内容就为OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE=5.接收方判断签名后的数据跟传递过来的DataSign是否一致,如果一致进行业务操作,如果不一致返回错误。
php快递鸟单号查询api接口免费对接调用
php快递鸟单号查询api接⼝免费对接调⽤快递鸟集成快递单号查询API接⼝,可以同时对接顺丰快递查询,中通、申通、圆通、韵达、百世、EMS等国内外418家物流快递公司接⼝查询等。
这些快递物流企业,提供了快递单号⾃动识别接⼝,快递单号查询接⼝等快递物流服务。
对于电商企业,ERP服务企业,集成此接⼝到⾃⼰的软件中,增加了企业的竞争⼒。
⼀、接⼝应⽤场景1.在电商平台购物后,通过购物订单跟踪物流时,调⽤此API获取物流信息详情2.处理运费对账时,⼀键获取运单物流状态3.批量跟踪及获取运单物流信息对接流程快递鸟⽹站申请接⼝KEY并认证-对接接⼝-调试-上线使⽤三、技术对接快递鸟提供的快递查询接⼝,⽀持418家快递物流查询,涵盖了国内外主流快递服务企业的单号查询,信息及时,数据完整。
登录快递鸟官⽹⽀持多种开发语⾔对接,包括JAVA,C#,PHP等。
根据您的开发语⾔,选择参考对应的代码⽰例,下⾯以PHP代码为例:<?php//电商IDdefined('EBusinessID') or define('EBusinessID', '123456');//电商加密私钥,快递鸟提供,注意保管,不要泄漏defined('AppKey') or define('AppKey', '1234567890');//请求url:测试地址//defined('ReqURL') or define('ReqURL', ':8080/kdniaosandbox/gateway/exterfaceInvoke.json');//请求url:正式地址defined('ReqURL') or define('ReqURL', '/Ebusiness/EbusinessOrderHandle.aspx');$kgs = "JD";//快递公司简称,官⽅有⽂档$number = "12345678";//快递单号//调⽤查询物流轨迹//---------------------------------------------$logisticResult=getOrderTracesByJson($kgs,$number);echo$logisticResult;//解析数据$data = json_decode($logisticResult,true);if($data['Success'] == true){//返回信息成功$str = "";if(isset($data['Traces']) && !empty($data['Traces'])){for($i=0;$i<count($data['Traces']);$i++){$str .= "时间:".$data['Traces'][$i]['AcceptTime']."<br/>地址:".$data['Traces'][$i]['AcceptStation']."<br/>";}}echo "您查询的单号是:".$data['LogisticCode']."<br/>物流信息:<br/>".$str."";}//---------------------------------------------/*** Json⽅式查询订单物流轨迹*/function getOrderTracesByJson($kgs,$number){$requestData= "{'OrderCode':'','ShipperCode':'$kgs','LogisticCode':'$number'}";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1002','RequestData' => urlencode($requestData) ,'DataType' => '2',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return$result;}/*** post提交数据* @param string $url 请求Url* @param array $datas 提交的数据* @return url响应返回的html*/function sendPost($url, $datas) {$temps = array();foreach ($datas as$key => $value) {$temps[] = sprintf('%s=%s', $key, $value);}$post_data = implode('&', $temps);$url_info = parse_url($url);if(empty($url_info['port'])){$url_info['port']=80;}$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n"; $httpheader.= "Host:" . $url_info['host'] . "\r\n";$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n"; $httpheader.= "Content-Length:" . strlen($post_data) . "\r\n"; $httpheader.= "Connection:close\r\n\r\n";$httpheader.= $post_data;$fd = fsockopen($url_info['host'], $url_info['port']);fwrite($fd, $httpheader);$gets = "";$headerFlag = true;while (!feof($fd)) {if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {break;}}while (!feof($fd)) {$gets.= fread($fd, 128);}fclose($fd);return$gets;}/*** 电商Sign签名⽣成* @param data 内容* @param appkey Appkey* @return DataSign签名*/function encrypt($data, $appkey) {return urlencode(base64_encode(md5($data.$appkey)));}>。
快递单号查询免费api接口(PHP示例)——快宝开放平台
请求代码示例↓支持6中开发语言对接,包括JAVA,C#,PHP,Python,Node.js,Crul;根据您的开发语言,选择参考对应的代码示例,下面以PHP代码为例:1$host = "https:///api";2$method = "POST";3$headers = array();4//根据API的要求,定义相对应的Content-Type5array_push($headers,"Content-Type".":"."application/x-www-form-urlencoded;charset=UTF-8");6$querys = "";7$bodys = [8 "app_id"=>'50001',9 "method"=>'.get',10 "sign"=>"bdf3b5f50865ac813cbdfd6c9b572b79",11 "ts"=>'1524209949',12 "data"=>'{ "waybill_no":"物流单号多个的以英文逗号分隔","exp_company_code":"品牌简称"}'13 ];14$bodys = http_build_query($bodys);15$url = $host;16$curl = curl_init();17curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);18curl_setopt($curl, CURLOPT_URL, $url);19curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);20curl_setopt($curl, CURLOPT_FAILONERROR, false);21curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);22curl_setopt($curl, CURLOPT_HEADER, true);23if (1 == strpos("$".$host, "https://"))24 {25curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);26curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);27 }28curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);29var_dump(curl_exec($curl));成功响应示例↓响应(成功、失败)示例,仅支持JSON格式。
快递单号查询API接口对接流程
快递单号查询API接口对接后可以在自己的网站点击查询就能查到物流轨迹,像京东淘宝查询物流的功能一样,适合一些自己研发的系统商、微信小程序,还有自己的电商网站。
方法/步骤
进入快递鸟网站下载对接相关的接口文档,和接口demo案例,接口demo案例可以直接调用,不用自己编写代码。
如果需要自己编写,可以参照接口文档
另外即时查询API、物流跟踪API和在途监控API都是查询快递的,可以根据不同情况对接使用
在右上角注册账号登录后进行账号认证,就可以对接接口了
在账号登录后首页可以查看接口ID和接口KEY,复制到demo中的“EBusinessID”和“AppKey”两个参数中,demo就可以使用了
对接完成后就是在调试平台调试接口,对比请求报文和返回报文确认对接是不是正确的。
这里需要注意的是,对接的是什么接口,就查看什么接口的调试报文
测试后就可以正式调用了,正式调用的时候在正式地址调用
最后做一个物流轨迹的数据展现就可以了,如下图。
国际快递查询API接口对接JAVA示例
国际物流快递查询API接口java如何对接国际快递查询接口的需求量很大,例如一些跨境电商B2C网站、快递查询APP、快递柜、跨境物流公司等都会需要用到国际快递接口。
目前市面上的快递接口,以国内快递居多,有些虽然号称支持多家国际快递和国际邮政,但实际调用时,由于国际快递网站变化较多,所以经常出现不稳定的情况。
这里我要介绍的是快递鸟的国际快递接口,他们一直专做国际快递,支持的国内外600多家快递,大部分国外主流快递物流公司的接口可以对接,提供的接口也非常可靠。
国际快递特性(含国际邮政)1.可在两个网站查询到信息:属于万国邮联的国际邮政单号,可以分别在发件国家邮政官网与目的国家邮政官网查询到数据。
相对而言,国内快递一般只需要在一个网站查询数据。
2.海关问题:国际包裹是跨国包裹,需要通过两国的海关查验,有时候会被海关扣押,进而导致时效不如国内快递稳定。
3.运输时间长:国际邮政包裹相对国际快递价格便宜很多,所以运输时间也慢,甚至会需要1到2个月才能签收。
4.多语言问题:由于包裹是跨国的,必然会涉及多语言问题,国内客户需要看到的是中文信息,而国外客户希望看到的是当地语言的物流信息。
国际快递API特性(快递鸟)1.包含发件国与目的国的数据:快递鸟的API中包含的参数有 origin_info(发件国物流信息)和destination_info(目的国物流信息),所以通过该接口可以让用户看到最为完整的物信息。
2.智能识别快递状态:当检测到包裹在海关停滞,或者包裹被退回等信息,快递鸟会返回“exception”(可能异常)的状态,帮助用户第一时间发现异常件,从而尽早处理。
3.按照单号个数计费:由于国际包裹的运输时间很长,完整的运输周期可能需要两个月,而每天至少需要查询两次以上。
所以按照查询单号个数计费而不是按照API调用次数计费,是最为良心的计费方式。
4.多语言API:针对不同的快递商,可以按照语言返回不同的结果。
圆通快递电子面单接口对接说明(全)
圆通快递电子面单接口对接说明(全)1.接口类型说明1)接口支持的消息接收方式:HTTP POST2)请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"3)API地址:/Ebusiness/EbusinessOrderHandle.aspx4)接口提供:快递鸟5)快递编码:YTO2.请求系统级参数参数名称类型说明必须要求RequestData String 请求内容需进行URL(utf-8)编码。
请求内容JSON格式,须和DataType一致。
REBusinessID String 商户ID,请在我的服务页面查看。
R RequestType String 请求指令类型:1007RDataSign String 数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码,最后进行URL(utf-8)编码。
详细过程请查看Demo。
RDataType String 请求、返回数据类型:只支持JSON格式O备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)。
3.接口参数1)请求内容字段定义参数名称类型说明是否必须CallBack String 用户自定义回调信息OMemberID String 会员标识OCustomerName String 电子面单客户账号(与快递网点申请)OCustomerPwd String 电子面单密码OSendSite String 收件网点标识OShipperCode String 快递公司编码RLogisticCode String 快递单号OOrderCode String 订单编号RMonthCode String 月结编码 CPayType Int 邮费支付方式:1-现付,2-到付,3-月结,4-第三方支付RExpType String 快递类型:1-标准快件RIsNotice Int 是否通知快递员上门揽件:0-通知;1-不通知;不填则默认为0OCost Double 寄件费(运费)O OtherCost Double 其他费用OReceiver Company String 收件人公司O Name String 收件人R Tel String电话与手机,必填一个R Mobile StringPostCode String 收件人邮编O ProvinceName String 收件省(如广东省,不要缺少“省”)R CityName String 收件市(如深圳市,不要缺少“市”)R ExpAreaName String 收件区(如福田区,不要缺少“区”或“县”)O Address String 收件人详细地址RSender Company String 发件人公司O Name String 发件人R Tel String电话与手机,必填一个R Mobile StringPostCode String 发件人邮编O ProvinceName String 发件省(如广东省,不要缺少“省”)R CityName String 发件市(如深圳市,不要缺少“市”)R ExpAreaName String 发件区(如福田区,不要缺少“区”或“县”)O Address String 发件人详细地址RStartDate String 上门取货时间段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有时间格式相同OEndDate String O Weight Double 物品总重量kg O Quantity Int 件数/包裹数O Volume Double 物品总体积m3 O Remark String 备注OAddServicesAddService Name String 增值服务名称O Value String 增值服务值O CustomerID String 客户标识(选填)OCommoditys2)返回参数定义参数名称类型说明必须要求EBusinessID String 用户ID ROrder OrderCode String 订单编号R ShipperCode String 快递公司编码R LogisticCode String 快递单号R MarkDestination String 大头笔O OriginCode String 始发地区域编码O OriginName String 始发地/始发网点O DestinatioCode String 目的地区域编码O DestinatioName String 目的地/到达网点O SortingCode String 分拣编码O PackageCode String 集包编码OSuccess Bool 成功与否R ResultCode String 错误编码R Reason String 失败原因O UniquerRequestNumber String 唯一标识R PrintTemplate String 面单打印模板O EstimatedDeliveryTime String 订单预计到货时间yyyy-mm-dd O Callback String 用户自定义回调信息O4. 示例1)JSON请求示例{"OrderCode": "012657700387" ,"ShipperCode": "HTKY","PayType": 1,"ExpType": 1,"Cost": 1.0,"OtherCost": 1.0,"Sender": {"Company": "LV","Name": "Taylor","Mobile": "150********" ,"ProvinceName": "上海","CityName": "上海","ExpAreaName": "青浦区","Address": "明珠路73号"},"Receiver": {"Company": "GCCUI","Name": "Yann","Mobile": "150********" ,"ProvinceName": "北京","CityName": "北京","ExpAreaName": "朝阳区","Address": "三里屯街道雅秀大厦"},"Commodity": [{"GoodsName": "鞋子","Goodsquantity": 1,"GoodsWeight": 1.0}],"AddService": [{"Name": "COD","Value": "1020"}],"Weight": 1.0,"Quantity": 1,"Volume": 0.0,"Remark": "小心轻放","IsReturnPrintTemplate":1}2)JSON返回示例失败:{"EBusinessID": "1237100","ResultCode": "105","Reason": "订单号已存在,请勿重复操作","UniquerRequestNumber":"5e66486b-8fbc-4131-b875-9b13d2ad1354 "}成功:{"EBusinessID": "1237100","Order": {"OrderCode": "012657700387","ShipperCode": "HTKY","LogisticCode": "50002498503427","MarkDestination": "京-朝阳(京-1)","OriginCode": "200000","OriginName": "上海分拨中心","PackageCode": "北京"},"PrintTemplate":"此处省略打印模板HTML内容","EstimatedDeliveryTime":"2016-03-06","Callback":"调用时传入的Callback","Success": true,"ResultCode": "100","Reason": "成功"}5.JAVA对接源码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .URL;import .URLEncoder;import java.util.HashMap;import java.util.Map;import .apache.xerces.internal.impl.dv.util.Base64;import java.security.MessageDigest;/**** ID和Key请到官网申请:/ServiceApply.aspx*/public class KdGoldAPIDemo {//电商IDprivate String EBusinessID="ID请申请";//电商加密私钥,注意保管,不要泄漏private String AppKey="KEY请申请";//请求url, 正式环境地址:/api/Eorderserviceprivate String ReqURL=":8081/api/Eorderservice";/*** Json方式电子面单* @throws Exception*/public String orderOnlineByJson() throws Exception{String requestData= "{'OrderCode': '118060839871'," +"'ShipperCode':'HHTT'," +"'PayType':1," +"'ExpType':1," +"'Cost':1.0," +"'OtherCost':1.0," +"'Sender':" +"{" +"'Company':'LV','Name':'T aylor','Mobile':'150********','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +"'Receiver':" +"{" +"'Company':'GCCUI','Name':'Yann','Mobile':'150********','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +"'Commodity':" +"[{" +"'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," +"'Weight':1.0," +"'Quantity':1," +"'Volume':0.0," +"'Remark':'小心轻放'," +"'IsReturnPrintTemplate':1}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "1007");String dataSign=encrypt(requestData, AppKey, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result=sendPost(ReqURL, params);//根据公司业务处理返回的信息......return result;}/*** MD5加密* @param str 内容* @param charset 编码方式* @throws Exception*/@SuppressWarnings("unused")private String MD5(String str, String charset) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes(charset));byte[] result = md.digest();StringBuffer sb = new StringBuffer(32);for (int i = 0; i < result.length; i++) {int val = result[i] & 0xff;if (val <= 0xf) {sb.append("0");}sb.append(Integer.toHexString(val));}return sb.toString().toLowerCase();}/*** base64编码* @param str 内容* @param charset 编码方式* @throws UnsupportedEncodingException*/private String base64(String str, String charset) throws UnsupportedEncodingException{String encoded = Base64.encode(str.getBytes(charset));return encoded;}@SuppressWarnings("unused")private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{ String result = URLEncoder.encode(str, charset);return result;}/*** 电商Sign签名生成* @param content 内容* @param keyValue Appkey* @param charset 编码方式* @throws UnsupportedEncodingException ,Exception* @return DataSign签名*/@SuppressWarnings("unused")private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception{if (keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}/*** 向指定URL 发送POST方法的请求* @param url 发送请求的URL* @param params 请求的参数集合* @return 远程资源的响应结果*/@SuppressWarnings("unused")private String sendPost(String url, Map<String, String> params) {OutputStreamWriter out = null;BufferedReader in = null;StringBuilder result = new StringBuilder();try {URL realUrl = new URL(url);HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// POST方法conn.setRequestMethod("POST");// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.connect();// 获取URLConnection对象对应的输出流out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");// 发送请求参数if (params != null) {StringBuilder param = new StringBuilder();for (Map.Entry<String, String> entry : params.entrySet()) {if(param.length()>0){param.append("&");}param.append(entry.getKey());param.append("=");param.append(entry.getValue());System.out.println(entry.getKey()+":"+entry.getValue());}System.out.println("param:"+param.toString());out.write(param.toString());}// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}} catch (Exception e) {e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result.toString();}}6.PHP对接源码<?php//电商IDdefined('EBusinessID') or define('EBusinessID', '请申请/ServiceApply.aspx');//电商加密私钥,注意保管,不要泄漏defined('AppKey') or define('AppKey', '请申请/ServiceApply.aspx'); //请求url,接口正式地址:/api/Eorderservicedefined('ReqURL') or define('ReqURL', ':8081/api/Eorderservice');//调用获取物流轨迹//-------------------------------------------------------------//构造电子面单提交信息$eorder = [];$eorder["ShipperCode"] = "HHTT";$eorder["OrderCode"] = "PM201604062341";$eorder["PayType"] = 1;$eorder["ExpType"] = 1;$sender = [];$sender["Name"] = "李先生";$sender["Mobile"] = "188********";$sender["ProvinceName"] = "李先生";$sender["CityName"] = "深圳市";$sender["ExpAreaName"] = "福田区";$sender["Address"] = "赛格广场5401AB";$receiver = [];$receiver["Name"] = "李先生";$receiver["Mobile"] = "188********";$receiver["ProvinceName"] = "李先生";$receiver["CityName"] = "深圳市";$receiver["ExpAreaName"] = "福田区";$receiver["Address"] = "赛格广场5401AB";$commodityOne = [];$commodityOne["GoodsName"] = "其他";$commodity = [];$commodity[] = $commodityOne;$eorder["Sender"] = $sender;$eorder["Receiver"] = $receiver;$eorder["Commodity"] = $commodity;//调用电子面单$jsonParam = json_encode($eorder, JSON_UNESCAPED_UNICODE); //$jsonParam = JSON($eorder);//兼容php5.2(含)以下echo "电子面单接口提交内容:<br/>".$jsonParam;$jsonResult = submitEOrder($jsonParam);echo "<br/><br/>电子面单提交结果:<br/>".$jsonResult;//解析电子面单返回结果$result = json_decode($jsonResult, true);echo "<br/><br/>返回码:".$result["ResultCode"];if($result["ResultCode"] == "100") {echo "<br/>是否成功:".$result["Success"];}else {echo "<br/>电子面单下单失败";}//-------------------------------------------------------------/*** Json方式查询订单物流轨迹*/function submitEOrder($requestData){$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1007','RequestData' => urlencode($requestData) ,'DataType' => '2',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** post提交数据* @param string $url 请求Url* @param array $datas 提交的数据* @return url响应返回的html*/function sendPost($url, $datas) {$temps = array();foreach ($datas as $key => $value) {$temps[] = sprintf('%s=%s', $key, $value);}$post_data = implode('&', $temps);$url_info = parse_url($url);if($url_info['port']==''){$url_info['port']=80;}echo $url_info['port'];$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";$httpheader.= "Host:" . $url_info['host'] . "\r\n";$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";$httpheader.= "Connection:close\r\n\r\n";$httpheader.= $post_data;$fd = fsockopen($url_info['host'], $url_info['port']);fwrite($fd, $httpheader);$gets = "";$headerFlag = true;while (!feof($fd)) {if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) { break;}}while (!feof($fd)) {$gets.= fread($fd, 128);}fclose($fd);return $gets;}/*** 电商Sign签名生成* @param data 内容* @param appkey Appkey* @return DataSign签名*/function encrypt($data, $appkey) {return urlencode(base64_encode(md5($data.$appkey)));}/**************************************************************** 使用特定function对数组中所有元素做处理* @param string &$array 要处理的字符串* @param string $function 要执行的函数* @return boolean $apply_to_keys_also 是否也应用到key上* @access public**************************************************************/ function arrayRecursive(&$array, $function, $apply_to_keys_also = false){static $recursive_counter = 0;if (++$recursive_counter > 1000) {die('possible deep recursion attack');}foreach ($array as $key => $value) {if (is_array($value)) {arrayRecursive($array[$key], $function, $apply_to_keys_also);} else {$array[$key] = $function($value);}if ($apply_to_keys_also && is_string($key)) {$new_key = $function($key);if ($new_key != $key) {$array[$new_key] = $array[$key];unset($array[$key]);}}}$recursive_counter--;}/************************************************************** ** 将数组转换为JSON字符串(兼容中文)* @param array $array 要转换的数组* @return string 转换得到的json字符串* @access public**************************************************************/ function JSON($array) {arrayRecursive($array, 'urlencode', true);$json = json_encode($array);return urldecode($json);}?>。
免费物流查询API接口对接流程-快递鸟
目前快递鸟物流查询API接口有两种对接方式,这两种方式都需要先到快递鸟官网上填写申请信息(注册网址:/reg)填写申请信息,信息表格中“日查询次数”要选择对,如果不确认,可以先接入查询接口。
申请完成,登录就可以看到自己的ID和KEY,这个ID和KEY只能一个公司使用,保证数据的稳定性,所以这个ID和KEY都是保密的。
从这一步开始,每日查询次数≤3000次和>3000的对接方式就不一样了。
1.每日查询次数≤3000次(即时查询接口)即时查询接口,是根据快递单号和快递公司编码实时查询物流轨迹信息的接口。
注册后可以参照如下进行开发对接:1.1即时查询接口对接描述/说明(1)根据订单编号和快递公司编码查询物流轨迹信息(支持在快递鸟订单)。
(2)根据快递单号和快递公司编码查询物流轨迹信息。
(3)接口需要指定快递单号的快递公司编码,格式不对或则编码错误都会返失败的信息。
如:EMS物流单号应选择快递公司编码(EMS)查看快递公司编码(4)返回的物流跟踪信息按照发生的时间升序排列。
(5)接口支持的消息接收方式为HTTP POST,请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
(6)请求系统级参数说明:备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)。
(7)接口地址:API地址:/Ebusiness/EbusinessOrderHandle.aspx (8)接口参数请求内容字段定义返回参数定义2.每日查询次数>3000(订阅接口)订阅推送接口,用户订阅快递单号,快递鸟系统会定时推送新的物流信息。
注册后填写《用户接入表》(接入表下载网址/download),完善《用户信息登记表》、《物流数据需求表》这两个表格的内容,并发送到service@。
快递单号查询C#接口开发
快递单号查询C#接口开发(快递鸟、C/S)目录一、本文说明 (2)二、快递鸟简介 (4)三、代码分析 (7)四、联系与源码下载 (11)一、本文说明本文阅读对象:C#开发人员。
本文代码所实现的功能:使用C#(WinForm)通过HTTP请求的方式,传入必要的参数(如快递单号等),调用快递鸟的接口,查询指定快递件的配送进度、流程。
本文作者联系方式、源码下载在文末。
运行、测试需外网环境。
本文所有代码均为本人所写,如果有误,还请包涵!源码目录结构:举例说明。
在百度上查询顺丰快递的单号,配送流程如下:本文可实现的结果:二、快递鸟简介国内快递公司非常多,每个快递公司都会提供配送流程查询的功能。
他们提供的接口可能大同小异,但是对于软件公司来讲,不可能跟每个快递公司都做一遍接口对接、联调、测试。
所以我们需要快递鸟。
可以想象,如果没有中间接口快递鸟的存在,我们需要跟那么多不同的快递公司做接口对接,那么我们将需要多大的开发成本!当然中间接口并非只有快递鸟有这个功能,还有一些其他的。
不过快递鸟免费。
对于一些小的系统,已经够用了。
按照惯例,使用快递鸟的服务,那么必须先到快递鸟上注册账号,取得接口接入资格。
软件开发商 快递鸟 顺丰快递申通快递……注册地址:/reg注册后登陆,就可以看到本账号的相关基础资料:比较重要的有:①商户ID②API Key快递公司编码、接口技术文档也是比较重要的,应该下载下来简单看看,后面会使用到。
其中有关本文比较重要的信息有:①顺丰快递的公司编码为SF②本文接口地址为:/Ebusiness/EbusinessOrderHandle.aspx③接口使用的编码为UTF-8④接口请求指令类型码为1002⑤接口返回的数据类型为JSON格式然后需要申请开通【即时查询】免费API开通完成后,可以查询到已经开通的API接口:快递鸟还提供在线测试功能:/UserCenter/Dev/TrackQuery.aspx三、代码分析代码中首先定义了以下参数,如请求地址、指令类型、商户ID、APPKey等,有关这些上文都已经提到过。
物流一站式查询之顺丰接口篇
物流⼀站式查询之顺丰接⼝篇连载篇提前看前情提要本篇内容承接上篇《⽂末所说,顺丰物流关闭了对第三⽅的物流接⼝,导致众多第三⽅物流平台查询不到顺丰快递的物流信息。
但是问题终归是要解决滴,别家不⾏,咱就直接⽤顺丰⾃家的。
原本⽹上找顺丰物流信息查询发现看了下介绍,因为也是顺丰的平台,也没多想,看到流程还是⽐较清晰的。
本来想找在线客服咨询下,结果发现在线客服有的只是⼀个群号,⽽且还不能加⼈了,于是乎就按照接⼊流程开始操作,本地都开发的差不多了,后来意外联系到⼀个顺丰的IT⼈员,通过他得知,顺丰物流信息接⼝已经转到另⼀个部门和平台操作了,这个开放平台已经⼏乎没有⼈维护了。
于是再他的协助下,我得到了最新的对接⽂档。
按找新⽂档,之前的开发的全部得重写,请求接⼝不⼀样,数据传输和接收⽅式不⼀样,由开放平台的Json格式到现在⽤XML传输。
这⾥贴⼀下接⼊规范⽂档的⽬录顺便提⼀下顺丰路由查询接⼝就是查询物流信息的接⼝,不过再顺丰平台使⽤此接⼝有个前提条件,就是必须是顺丰的⽉结⽤户。
登陆可以查看到基本信息注:①不是顺丰⽉结卡⽤户或者企业,不能接⼊路由查询②不是通过顺丰接⼝下单的运单号,不能接⼊路由推送接⼝,换⽽⾔之,如果是通过顺丰⼤客户发货系统或者其他⽅式进⾏的打单获取到的快递单号,⽆法对此单进⾏订阅推送操作。
开发篇看完基本流程和接⼊规范之后,就可以按照⽂档规范进⾏编码。
因为⽬前我只⽤到了标红的三个接⼝,所以接下来对这三个接⼝⼀⼀讲解。
(注开发之前本机IP需要得到官⽅授权,不然会请求会返回IP未授权)下单接⼝1.1. 功能描述下订单接⼝根据客户需要,可提供以下三个功能:1) 客户系统向顺丰下发订单。
2) 为订单分配运单号。
3) 筛单(可选,具体商务沟通中双⽅约定,由顺丰内部为客户配置)。
此接⼝也⽤于路由推送注册。
客户的顺丰运单号不是通过此下订单接⼝获取,但却需要获取BSP的路由推送时,需要通过此接⼝对相应的顺丰运单进⾏注册以使⽤BSP的路由推送接⼝。
用PHP快速接入快递单号API查询接口源码方法
用PHP快速接入快递单号API查询接口源码方法背景最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的【PHP快递查询源码资源】已经不能正常使用了;为了方便以后的业务需求,经过比较,最后选择使用第三方物流快递鸟接口查询。
同时,在此进行整理,希望能帮到有需求的朋友们,谢谢…以中通快递为例,其他快递查询类似。
开发步骤①. 前期准备首先要进行快递鸟账号的注册并根据的要求,完善用户申请。
然后,根据自己的需求,开通所需服务(如果只是进行物流信息的查询,以当前业务查询次数较少为例):②. 集成类的使用首先需要登录快递鸟获取账号的用户ID 和API key 对所提供源码中的集成类BirdExpress.php ,进行配置项的替换操作然后将集成类整合到你的项目框架,根据框架规则进行必要修改(框架不同规则自然多数不同,本人为ThinkPHP5.1.2)下图为简单的调用测试:③. 核心处理方法源码首先,官方的代码demo获得的物流信息是正序展示的为了方便物流信息的倒序展示,我进行了对数组Traces 的反转操作④. [重要]: 代码逻辑梳理,以及整体业务设计构化通过上面核心源码的展示,你应该会注意到调用其方法,必须要传入快递公司编码和物流单号这两个参数好在,官方提供了快递公司编码,所以,鄙人的设计思路如下:1. 根据得到的快递公司编码Excel表取出其中的"快递公司"和"编码"两列数据存储到本地数据表2. 在后台操作人员输入快递单号时同时要求选择快递公司,获得"编码"从而保证,在数据表中,存储的快递单号唯一匹配到一个编码,继而方便后面进行快递信息查询时,可同时获得所需的两个参数.⑤. 效果展示截图对于业务量前期不大的网站足够使用,即便后期有需要,也可以直接进行套餐升级。
查询快递单号-百世快运快递接口
查询快递单号-百世快运快递接⼝百世快运查询如何利⽤快递鸟提供的接⼝来查询百世快运的物流轨迹。
⾸先我们准备好需要⽤到的资源,这⾥推荐⼤家去爱奇艺查看视频教程:测试商户ID:test1617571测试API key:554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使⽤)API测试地址:接下来,我们讲解⼀下请求参数⼀、接⼝描述/说明请求系统级参数说明:参数名称类型说明必须要求RequestData String请求内容需进⾏URL(utf-8)编码。
请求内容JSON格式,须和DataType⼀致。
REBusinessID String商户ID,请在我的服务页⾯查看。
RRequestType String请求指令类型:1002RDataSign String 数据内容签名:把(请求内容(未编码)+AppKey)进⾏MD5加密,然后Base64编码,最后进⾏URL(utf-8)编码。
详细过程请查看Demo。
RDataType String请求、返回数据类型:2-json;O备注:R-必填(Required),O-可选(Optional),C-报⽂中该参数在⼀定条件下可选(Conditional)这⾥提到了系统级参数,也相当于是公⽤参数,这些参数是调⽤每个接⼝都是必须要传参的。
⼆、接⼝参数请求内容字段定义:参数名称类型说明必须要求OrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流单号RCustomerName String寄件⼈或收件⼈的⼿机号后四位数字R接⼝参数,也叫业务参数,请求的业务接⼝不同,参数的字段,内容也不同,是跟着业务变化的,这⾥我们实现的是即时查询接⼝,请求指令类型:1002,快递鸟官⽹要求必须传递快递公司编码和物流单号,百世快运的编码是BTWL如要查看其他快递公司的编码,点击此链接:我们⽤真实单号(181********)来完成轨迹接⼝调⽤,请求 JSON{'OrderCode':'','ShipperCode': BTWL',LogisticCode':' 181********'}请求的完整报⽂(URL编码以后):RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27BTWL%27%2c%27LogisticCode%27%3a%2718111255341%27%7d%0d%0a++&EBu未编码的请求报⽂:RequestData= {'OrderCode':'','ShipperCode':'BTWL','LogisticCode':'181********'}&EBusinessID=1264783&RequestType=1002&DataSign=M2NhY2FiYzc1MzI5MmViZGYzZTVhNzI1ODg5N2I1Njk=&DataType=2返回参数定义:参数名称类型说明必须要求EBusinessID String⽤户ID ROrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流运单号OSuccess Bool成功与否RReason String失败原因OState String物流状态:2-在途中,3-签收,4-问题件RTracesTracesAcceptTime StringAcceptStation StringRemark String返回报⽂信息-{"LogisticCode": "181********","ShipperCode": "BTWL","Traces": [{"AcceptStation": "快件在【新乡原阳ZX】已揽件","AcceptTime": "2019-11-03 19:03:12"}, {"AcceptStation": "快件由【新乡原阳】发往【郑州分拨】","AcceptTime": "2019-11-03 19:03:45"}, {"AcceptStation": "快件已到达【郑州分拨】","AcceptTime": "2019-11-03 21:48:50"}, {"AcceptStation": "快件由【郑州分拨】发往【南宁分拨】","AcceptTime": "2019-11-05 21:54:20"}, {"AcceptStation": "快件已到达【南宁分拨】","AcceptTime": "2019-11-07 17:24:45"}, {"AcceptStation": "快件由【南宁分拨】发往【桂林分拨】","AcceptTime": "2019-11-07 22:32:55"}, {"AcceptStation": "快件已到达【桂林分拨】","AcceptTime": "2019-11-08 13:07:55"}, {"AcceptStation": "快件由【桂林分拨】发往【桂林恭城】","AcceptTime": "2019-11-08 18:27:30"}, {"AcceptStation": "快件已到达【桂林恭城】","AcceptTime": "2019-11-09 14:30:15"}, {"AcceptStation": "快件已到达【桂林恭城ZX】,站点客服电话【199********】","AcceptTime": "2019-11-10 09:07:51"}, {"AcceptStation": "快件在【桂林恭城ZX】做了派件,派件员【陈真学】【173********】", "AcceptTime": "2019-11-10 09:12:09"}, {"AcceptStation": "已签收,签收⼈是:【⽀付宝付款签收】","AcceptTime": "2019-11-10 16:29:00"}],"State": "3","EBusinessID": "1264783","Success": true}这⾥根据我们的实际业务需求来选择免费套餐或者收费套餐。
python快速实现极兔快递物流轨迹单号查询API接口对接快递鸟
python快速实现极兔快递物流轨迹单号查询API接⼝对接快递鸟在开发之前,我们先来了解⼀下什么是即时查询,按我的理解就是,我们提供运单号和快递公司编码,然后调⽤快递鸟提供的查询接⼝,即可查询运单号的发货情况,我们可以通过这个接⼝获悉到包裹的收件时间,派送时间,签收时间,签收⼈,如果体验做的更好⼀点,通过⼤数据可以分析这个包裹的预计派送时间。
以下是我通过调⽤快递鸟接⼝提供的即时查询接⼝获得的内容,快递鸟⽀持包括顺丰、中通、圆通、申通、韵达、百世、极兔、德邦、安能、EMS等在内的国内外超过600家的物流快递接⼝服务。
极兔快递查询调⽤快递鸟提供的快递查询API标准接⼝,快速对接600多家快递公司的物流轨迹查询,本篇⽂章实现<极兔快递>的快递单号查询。
⾸先我们准备好需要⽤到的资源,这⾥推荐⼤家去爱奇艺查看视频教程:测试商户ID:test1617571测试API key:554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使⽤)API测试地址:接⼝参数,也叫业务参数,请求的业务接⼝不同,参数的字段,内容也不同,是跟着业务变化的,这⾥我们实现的是即时查询接⼝,请求指令类型:1002,快递鸟官⽹要求必须传递快递公司编码和物流单号,EMS快递的编码是EMS如要查看其他快递公司的编码,点击此链接:我们⽤真实单号(1160001630231)来完成轨迹接⼝调⽤,请求 JSON{'OrderCode':'','ShipperCode':'EMS','LogisticCode':' 1160001630231'}请求的完整报⽂(URL编码以后):RequestData=%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27EMS%27%2c%27LogisticCode%27%3a%271160001630231%27%7d%0d%0a++++++++&EBusinessID=1264未编码的请求报⽂:RequestData={'OrderCode':'','ShipperCode':'EMS','LogisticCode':'1160001630231'}&EBusinessID=1264783&RequestType=1002&DataSign=NDlmMDAzZTYwYmYyY2FmZjRjOTNhZDAwYjVkNDVjODM=&DataType=2返回参数定义:返回报⽂信息{"LogisticCode": "1160001630231","ShipperCode": "JTSD","Traces": [{"AcceptStation": "[莆⽥市]【莆⽥电商营业部】已收件,揽投员:郑美停,电话:152********","AcceptTime": "2020-02-06 20:12:56"}, {"AcceptStation": "[莆⽥市]离开【莆⽥电商营业部】,下⼀站【莆⽥市邮区中⼼】","AcceptTime": "2020-02-06 20:15:50"}, {"AcceptStation": "[莆⽥市]到达【莆⽥市邮区中⼼】","AcceptTime": "2020-02-06 20:17:26"}, {"AcceptStation": "[莆⽥市]离开【莆⽥市邮区中⼼】,下⼀站【福州旗⼭处理中⼼】","AcceptTime": "2020-02-06 23:59:31"}, {"AcceptStation": "[福州市]到达【福州旗⼭处理中⼼】(经转)","AcceptTime": "2020-02-07 17:40:37"}, {"AcceptStation": "[福州市]离开【福州旗⼭处理中⼼】,下⼀站【长沙邮件处理中⼼】(经转)","AcceptTime": "2020-02-08 04:56:41"}, {"AcceptStation": "[长沙市]到达【长沙邮件处理中⼼】(经转)","AcceptTime": "2020-02-08 16:05:58"}, {"AcceptStation": "[长沙市]离开【长沙邮件处理中⼼】,下⼀站【益阳邮件处理中⼼】(经转)","AcceptTime": "2020-02-08 20:28:47"}, {"AcceptStation": "[益阳市]到达【益阳邮件处理中⼼】","AcceptTime": "2020-02-09 00:25:22"}, {"AcceptStation": "[益阳市]离开【益阳邮件处理中⼼】,下⼀站【益阳市资阳揽投部】","AcceptTime": "2020-02-09 06:22:33"}, {"AcceptStation": "[益阳市]到达【益阳市资阳揽投部】","AcceptTime": "2020-02-09 08:56:06"}, {"AcceptStation": "[益阳市]【益阳市资阳揽投部】安排投递,投递员:龙飞跃,电话:158********,揽投部电话:177********", "AcceptTime": "2020-02-09 09:26:09"}, {"AcceptStation": "[益阳市]已签收,收发室,投递员:龙飞跃,电话:158********","AcceptTime": "2020-02-09 15:03:48"}],"State": "3","EBusinessID": "1264783","Success": true} 这⾥根据我们的实际业务需求来选择免费套餐或者收费套餐。
丰网速运单号查询快递鸟API接口-丰网速运
丰⽹速运单号查询快递鸟API接⼝-丰⽹速运前⾔顺丰斥资1000万成⽴深圳丰⽹速运有限公司。
其中,顺丰速运出资800万,持股80%,中⾦出资200万,持股20%。
据悉,该公司成⽴时间为2020年4⽉7⽇,法⼈代表为吴国忠,杨尊淼、李祥乐任董事,马⽴军任监事。
经营范围包括:国际货运代理;经济技术咨询;技术信息咨询;以特许经营⽅式从事商业活动;经营进出⼝业务;机械设备租赁;汽车租赁;房屋租赁业务;商务服务、商务代理;过境货物运输代理;3C产品检测、维修服务。
许可经营项⽬是:国内、国际快递;国际供应链;普通货运;货物专⽤运输,⼤型物件运输;仓储服务。
接下来给⼤家讲解⼀下如何对接丰⽹速运的快递查询接⼝。
调⽤快递鸟的丰⽹速运查询API接⼝,能查询到丰⽹速运单号从收件、运输,到转运中⼼,派送到签收等各个环节的物流发货状态。
快递鸟api接⼝不区分开发语⾔,⽀持Java,C#,PHP,Python,ObjectC等开发语⾔的程序调⽤。
下⾯具体讲解实现过程.⽬录1.完成前期准备⼯作1.1,去快递鸟官⽹⼀个账号1.2,免费获得⼀个apiKey(接⼝权限验证需要)1.3,完成实名认证流程1.4,订购⼀个免费套餐2.API接⼝2.3,请求⽅式:POST2.4,编码格式(utf-8):application/x-www-form-urlencoded;charset=utf-82.5,返回类型:JSON2.7,调试⼯具:去调试(使⽤快递鸟账号登录)3.请求参数(Headers)参数名称类型说明必须要求RequestData String请求内容需进⾏URL(utf-8)编码,请求内容JSON格式,须和DataType⼀致必填EBusinessID String⽤户ID,查看⽤户ID和ApiKey必填RequestType String请求指令类型:1002 必填DataSign String签名数据,(Body+ApiKey)进⾏MD5加密,再进⾏Base64编码,最后进⾏URL(utf-8)编码必填DataType String求、返回数据类型:2-json ,默认Json选填4.请求参数(Body)参数名称类型说明必须要求OrderCode String订单编号选填ShipperCode String快递公司编码,丰⽹速运:SF必填LogisticCode String物流运单号必填5.返回参数(Return)参数名称类型说明必须要求EBusinessID String⽤户ID 必填ShipperCode String快递公司编码必填LogisticCode String物流运单号选填Success String成功与否必填Reason String失败原因选填State String物流状态:2-在途中,3-签收,4-问题件必填State String物流状态:2-在途中,3-签收,4-问题件必填Traces 时间AcceptTime必填AcceptStation描述选填Remark备注必填6.请求完整报⽂(⽰例)RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27SF%27%2c%27LogisticCode%27%3a%27295734066970%27%2c%27CustomerName %27%3a%276073%27%7d%0d%0a++++++++&EBusinessID=1264783&RequestType=1002&DataSign=ZTJlZWU0NjI1YTljNTlmYzY5Y2M4YjMzYjcxYWU3MDA%3d&DataType=27.成功返回报⽂(⽰例)丰⽹速运单号295734066970的返回报⽂信息{"LogisticCode": "295734066970","ShipperCode": "SF","Traces": [{"AcceptStation": "顺丰速运已收取快件","AcceptTime": "2020-02-13 18:39:21"}, {"AcceptStation": "快件在【衡⽔桃城区集收客户营业部】已装车,准备发往【⽯家庄⾼开集散中⼼】","AcceptTime": "2020-02-13 18:39:31"}, {"AcceptStation": "快件已发车","AcceptTime": "2020-02-13 19:15:24"}, {"AcceptStation": "快件到达【⽯家庄⾼开集散中⼼】","AcceptTime": "2020-02-14 04:27:00"}, {"AcceptStation": "快件在【⽯家庄⾼开集散中⼼】已装车,准备发往【长沙星沙集散中⼼】","AcceptTime": "2020-02-14 08:36:14"}, {"AcceptStation": "快件已发车","AcceptTime": "2020-02-14 18:34:31"}, {"AcceptStation": "快件到达【长沙星沙集散中⼼】","AcceptTime": "2020-02-16 09:58:05"}, {"AcceptStation": "快件在【长沙星沙集散中⼼】已装车,准备发往【怀化盈⼝集散点】","AcceptTime": "2020-02-16 11:03:53"}, {"AcceptStation": "快件已发车","AcceptTime": "2020-02-16 11:50:35"}, {"AcceptStation": "快件到达【怀化盈⼝集散点】","AcceptTime": "2020-02-16 20:20:42"}, {"AcceptStation": "快件在【怀化盈⼝集散点】已装车,准备发往【沅陵县御鑫城营业点】","AcceptTime": "2020-02-17 05:33:23"}, {"AcceptStation": "快件已发车","AcceptTime": "2020-02-17 05:33:37"}, {"AcceptStation": "快件到达【沅陵县御鑫城营业点】","AcceptTime": "2020-02-17 07:55:20"}, {"AcceptStation": "快件在【沅陵县御鑫城营业点】已装车,准备发往【怀化市沅陵县⼆⾣苗族乡合作点】","AcceptTime": "2020-02-17 09:31:53"}, {"AcceptStation": "快件到达【怀化市沅陵县⼆⾣苗族乡合作点】","AcceptTime": "2020-02-17 09:32:16"}, {"AcceptStation": "正在派送途中,请您准备签收(派件⼈:邓⼩云,电话:132********)","AcceptTime": "2020-02-17 09:32:31"}, {"AcceptStation": "快件交给邓⼩云,正在派送途中(联系电话:132********,顺丰已开启“安全呼叫”保护您的电话隐私,请放⼼接听!)", "AcceptTime": "2020-02-17 09:33:26"}, {"AcceptStation": "已签收,感谢使⽤顺丰,期待再次为您服务(主单总件数:1件)","AcceptTime": "2020-02-17 22:41:24"}, {"AcceptStation": "在官⽹\"运单资料&签收图\",可查看签收⼈信息","AcceptTime": "2020-02-17 22:41:26"}],"State": "3","EBusinessID": "1264783","Success": true}8.失败返回报⽂(⽰例){"LogisticCode": "295734066970","ShipperCode": "SF","Traces": [],"State": "0","EBusinessID": "1264783","Reason": "业务错误[没有可⽤套餐]","Success": false}说明:未实名认证,未订购套餐,套餐可⽤查询量已经⽤完都会返回此报⽂信息/9.⽆轨迹返回报⽂(⽰例){"LogisticCode": "295734066970","ShipperCode": "SF","Traces": [],"State": "0","EBusinessID": "1264783","Reason": "暂⽆轨迹信息","Success": true}10.分步讲解(C#版本)10.1,请求数据包结构10.2,C#调⽤代码⽰例//电商IDstring eEBusinessID = "test1617571";//电商加密私钥,快递鸟提供,注意保管,不要泄漏string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";//请求urlstring reqURL = ":8080/kdniaosandbox/gateway/exterfaceInvoke.json";//请求指令string reqType="1002";//2-jsonstring dataType = "2";//字符编码采⽤UTF-8string charset = "UTF-8";//JSON字符串stringstring 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的⽅法就能获取到⾥⾯的字段信息。
菜鸟物流api接口对接标准
菜鸟物流api接口对接标准菜鸟物流是阿里巴巴集团旗下的一家专业物流服务提供商,致力于为电商行业提供全方位的物流解决方案。
菜鸟物流提供了一系列的API接口,方便企业与菜鸟物流进行系统对接,实现物流信息的及时同步和管理。
下面将详细介绍菜鸟物流API接口对接的标准。
1.确定对接需求:在进行API接口对接之前,首先需要确定对接的具体需求,包括物流信息的同步、订单的下发、运单的打印等功能。
2.申请接口权限:在菜鸟物流官网上申请API接口权限,获取对接所需的AppKey和AppSecret。
3.查询接口文档:下载菜鸟物流提供的API接口文档,了解各个接口的功能和调用方式。
4.选择合适的接口:根据对接需求选择合适的API接口,如物流信息查询接口、订单创建接口、运单打印接口等。
5.确定数据格式:确定接口请求和返回数据的格式,通常采用JSON格式进行数据交互。
6.进行接口调试:使用Postman等工具进行接口调试,验证接口的正确性和稳定性。
7.编写接口代码:根据接口文档编写对应的接口调用代码,实现与菜鸟物流系统的数据交互。
8.进行接口对接测试:在测试环境下进行接口对接测试,确保接口的功能正常。
9.与菜鸟物流对接人员沟通:在遇到问题时及时与菜鸟物流对接人员沟通,协助解决接口对接中的各种技术问题。
10.部署上线:完成接口对接测试后,将代码部署到生产环境上线,实现与菜鸟物流系统的正式对接。
11.完善接口监控:对接成功后,需要建立接口监控机制,及时发现和解决接口异常问题。
12.高可用性设计:在接口对接过程中,需要考虑接口的高可用性设计,保障接口的稳定性和可靠性。
13.数据加密传输:在进行数据传输时,需采用加密算法对数据进行加密,确保数据的安全性。
14.接口调用频率控制:合理控制接口的调用频率,防止接口被滥用导致系统崩溃。
15.接口权限验证:在接口调用时需要进行权限验证,确保只有授权的用户可以调用接口。
16.异常处理机制:对接口调用过程中可能出现的异常情况进行处理,保证系统的稳定性。
常用快递单号物流查询接口通用API(JAVA对接)
常用快递单号物流查询接口通用API (JAVA 对接)快递查询接口通用API 是给发货电商以实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和APIKEY快递API 的应用场景与用途最常见的应用场景如下:(1)电商网站:例如B2C ,团购,B2B ,批发分销站,C2C ,本地生活交易等网站。
(2)管理系统:订单处理平台,调度平台,发货平台,分销系统,渠道管理系统,客户管理系统,ERP 等。
快递API 的用途如下:(1)让顾客登录网站后,直接在“我的订单”页面上可以看到订单的物流状态。
(2)自动筛选出“已签收”,“疑难件”等状态的单号,减轻物流跟单人员的压力。
(3)更改订单的状态和交易流程,例如单号变为“已签收”,可以让订单转化可以确认退换货等。
(4)评估选择快递公司,根据“已签收”的运单数,可以算出销售人员的业绩,并进行应对的结算。
(5)邮件,短信提醒用户运单的最新状态,可以安抚用户,也可以利用邮件短信二次营销。
对接要求:(1),查询接口支持遵循运输单号查询(个别查询,并发不超过10个/ S )。
(2),指定的物流运输单号选择相应的快递公司编码,格式不对或则编码错误都会返回失败的信息。
例如EMS 物流单号应选择快递公司编码(EMS )(3),返回的物流跟踪信息遵循发生的时间升序排列。
(4),接口指令1002(5),接口提供:快递鸟 (6),请求地址:http ://java 请求示例: 1个2 3 4 5 6 7 8 9 10 import java.io.BufferedReader;import java.io.IOException; import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .URL;import .URLEncoder;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map;11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 /**** 单日超过500单查询量,建议接入物流轨迹订阅推送接口**/public class KdniaoTrackQueryAPI {//DEMOpublic static void main(String[] args) {KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();try {String result = api.getOrderTracesByJson("ANE", "210001633605");System.out.print(result);} catch (Exception e) {e.printStackTrace();}}//电商IDprivate String EBusinessID="申请";//电商加密私钥,注意保管,不要泄漏private String AppKey="申请";//请求urlprivate String ReqURL="/Ebusiness/EbusinessOrderHandle.aspx";/*** Json 方式 查询订单物流轨迹* @throws Exception*/public String getOrderTracesByJson(String expCode, String expNo) throws Exception{String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";Map params = new HashMap();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "1002");String dataSign=encrypt(requestData, AppKey, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result=sendPost(ReqURL, params);//根据公司业务处理返回的信息......5556575859606162636465666768697071727374757677787980818283848586878889909192939495969798return result;}/*** MD5加密* @param str 内容* @param charset 编码方式* @throws Exception*/@SuppressWarnings("unused")private String MD5(String str, String charset) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes(charset));byte[] result = md.digest();StringBuffer sb = new StringBuffer(32);for(int i = 0; i < result.length; i++) {int val = result[i] & 0xff;if(val <= 0xf) {sb.append("0");}sb.append(Integer.toHexString(val));}return sb.toString().toLowerCase();}/*** base64编码* @param str 内容* @param charset 编码方式* @throws UnsupportedEncodingException*/private String base64(String str, String charset) throws UnsupportedEncodingException{ String encoded = base64Encode(str.getBytes(charset));return encoded;}@SuppressWarnings("unused")private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{ String result = URLEncoder.encode(str, charset);return result;}/**99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142* 电商Sign签名生成* @param content 内容* @param keyValue Appkey* @param charset 编码方式* @throws UnsupportedEncodingException ,Exception* @return DataSign签名*/@SuppressWarnings("unused")private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception{if(keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}/*** 向指定 URL 发送POST方法的请求* @param url 发送请求的 URL* @param params 请求的参数集合* @return 远程资源的响应结果*/@SuppressWarnings("unused")private String sendPost(String url, Map params) {OutputStreamWriter out = null;BufferedReader in = null;StringBuilder result = new StringBuilder();try{URL realUrl = new URL(url);HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// POST方法conn.setRequestMethod("POST");// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.connect();143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186// 获取URLConnection对象对应的输出流out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");// 发送请求参数if(params != null) {StringBuilder param = new StringBuilder();for(Map.Entry entry : params.entrySet()) {if(param.length()>0){param.append("&");}param.append(entry.getKey());param.append("=");param.append(entry.getValue());//System.out.println(entry.getKey()+":"+entry.getValue());}//System.out.println("param:"+param.toString());out.write(param.toString());}// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while((line = in.readLine()) != null) {result.append(line);}} catch(Exception e) {e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result.toString();188 189190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 private static char[] base64EncodeChars = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n','o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3','4', '5', '6', '7', '8', '9', '+', '/'};public static String base64Encode(byte[] data) {StringBuffer sb = new StringBuffer();int len = data.length;int i = 0;int b1, b2, b3;while(i < len) {b1 = data[i++] & 0xff;if(i == len){sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[(b1 & 0x3) << 4]);sb.append("==");break;}b2 = data[i++] & 0xff;if(i == len){sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);sb.append("=");break;}b3 = data[i++] & 0xff;sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);sb.append(base64EncodeChars[b3 & 0x3f]);}return sb.toString();}。
教你快速查询快递单号并分析物流
教你快速查询快递单号并分析物流在日常生活中,我们经常会遇到需要查询快递单号并分析物流情况的场景。
无论是网购还是寄递物品,了解包裹的状态和预计到达时间是非常重要的。
为了帮助大家快速查询快递单号并分析物流,本文将介绍几种常用的查询方法和相关的物流分析。
一、查询快递单号的常用方法1. 快递单号查询网站目前,各大快递公司都提供在线查询服务,只需在搜索引擎中输入快递公司名称加上“快递单号查询”,即可打开相关查询网站。
在网站上,用户只需输入快递单号,点击查询即可获取包裹的物流信息。
2. 快递公司官方手机客户端为了方便用户查询快递单号和物流信息,许多快递公司推出了手机客户端。
用户只需下载并安装相应的手机客户端,登录账号后即可轻松查询物流信息。
同时,手机客户端还提供了推送通知功能,用户无需主动查询,即可及时获取物流动态。
3. 第三方快递查询平台除了快递公司官方网站和手机客户端外,还有一些第三方快递查询平台可以帮助用户查询快递单号。
这些平台通常会整合多家快递公司的查询功能,用户只需输入快递单号,即可一次性获取多个快递公司的物流信息。
二、分析物流情况的方法1. 物流轨迹分析通过查询快递单号,我们可以获取到包裹的物流轨迹信息。
通过分析物流轨迹,我们可以判断包裹当前所处的位置和运输状态。
例如,如果包裹已到达目的地所在城市,那么我们可以预计包裹将在短时间内派送到我们手中。
2. 物流节点分析在物流轨迹中,有一些重要的节点信息可以帮助我们更好地了解物流情况。
例如,物流节点可能包括揽件、发货、中转、到达、派送等。
根据这些节点信息,我们可以判断包裹当前的进程和是否存在异常情况。
3. 物流时间分析通过查询物流信息,我们还可以获取到每个节点的时间信息。
通过对时间信息的分析,我们可以预估包裹的运输时间和派送时间。
根据物流时间分析,我们可以合理安排接收包裹的时间,避免因物流延误而造成的不便。
三、注意事项1. 查询快递单号时,确保输入准确为了能够准确查询物流信息,我们应该确保输入的快递单号是正确的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈各种快递单号查询接口种类及对接方法
目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。
第一种耗费时间长,但是是直接和快递公司合作,第二种虽然是间接对接,但是对接简便,对后期的接口维护可以省很多时间和人力成本。
集成接口还有其他公司提供,有其他需要可以去找,快递鸟其实能满足电商、ERP系统商这些企业需求了。
这里就以快递鸟为例说说对接方法。
快递鸟物流查询接口有免费和收费版本,对接周期大概在一天左右,他们有写好的demo,可以直接使用。
一.即时查询接口
1. 接口规则
(1)、查询接口支持按照运单号查询(单个查询,并发不超过10个/S)。
(2)、指定的物流运单号选择相应的快递公司编码,格式不对或则编码错误都会返失败的信息。
如EMS物流单号应选择快递公司编码(EMS)
(3)、返回的物流跟踪信息按照发生的时间升序排列。
(4)、接口指令1002。
2. 系统级和应用级输入参数
返回结果参数
4. 示例
//请求示例
<br>{
"OrderCode": "",
"ShipperCode": "SF",
"LogisticCode": "118650888018" }
//返回示例<br>//没有物流轨迹的
{
"EBusinessID": "1109259",
"Traces": [],
"OrderCode": "",
2.2接收接口
这个是用户在订阅单号成功且有物流轨迹更新后,快递鸟的推送
客户通过下单、订阅接口,把运单号在快递鸟系统订阅。
运单物流信息有更新,快递鸟通过推送接口把更新的信息推送给客户。
推送接口由用户按照快递鸟规则实现。
商户开放接口,快递鸟定时将最新的物流轨迹推送到商户平台。
优点:客户不需要关注轨迹变化,一旦有更新,快递鸟自动推送。
缺点:对客户的服务器性能有所要求,快递鸟定时请求接口,对客户的服务器有一定的影响,客户服务器异常将接受不到最新数据。
快递鸟推送接口根据业务不同,会根据RequestType的分类推送不同的数据,用户需对推送的数据进行分类保存。
原推送接口无需变化,快递鸟会根据推送版本进行推送。
1. 接口规则
(1)、客户服务器必须稳定,并且有一定的接受数据能力(需要在5S内给快递鸟返回成功示例,超时会判断推送失败)。
快递鸟通过多线程推送物流信息给客户。
(2)、客户需要按快递鸟要求开发接口,保证信息的正常接收。
客户接数据后,存储并马上返回接收响应。
如果客户对数据进行处理,再做出响应。
这会造成网络超时,传输效率低下。
(3)、主动推送时物流信息接收接口由客户提供,接口必须按照快递鸟的要求实现。
(4)、客户提供接口地址,用户登陆用户管理后台-----调试平台-----推送接口进行测试---(成功返回示例后)才可以配置。
(5)、接口只支持Json数据格式。
(6)、POST方式请求。
示例:。