调用外部API接口实现快递查询
快递单号查询快递鸟API接口-EMS
快递单号查询快递鸟API接⼝-EMS EMS快递查询调⽤快递鸟提供的快递查询API标准接⼝,快速对接100多家快递公司的物流轨迹查询,本篇⽂章实现<EMS>的快递单号查询。
⾸先我们准备好需要⽤到的资源,这⾥推荐⼤家去爱奇艺查看视频教程:测试商户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,快递鸟官⽹要求必须传递快递公司编码和物流单号,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返回参数定义:参数名称类型说明必须要求EBusinessID String⽤户ID ROrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流运单号OSuccess Bool成功与否RReason String失败原因OState String物流状态:2-在途中,3-签收,4-问题件RTracesAcceptTime String时间RAcceptTime String返回报⽂信息{"LogisticCode": "1160001630231","ShipperCode": "EMS","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接口调用对接为了让你对接更简单,我会分享源代码,把源码复制到你的项目上,就能快速完成电商售后退货快递寄件下单预约快递员上门取件接口对接,调用快递鸟提供的上门取件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是否一致,如果一致进行业务操作,如果不一致返回错误。
快递单号查询api 开发快递查询应用程序
快递单号查询api 开发快递查询应用程序快递单号查询api是对外开放的应用程序接口,基于该API开发自己的快递查询应用程序。
接口名称:快递单号查询api接口平台:聚合数据接口地址:/exp/index支持格式:JSON/XML请求方式:HTTP POST/GET请求示例:/exp/index?key=key&com=sf&no=575677355677请求参数:名称类型必填说明com string 是需要查询的快递公司编号no string 是需要查询的订单号key string 是应用APPKEY(应用详细页查询)dtype string 否返回数据的格式,xml或json,默认json调用样例及调试工具:API测试工具返回字段:名称类型说明参考JSON返回示例- -快递单号查询api JSON返回示例:{"resultcode":"200",/*返回标识码*/"reason":"查询成功!","result":{"company":"顺丰","com":"sf","no":"575677355677","list":[{"datetime":"2013-06-25 10:44:05", /*时间*/"remark":"已收件", /*描述*/"zone":"台州市" /*区域*/},{"datetime":"2013-06-25 11:05:21","remark":"快件在台州,准备送往下一站台州集散中心","zone":"台州市"},{"datetime":"2013-06-25 20:36:02","remark":"快件在台州集散中心,准备送往下一站台州集散中心","zone":"台州市"},{"datetime":"2013-06-25 21:17:36","remark":"快件在台州集散中心,准备送往下一站杭州集散中心","zone":"台州市"},{"datetime":"2013-06-26 12:20:00","remark":"快件在杭州集散中心,准备送往下一站西安集散中心","zone":"杭州市"},{"datetime":"2013-06-27 05:48:42","remark":"快件在西安集散中心,准备送往下一站西安","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:03:03","remark":"正在派件..","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:51:33","remark":"派件已签收","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:51","remark":"签收人是:已签收","zone":"西安市/咸阳市"}]"status": "1", /*0或1,1表示签收或退回*/}}快递单号查询api XML返回示例:<root><resultcode>200</resultcode><reason>查询成功!</reason><result><company>顺丰</company><com>sf</com><no>575677355677</no><list><item><datetime>2013-06-25 10:44:05</datetime><remark>已收件</remark><zone>台州市</zone></item><item><datetime>2013-06-25 11:05:21</datetime><remark>快件在台州,准备送往下一站台州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-25 20:36:02</datetime><remark>快件在台州集散中心,准备送往下一站台州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-25 21:17:36</datetime><remark>快件在台州集散中心,准备送往下一站杭州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-26 12:20:00</datetime><remark>快件在杭州集散中心,准备送往下一站西安集散中心</remark><zone>杭州市</zone></item><item><datetime>2013-06-27 05:48:42</datetime><remark>快件在西安集散中心,准备送往下一站西安</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:03:03</datetime><remark>正在派件..</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:51:33</datetime><remark>派件已签收</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:51</datetime><remark>签收人是:已签收</remark><zone>西安市/咸阳市</zone></item></list><status>1</status></result></root>。
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就可以使用了
对接完成后就是在调试平台调试接口,对比请求报文和返回报文确认对接是不是正确的。
这里需要注意的是,对接的是什么接口,就查看什么接口的调试报文
测试后就可以正式调用了,正式调用的时候在正式地址调用
最后做一个物流轨迹的数据展现就可以了,如下图。
跨越速运 java 调用api 查询路由基础信息的方法 -回复
跨越速运java 调用api 查询路由基础信息的方法-回复跨越速运是一家知名的物流公司,为了方便开发者查询路由基础信息,他们提供了一套完善的API。
本文将以Java编程语言为例,教您如何使用跨越速运的API查询路由基础信息。
第一步,注册并获取API密钥要使用跨越速运的API,您首先需要注册一个开发者账号,并且申请一个API密钥。
在跨越速运的官方网站上,找到开发者中心,在那里您可以注册一个开发者账号。
注册成功后,登录您的账号,在账号管理中心找到API密钥管理选项,并生成一个API密钥。
第二步,配置开发环境在您的电脑上安装Java开发环境,确保您可以使用Java编程语言进行开发。
您可以选择安装JDK并将其配置到系统环境变量中。
第三步,导入API库跨越速运为开发者提供了Java的API库,您需要将该库导入到您的项目中。
您可以在官方网站的开发者中心下载API库文件,完成下载后解压缩文件,并将其中的jar文件添加到Java项目的依赖中。
第四步,调用API查询路由基础信息在Java项目中,您可以使用Java的HTTP请求库调用跨越速运的API。
以下是一个简单的例子,演示如何使用Java发送HTTP GET请求,并通过API查询路由基础信息。
javaimport java.io.BufferedReader;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;import .URLEncoder;public class Main {public static void main(String[] args) {try {String apiKey = "YOUR_API_KEY"; 替换为您的API 密钥String apiUrl = "String waybillNo = "YOUR_WAYBILL_NO"; 替换为您要查询的运单号码String encodedWaybillNo =URLEncoder.encode(waybillNo, "UTF-8");String requestUrl = apiUrl + "?api_key=" + apiKey + "&waybill_no=" + encodedWaybillNo;URL url = new URL(requestUrl);HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");int responseCode =connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {BufferedReader bufferedReader = new BufferedReader(newInputStreamReader(connection.getInputStream()));StringBuffer response = new StringBuffer();String line;while ((line = bufferedReader.readLine()) != null) {response.append(line);}bufferedReader.close();System.out.println(response.toString());} else {System.out.println("请求错误,错误码:" + responseCode);}connection.disconnect();} catch (Exception e) {e.printStackTrace();}}}上述代码中,您需要将YOUR_API_KEY替换为您在第一步中获取到的API密钥,将YOUR_WAYBILL_NO替换为您要查询的运单号码。
国际快递查询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:针对不同的快递商,可以按照语言返回不同的结果。
快递鸟丰网速运快递查询接口源码_快递鸟单号查询API
快递鸟丰⽹速运快递查询接⼝源码_快递鸟单号查询API看完快递鸟api顺丰丰⽹速运快递对接教程这篇⽂章,然后把源码复制到你的项⽬上,就能快速完成丰⽹速运快递接⼝对接.更适合刚⼊门的菜鸟,调⽤快递鸟的丰⽹速运快递快递查询API接⼝,能查询到快递单号从收件、运输,到转运中⼼,派送到签收等各个环节的物流发货状态。
快递鸟api接⼝不区分开发语⾔,⽀持Java,C#,PHP,Python,ObjectC等开发语⾔的程序调⽤。
编码⽤顺丰编码即可查询(SF),下⾯具体讲解实现过程.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.6,调试页⾯:2.7,调试⼯具:去调试(使⽤快递鸟账号登录)3.请求参数(Headers)4.请求参数(Body)6.请求完整报⽂(⽰例)RequestData=%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27JTSD%27%2c%27LogisticCode%27%3a%27jt0000052600488%27%7d&EBusinessID=1264783&RequestType=1002&DataSign=MTYyMDU4NWQ2NmU1ZDI2MDEzNGE5YmVlM2YxYzEzMTM%3d&DataType=27.成功返回报⽂(⽰例){"LogisticCode": "SF0000052600488","ShipperCode": "SF","Traces": [{"AcceptStation": "【芜湖市】【芜湖镜湖⽹点】的邓拥军 178********已取件","AcceptTime": "2020-03-16 16:26:13"},{"AcceptStation": "【芜湖市】【芜湖镜湖⽹点】的邓拥军 178********已取件","AcceptTime": "2020-03-16 16:41:33"},{"AcceptStation": "【芜湖市】【芜湖镜湖⽹点】已收件","AcceptTime": "2020-03-16 17:39:21"},{"AcceptStation": "【芜湖市】快件离开【芜湖镜湖⽹点】已发往【芜湖转运中⼼】","AcceptTime": "2020-03-16 17:40:27"},{"AcceptStation": "【芜湖市】快件到达【芜湖转运中⼼】","AcceptTime": "2020-03-16 19:36:32"},{"AcceptStation": "【芜湖市】快件离开【芜湖转运中⼼】已发往【合肥转运中⼼】","AcceptTime": "2020-03-16 20:47:03"},{"AcceptStation": "【合肥市】快件到达【合肥转运中⼼】","AcceptTime": "2020-03-16 23:40:10"},{"AcceptStation": "【合肥市】快件离开【合肥转运中⼼】已发往【⼴州花都转运中⼼】","AcceptTime": "2020-03-17 00:10:48"},{"AcceptStation": "【⼴州市】快件到达【⼴州花都转运中⼼】","AcceptTime": "2020-03-17 20:45:00"},{"AcceptStation": "【⼴州市】快件离开【⼴州花都转运中⼼】已发往【深圳宝安转运中⼼】","AcceptTime": "2020-03-18 00:17:55"},{"AcceptStation": "【深圳市】快件到达【深圳宝安转运中⼼】","AcceptTime": "2020-03-18 03:00:17"},{"AcceptStation": "【深圳市】快件离开【深圳宝安转运中⼼】已发往【深圳福⽥⽹点】","AcceptTime": "2020-03-18 04:44:39"},{"AcceptStation": "【深圳市】【深圳福⽥⽹点】的邹俊林 176********正在派件","AcceptTime": "2020-03-18 08:10:09"},{"AcceptStation": "【深圳市】【深圳福⽥⽹点】的赵凯 159********正在派件","AcceptTime": "2020-03-18 09:55:19"},{"AcceptStation": "【深圳市】快件已签收,签收⼈是【代收】,如有疑问请联系:159********,期待再次为您服务", "AcceptTime": "2020-03-18 14:53:54"}],"State": "3","EBusinessID": "1264783","Success": true}8.失败返回报⽂(⽰例){"LogisticCode": "SF0000052600488","ShipperCode": "SF","Traces": [],"State": "0","EBusinessID": "1264783","Reason": "业务错误[没有可⽤套餐]","Success": false}说明:未实名认证,未订购套餐,套餐可⽤查询量已经⽤完都会返回此报⽂信息9.⽆轨迹返回报⽂(⽰例){"LogisticCode": "SF0000052600488","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":"SF","LogisticCode":"SF0000052600488"}" ;//把(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查询快递接口
1.申请一个快递鸟的帐号获取授权申请/reg快递鸟的帐号使永久免费的,且申请了立即就能用的,也不需要审核。
2.按照单号识别接口和即时查询接口封装好数据3.获取返回的 json 数据输出import jsonimport urllibimport urllib.requestimport hashlibimport base64import urllib.parse# 此处为快递鸟官网申请的帐号和密码APP_id = "1266271"APP_key = "7526a46e-3a2a-4f5b-8659-d72f361e3386"def encrypt(origin_data, appkey):"""数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码""" m = hashlib.md5()m.update((origin_data+appkey).encode("utf8"))encodestr = m.hexdigest()base64_text = base64.b64encode(encodestr.encode(encoding='utf-8'))return base64_textdef sendpost(url, datas):"""发送post请求"""postdata = urllib.parse.urlencode(datas).encode('utf-8')header = {"Accept": "application/x-www-form-urlencoded;charset=utf-8","Accept-Encoding": "utf-8"}req = urllib.request.Request(url, postdata, header)get_data = (urllib.request.urlopen(req).read().decode('utf-8'))return get_datadef get_company(logistic_code, appid, appkey, url):"""获取对应快递单号的快递公司代码和名称"""data1 = {'LogisticCode': logistic_code}d1 = json.dumps(data1, sort_keys=True)requestdata = encrypt(d1, appkey)post_data = {'RequestData': d1,'EBusinessID': appid,'RequestType': '2002','DataType': '2','DataSign': requestdata.decode()}json_data = sendpost(url, post_data)sort_data = json.loads(json_data)return sort_datadef get_traces(logistic_code, shipper_code, appid, appkey, url):"""查询接口支持按照运单号查询(单个查询)"""data1 = {'LogisticCode': logistic_code, 'ShipperCode': shipper_code}d1 = json.dumps(data1, sort_keys=True)requestdata = encrypt(d1, appkey)post_data = {'RequestData': d1, 'EBusinessID': appid, 'RequestType': '1002', 'DataType': '2','DataSign': requestdata.decode()}json_data = sendpost(url, post_data)sort_data = json.loads(json_data)return sort_datadef recognise(expresscode):"""输出数据"""url = ':8081/Ebusiness/EbusinessOrderHandle.aspx' data = get_company(expresscode, APP_id, APP_key, url)if not any(data['Shippers']):print("未查到该快递信息,请检查快递单号是否有误!")else:print("已查到该", str(data['Shippers'][0]['ShipperName'])+"("+str(data['Shippers'][0]['ShipperCode'])+")", expresscode)trace_data = get_traces(expresscode, data['Shippers'][0]['ShipperCode'], APP_id, APP_key, url)if trace_data['Success'] == "false" or not any(trace_data['Traces']): print("未查询到该快递物流轨迹!")else:str_state = "问题件"if trace_data['State'] == '2':str_state = "在途中"if trace_data['State'] == '3':str_state = "已签收"print("目前状态: "+str_state)trace_data = trace_data['Traces']item_no = 1for item in trace_data:print(str(item_no)+":", item['AcceptTime'],item['AcceptStation'])item_no += 1print("\n")returnwhile True:code = input("请输入快递单号(Esc退出):")code = code.strip()if code == "esc":breakrecognise(code)【疑问解答】1、问题:快递鸟接口有并发要求吗?快递鸟即时查询接口并发不超过10次/秒,物流跟踪接口订阅不超过30次/秒,电子面单接口下单不超过20次/秒。
PHP调用快递查询API代码示例
PHP调用快递查询API代码示例这是一个互联网时代,传统的物流已经难以满足大家的需求,而快递鸟这一智能物流服务平台的出现成了物流服务的新宠,不仅查询方便,隐私方面也做得很不错,那么PHP调用快递查询API代码是怎样的呢?下面我们一起来看一下。
PHP Class Example安装:1. 复制Trackingmore API类的代码到你需要的位置,具体API 类的代码放在本文档的后半部分,2.在这一行填写你自己在后台生成的api key,protected $apiKey = 'YOUR API KEY';3. 在程序中包含这个类.列出所有运输商$track = new Trackingmore;$track = $track->getCarrierList();通过单号自动识别运输商$track = new Trackingmore;$trackingNumber = 'RM121546236CN';$track = detectCarrier($trackingNumber);列出所有的跟踪$track = new Trackingmore;$page = 1;$limit = 50;$createdAtMin = time() - 7*24*60*60; $createdAtMax = time();$track =$track->getTrackingsList($page,$limit,$createdAtMin,$createdAtMax);创建一个跟踪项目$track = new Trackingmore;$extraInfo['title'] = 'iphone6'; $extraInfo['customer_name'] = 'charse chen'; $extraInfo['customer_email'] = 'chasechen@'; $extraInfo['order_id'] = '8988787987'; $track =$track->createTracking('china-post','RM121516216CN',$extraInfo);创建多个跟踪$track = new Trackingmore;$items = array(array('tracking_number' => 'RM131516216CN','carrier_code' => 'china-post','title' => 'iphone6','customer_name' => 'charse chen','customer_email' => 'chasechen@','order_id' => '8988787987'),array('tracking_number' => 'RM111516216CN','carrier_code' => 'china-post','title' => 'iphone6s','customer_name' => 'clooney chen','customer_email' => 'clooneychen@','order_id' => '898874587'),);$track = $track->createMultipleTracking($items);获取跟踪单个跟踪结果$track = new Trackingmore;$track =$track->getSingleTrackingResult('china-post','RM131516216CN');更新跟踪项目$track = new Trackingmore;$extraInfo['title'] = 'iphone6';$extraInfo['customer_name'] = 'charse chen';$extraInfo['customer_email'] = 'chasechen@'; $extraInfo['order_id'] = '8988787987';$track =$track->updateTrackingItem('china-post','RM131516216CN',$extraInfo);删除跟踪项目$track = new Trackingmore;$track =$track->deleteTrackingItem('china-post','RM131516216CN');获取单次跟踪的实时跟踪结果$track = new Trackingmore;$track =$track->getRealtimeTrackingResults('china-post','RM131516216CN');PHP Class Example API 类的代码如下,你可以将下列代码复制到代码编辑器中,这样会看起来整齐一些,:class Trackingmore{ const API_BASE_URL = '';const ROUTE_CARRIERS = 'carriers/'; constROUTE_CARRIERS_DETECT = 'carriers/detect'; const ROUTE_TRACKINGS = 'trackings';const ROUTE_LIST_ALL_TRACKINGS = 'trackings/get'; const ROUTE_CREATE_TRACKING = 'trackings/post'; constROUTE_TRACKINGS_BATCH = 'trackings/batch';const ROUTE_TRACKINGS_REALTIME = 'trackings/realtime'; protected $apiKey = 'your api key';protected function _getApiData($route, $method = 'GET', $sendData = array()){ $method = strtoupper($method);$requestUrl = self::API_BASE_URL.$route; $curlObj = curl_init();curl_setopt($curlObj, CURLOPT_URL,$requestUrl);if($method == 'GET'){ curl_setopt($curlObj,CURLOPT_HTTPGET,true); }elseif($method == 'POST'){curl_setopt($curlObj, CURLOPT_POST, true); }elseif ($method =='PUT'){ curl_setopt($curlObj, CURLOPT_PUT, true);}else{ curl_setopt($curlObj, CURLOPT_CUSTOMREQUEST, $method); } curl_setopt($curlObj, CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($curlObj, CURLOPT_TIMEOUT, 90);curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, true);curl_setopt($curlObj, CURLOPT_HEADER, 0);$headers = array( 'Trackingmore-Api-Key: ' . $this->apiKey,'Content-Type: application/json',); if($sendData){ $dataString = json_encode($sendData);curl_setopt($curlObj, CURLOPT_POSTFIELDS, $dataString); $headers[] = 'Content-Length: ' . strlen($dataString); }curl_setopt($curlObj, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curlObj); curl_close($curlObj);unset($curlObj); return $response; }// List all carriers public function getCarrierList(){ $returnData = array();$requestUrl = self::ROUTE_CARRIERS; $result =$this->_getApiData($requestUrl, 'GET'); if ($result) {$returnData = json_decode($result, true); } return $returnData;} /*Detect a carrier by tracking code* @param string $trackingNumber Tracking number * @return array */public function detectCarrier($trackingNumber) { $returnData = array();$requestUrl = self::ROUTE_CARRIERS_DETECT;$sendData['tracking_number'] = $trackingNumber; $result =$this->_getApiData($requestUrl, 'POST',$sendData);if ($result) { $returnData = json_decode($result, true); }return $returnData; }/** * List all trackings * @access public* @param int $page Page to display (optional) * @param int $limit Items per page (optional) * @param int $createdAtMin Start date and time of trackings created (optional)* @param int $createdAtMax * @return array */public function getTrackingsList($page = 1,$limit =100,$createdAtMin = 0,$createdAtMax = 0){ $returnData = array(); $sendData = array();$requestUrl = self::ROUTE_LIST_ALL_TRACKINGS; $createdAtMax= !empty($createdAtMax)?$createdAtMax:time(); $sendData['page'] = $page;$sendData['limit'] = $limit; $sendData['created_at_min'] = $createdAtMin; $sendData['created_at_max'] = $createdAtMax;$result = $this->_getApiData($requestUrl, 'GET', $sendData); if ($result) { $returnData = $result;}return $returnData; }/** * Create a tracking item* @access public * @param string $trackingNumber Tracking number * @param string $carrierCode Carrier code* @param array $extraInfo Title,Customer name,email,order ID (optional) * @return array */public functioncreateTracking($carrierCode,$trackingNumber,$extraInfo =array()){ $returnData = array(); $sendData = array();$requestUrl = self::ROUTE_CREATE_TRACKING;$sendData['tracking_number'] = $trackingNumber;$sendData['carrier_code'] = $carrierCode; $sendData['title']= !empty($extraInfo['title'])?$extraInfo['title']:null;$sendData['customer_name']= !empty($extraInfo['customer_name'])?$extraInfo['customer_name']:nul l;$sendData['customer_email']= !empty($extraInfo['customer_email'])?$extraInfo['customer_email']:nul l; $sendData['order_id']= !empty($extraInfo['order_id'])?$extraInfo['order_id']:null;$result = $this->_getApiData($requestUrl, 'POST', $sendData); if ($result) { $returnData = json_decode($result, true);} return $returnData; }/** * Create multiple trackings.* @access public * @param array $multipleData Multiple tracking number,carrier code,title,customer name,customer email,order id *@return array*/ public functioncreateMultipleTracking($multipleData){ $returnData = array();$sendData = array(); $requestUrl = self::ROUTE_TRACKINGS_BATCH; if(!empty($multipleData)){foreach($multipleData as $val){ $items = array();$items['tracking_number']= !empty($val['tracking_number'])?$val['tracking_number']:null;$items['carrier_code']= !empty($val['carrier_code'])?$val['carrier_code']:null; $items['title']= !empty($val['title'])?$val['title']:null; $items['customer_name']= !empty($val['customer_name'])?$val['customer_name']:null;$items['customer_email']= !empty($val['customer_email'])?$val['customer_email']:null;$items['order_id'] = !empty($val['order_id'])?$val['order_id']:null; $sendData[] = $items;} }$result = $this->_getApiData($requestUrl, 'POST', $sendData); if ($result) { $returnData = json_decode($result, true);} return $returnData; }/*** Get tracking results of a single tracking * @access public * @param string $trackingNumber Tracking number* @param string $carrierCode Carrier code * @return array */public functiongetSingleTrackingResult($carrierCode,$trackingNumber){$returnData = array(); $requestUrl =self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber;$result = $this->_getApiData($requestUrl, 'GET'); if ($result){ $returnData = json_decode($result, true);} return $returnData; }/** * Update Tracking item* @access public * @param string $trackingNumber Tracking number * @param string $carrierCode Carrier code* @param array $extraInfo Title,Customer name,email,order ID (optional) * @return array */public functionupdateTrackingItem($carrierCode,$trackingNumber,$extraInfo){ $return Data = array(); $requestUrl =self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber;$sendData['title'] = !empty($extraInfo['title'])?$extraInfo['title']:null; $sendData['customer_name']= !empty($extraInfo['customer_name'])?$extraInfo['customer_name']:nul l; $sendData['customer_email']= !empty($extraInfo['customer_email'])?$extraInfo['customer_email']:nul l;$sendData['order_id']= !empty($extraInfo['order_id'])?$extraInfo['order_id']:null; $result = $this->_getApiData($requestUrl, 'PUT',$sendData); if ($result) { $returnData = json_decode($result, true); } return $returnData;} /*** Delete a tracking item * @access public * @param string $trackingNumber Tracking number* @param string $carrierCode Carrier code * @return array */public functiondeleteTrackingItem($carrierCode,$trackingNumber){ $returnData = array(); $requestUrl =self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber;$result = $this->_getApiData($requestUrl, 'DELETE'); if ($result){ $returnData = json_decode($result, true);} return $returnData; }/** * Get realtime tracking results of a single tracking* @access public * @param string $trackingNumber Tracking number * @param string $carrierCode Carrier code* @return array */ public function getRealtimeTrackingResults($carrierCode,$trackingNumber){$returnData = array(); $requestUrl =self::ROUTE_TRACKINGS_REALTIME; $sendData['tracking_number'] = $trackingNumber;$sendData['carrier_code'] = $carrierCode; $result =$this->_getApiData($requestUrl, 'POST',$sendData); if ($result) { $returnData = json_decode($result, true); } return $returnData;}以上,即为Trackingmore快递查询API的PHP调用示例。
接入快递接口API单号识别查询接口demo
接入快递接口API单号识别查询接口demo背景:分享一篇关于在电商系统中同步物流轨迹到本地服务器的文章,当前方案使用了快递鸟集成api做为数据来源接口,这个接口是免费使用的,不过提供的功能还是非常强大的,有专门的售后维护团队。
有多种语言demo可以进行调用1. 需求根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递Api接口,实现自动查询的功能2.应用场景(如图)3、进入“我的会员中心”进行实名认证注:3.1、认证类型、应用类型根据用户实际情况选择即可,接口返回数据与选择结果无关;3.2、标记为*的为必填,要求上传清晰、jpg格式且小于2M的证件图片;3.3、技术对接人信息为用户方对接工程师的信息;3.4、如有其他疑问可进入官网加入商务合作群进行咨询。
认证成功后,进入“产品服务管理”,开通相关会员服务Demo由第三方写好,只需要下载就可以运行用上,(自己做简单的修改)下面是下载Demo的网站,根据自己需要下载6. 下面是java版本的根据单号查询物流跟踪信息的详细代码6.1 创建KdniaoTrackQueryAPI 接口类下面是Demo的main方法测试代码import net.sf.json.JSONArray;import net.sf.json.JSONObject;//测试接口public class Demo {public static void main(String[] args) {KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();try {//第一个参数是快递公司简称(YD -- 韵达速递)//第二个参数是需要查询的快递单号String result = api.getOrderTracesByJson("YD", "3827670147715"); JSONObject jsonObject = JSONObject.fromObject(result);String ShipperCode = jsonObject.getString("ShipperCode");String LogisticCode = jsonObject.getString("LogisticCode");JSONArray Traces = jsonObject.getJSONArray("Traces");System.out.print(result+"\n");System.out.println("快递名称"+ShipperCode);System.out.println("快递单号"+LogisticCode);for(int i = 0; i < Traces.size(); i++) {JSONObject object = (JSONObject) Traces.get(i);String AcceptTime = object.getString("AcceptTime");String AcceptStation = object.getString("AcceptStation");System.out.println("时间:"+AcceptTime+"\t"+AcceptStation); }} catch (Exception e) {e.printStackTrace();}}}测试效果实图。
用PHP快速接入快递单号API查询接口源码方法
用PHP快速接入快递单号API查询接口源码方法背景最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的【PHP快递查询源码资源】已经不能正常使用了;为了方便以后的业务需求,经过比较,最后选择使用第三方物流快递鸟接口查询。
同时,在此进行整理,希望能帮到有需求的朋友们,谢谢…以中通快递为例,其他快递查询类似。
开发步骤①. 前期准备首先要进行快递鸟账号的注册并根据的要求,完善用户申请。
然后,根据自己的需求,开通所需服务(如果只是进行物流信息的查询,以当前业务查询次数较少为例):②. 集成类的使用首先需要登录快递鸟获取账号的用户ID 和API key 对所提供源码中的集成类BirdExpress.php ,进行配置项的替换操作然后将集成类整合到你的项目框架,根据框架规则进行必要修改(框架不同规则自然多数不同,本人为ThinkPHP5.1.2)下图为简单的调用测试:③. 核心处理方法源码首先,官方的代码demo获得的物流信息是正序展示的为了方便物流信息的倒序展示,我进行了对数组Traces 的反转操作④. [重要]: 代码逻辑梳理,以及整体业务设计构化通过上面核心源码的展示,你应该会注意到调用其方法,必须要传入快递公司编码和物流单号这两个参数好在,官方提供了快递公司编码,所以,鄙人的设计思路如下:1. 根据得到的快递公司编码Excel表取出其中的"快递公司"和"编码"两列数据存储到本地数据表2. 在后台操作人员输入快递单号时同时要求选择快递公司,获得"编码"从而保证,在数据表中,存储的快递单号唯一匹配到一个编码,继而方便后面进行快递信息查询时,可同时获得所需的两个参数.⑤. 效果展示截图对于业务量前期不大的网站足够使用,即便后期有需要,也可以直接进行套餐升级。
JAVA快递查询API接口调用代码示例
∙1、应用场景∙(1)电商网站用户打开“我的订单”时调用此API显示物流信息详情。
(2)电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题。
(3)每日调用次数限制不超过3000次,如超过该限制,请对接订阅推送API。
∙2、是否需要授权∙要∙3、接口描述/说明∙(1)查询接口支持按照运单号查询(单个查询)。
(2)接口需要指定快递单号的快递公司编码,格式不对或则编码错误都会返失败的信息。
如:EMS物流单号应选择快递公司编码(EMS)查看快递公司编码(3)返回的物流跟踪信息按照发生的时间升序排列。
(4)接口指令1002。
(5)接口支持的消息接收方式为HTTP POST,请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
(6)请求系统级参数说明:∙备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)。
(7)接口地址:API ID:点击申请API Key:点击申请API地址:/Ebusiness/EbusinessOrderHandle.aspx∙4、接口参数∙(1)请求内容字段定义∙(3)返回参数定义∙5、示例∙(1)请求示例JSON格式show sourceview sourceprint?1 {2 "OrderCode": "",3 "ShipperCode": "SF",4 "LogisticCode": "118650888018"5 }(2)返回示例JSON格式show sourceview sourceprint?01 没有物流轨迹的02 {03 "EBusinessID": "1109259",04 "Traces": [],05 "OrderCode": "",06 "ShipperCode": "SF",07 "LogisticCode": "118461988807",08 "Success": false,09 "Reason": null10 }11 有物流轨迹的12 {13 "EBusinessID": "1109259",14 "OrderCode": "",15 "ShipperCode": "SF",16 "LogisticCode": "118461988807",17 "Success": true,18 "State": 3,19 "Reason": null,20 "Traces": [21 {22 "AcceptTime": "2014/06/25 08:05:37",23 "AcceptStation": "正在派件..(派件人:邓裕富,电话:xxxxxxxxxx)[深圳市]",24 "Remark": null25 },26 {27 "AcceptTime": "2014/06/25 04:01:28",28 "AcceptStation": "快件在深圳集散中心 ,准备送往下一站深圳 [深圳市]",29 "Remark": null30 },31 {32 "AcceptTime": "2014/06/25 01:41:06",33 "AcceptStation": "快件在深圳集散中心[深圳市]",34 "Remark": null35 },36 {37 "AcceptTime": "2014/06/24 20:18:58",38 "AcceptStation": "已收件[深圳市]",39 "Remark": null40 },41 {42 "AcceptTime": "2014/06/24 20:55:28",43 "AcceptStation": "快件在深圳 ,准备送往下一站深圳集散中心 [深圳市]",44 "Remark": null45 },46 {47 "AcceptTime": "2014/06/25 10:23:03",48 "AcceptStation": "派件已签收[深圳市]",49 "Remark": null50 },51 {52 "AcceptTime": "2014/06/25 10:23:03",53 "AcceptStation": "签收人是:已签收[深圳市]",54 "Remark": null55 }56 ]57 }6、单号识别接口Demo工具.JAVA版DEMO 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;** 快递鸟单号识别接口** @技术QQ群: xxxxx* @copyright: 深圳市快金数据技术服务有限公司*** ID和Key请到官网申请:/ServiceApply.aspx*/public class KdApiOrderDistinguish {//DEMOpublic static void main(String[] args) {KdApiOrderDistinguish api = new KdApiOrderDistinguish();try {String result = api.getOrderTracesByJson("3967950525457");System.out.print(result);} catch (Exception e) {e.printStackTrace();}}//电商IDprivate String EBusinessID="请到快递鸟官网申请/ServiceApply.aspx";//电商加密私钥,快递鸟提供,注意保管,不要泄漏private String AppKey="请到快递鸟官网申请/ServiceApply.aspx";//请求urlprivate StringReqURL="/Ebusiness/EbusinessOrderHandle.aspx";/*** Json方式单号识别* @throws Exception*/public String getOrderTracesByJson(String expNo) throws Exception{ String requestData= "{'LogisticCode':'" + expNo + "'}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "2002");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 = 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;}/*** 电商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();}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();}5、}开发对接5.1、即时查询(RequestType:1002/8001)5.1.1、请求接口之前需要先实名认证,开通相关会员服务,否则会请求失败并返回提示“未申请开通接口”;5.1.2、接口开发可以下载“快递鸟接口技术文档”进行参考;即时查询,参考技术文档中的4.1或5.1.1部分;5.1.3、接口开发可以下载“即时查询demo”进行参考(仅提供了.NET、Java、PHP三种语言demo);5.1.4、查看快递公司对应快递鸟的编码可以下载“2018快递鸟接口支持快递公司编码列表.xlsx”。
快递查询API接口(51tracking)
快递查询API接⼝(51tracking)快递查询接⼝⽬前提供快递查询的接⼝平台有:快递100快递⽹不同接⼝的区别:(1)51tracking⽀持380家快递公司,其中有55家为国内的快递,其余325家为国际快递。
具体的价格为0.8分钱/单号左右,新注册⽤户可以免费测试12⼩时。
(2)快递100属于在国内做得⽐较早的平台,可以申请每天最多2000次的API调⽤,但需要给快递100做⼀个友链。
超过2000次收费,每次0.06~0.1元不等。
(3)快递⽹可以申请每天最多500次的API调⽤,但同样需要做⼀个友链。
超过部分,每次0.05元。
快递API的应⽤场景与⽤途1. 最常见的应⽤场景如下:(1)电商⽹站:例如B2C、团购、B2B、批发分销站、C2C、本地⽣活交易等⽹站。
(2)管理系统:订单处理平台、订货平台、发货平台、分销系统、渠道管理系统、客户管理系统、ERP等。
2. 快递API的⽤途如下:(1)让顾客登录⽹站后,直接在“我的订单”页⾯内就能看到订单的物流状态。
(2)⾃动筛选出“已签收”、“疑难件”等状态的单号,减轻物流跟单⼈员的压⼒。
(3)改变订单的状态和交易流程,例如单号变为“已签收”,就能让订单变为可以确认退换货等。
(4)评估选择快递公司,根据“已签收”的运单数,可以算出销售⼈员的业绩,且便于应对货到付款的结算。
(5)邮件、短信提醒⽤户运单的最新状态,可以安抚⽤户,也可以利⽤邮件短信⼆次营销。
对接⽰例这⾥以51tracking为例,不同的接⼝的对接⽅式⽐较类似,都需要注册,并⽣成⾃⼰的API key。
以下以51tracking的查询API为例。
接⼝⽀持的消息接收⽅式为HTTP POST 请求⽅法的编码格式为 utf-8 请求body部分的参数的数据格式为json 格式接⼝参数接⼝请求地址请求头部信息参数参数名称类型说明是否必须Content-Type: application/json定义请求头部的数据格式是Trackingmore-Api-Key: string后台获取的API是请求body参数说明参数说明类型说明是否必须tracking_number string查询快递的快递单号是carrier_code string51tracking定义的快递商简码,⽐如china ems 就是china-ema是carrier_code 参数是51tracking ⾃⼰定义的快递商家的简码。
跨越速运 java 调用api 查询路由基础信息的方法
跨越速运java 调用api 查询路由基础信息的方法1.引言1.1 概述概述部分提供了对本文主题的一个简要介绍。
在本文中,我们将探讨跨越速运(Cross-border Express)如何使用Java调用API来查询路由基础信息的方法。
我们将详细讨论Java调用API的基本原理,并展望未来这种方法的发展前景。
跨越速运是一家国际物流公司,专注于为跨境电商和国际贸易提供快速可靠的物流服务。
对于这样的物流公司来说,准确的路由信息是非常重要的。
了解货物在途中所经过的地点、时间和运输方式将有助于提供及时而可靠的服务。
Java作为一种广泛使用的计算机编程语言,以其跨平台性和强大的性能优势而受到广大开发者的喜爱。
借助Java的强大功能,我们可以轻松地调用API来获取所需的信息。
本文将重点介绍如何使用Java调用跨越速运的API来获取货物的路由基础信息。
在展示具体的实现方法之前,我们需要了解Java调用API的基本原理。
通过对API的分析和理解,我们可以更好地利用API提供的功能。
本文将介绍API的基本概念、工作原理以及如何在Java中使用API进行开发。
总结起来,本文旨在介绍跨越速运Java调用API查询路由基础信息的方法。
我们将详细讨论Java调用API的基本原理,并展望未来这种方法的发展前景。
通过阅读本文,读者将能够了解如何使用Java调用API来查询跨越速运的路由基础信息,并在实际应用中进行相应的开发和实现。
1.2文章结构1.2 文章结构本文将以跨越速运的Java调用API查询路由基础信息的方法为主题,分为引言、正文和结论三个部分展开讨论。
在引言中,我们将进行概述,介绍本文的主要内容和目的,以引起读者的兴趣。
同时,我们还会简要介绍跨越速运以及Java调用API的基本原理,为后文的内容铺垫。
接下来的正文部分将分为两个小节。
首先,我们将对跨越速运进行简要介绍,包括其背景、发展情况以及相关的基础知识。
然后,我们将深入探讨Java调用API的基本原理,包括API的定义、调用方式以及常用的API开发工具和技术。
eoLinker-API_Shop_快递物流查询_API接口_Python调用示例代码
eoLinker-API Shop 快递物流查询 Python调用示例代码快递物流查询自动识别快递公司,提供包括申通、顺丰、圆通、韵达、中通、汇通、EMS、天天、国通、德邦、宅急送等几百家快递物流公司单号查询接口。
该产品拥有以下APIs:1.获取快递公司2.查询快递信息注意,该示例代码仅适用于网站下API使用该产品前,您需要通过https:///#/api/detail/?productID=103申请API服务1.获取快递公司#!/usr/bin/env python# -*- coding: utf-8 -*-# 测试环境: python2.7# 安装requests依赖 => pip install requests/ easy_install requests# 导入requests依赖import requestsimport jsonimport sysreload(sys)sys.setdefaultencoding('utf-8')def apishop_send_request(method, url, params=None, headers=None):'''转发请求到目的主机@param method str 请求方法@param url str 请求地址@param params dict 请求参数@param headers dict 请求头'''method = str.upper(method)if method == 'POST':return requests.post(url=url, data=params, headers=headers)elif method == 'GET':return requests.get(url=url, params=params, headers=headers)else:return Nonemethod = "POST"url = "https:///common/express/getExpressCompany" headers = Noneparams = {"apiKey":"your_api_key", #需要从获取}result = apishop_send_request(method=method, url=url, params=params, he aders=headers)if result:body = result.textresponse = json.loads(body)status_code = response["statusCode"]if (status_code == '000000'):# 状态码为000000, 说明请求成功print('请求成功:%s' % (body,))else:# 状态码非000000, 说明请求失败print('请求失败: %s' % (body,))else:# 返回内容异常,发送请求失败print('发送请求失败')2.查询快递信息#!/usr/bin/env python# -*- coding: utf-8 -*-# 测试环境: python2.7# 安装requests依赖 => pip install requests/ easy_install requests# 导入requests依赖import requestsimport jsonimport sysreload(sys)sys.setdefaultencoding('utf-8')def apishop_send_request(method, url, params=None, headers=None):'''转发请求到目的主机@param method str 请求方法@param url str 请求地址@param params dict 请求参数@param headers dict 请求头'''method = str.upper(method)if method == 'POST':return requests.post(url=url, data=params, headers=headers)elif method == 'GET':return requests.get(url=url, params=params, headers=headers)else:return Nonemethod = "POST"url = "https:///common/express/getExpressInfo"headers = Noneparams = {"apiKey":"your_api_key", #需要从获取"expressNumber":"" #快递单号"expressType":"" #快递公司,不填默认自动识别}result = apishop_send_request(method=method, url=url, params=params, he aders=headers)if result:body = result.textresponse = json.loads(body)status_code = response["statusCode"]if (status_code == '000000'):# 状态码为000000, 说明请求成功print('请求成功:%s' % (body,))else:# 状态码非000000, 说明请求失败print('请求失败: %s' % (body,))else:# 返回内容异常,发送请求失败print('发送请求失败')。
Asp.NetCore调用第三方OpenAPI查询物流数据的示例
Core调⽤第三⽅OpenAPI查询物流数据的⽰例⽬录 ⼀构造HttpClient对象 ⼆获取参数Token 三获取发运单数据 在我们的业务中不可避免要与第三⽅的系统进⾏交互,调⽤他们提供的API来获取相应的数据,那么对于这样的情况该怎样进⾏处理呢?下⾯就结合⾃⼰对接跨越速运接⼝来获取⼀个发运单完整的物流信息为例来说明如何在 Core中通过代码实现。
当然在他们的官⽅⽹站上⾯会给出具体的API调⽤⽅式以及参数格式,作为调⽤⽅只需要根据相应规则来进⾏编码即可,下⾯以我们查询某⼀个具体的发运单的物流信息为例来进⾏说明。
下⾯以⼀个查询路由详细信息为例来进⾏说明。
当前接⼝主要包括:1 概述。
2 系统参数。
3 业务参数。
4 业务参数。
5返回结果。
6 响应数据格式。
7 调⽤⽰例(Java语⾔)。
这⾥主要是来说明如何使⽤C#语⾔来进⾏调⽤,其它语⾔的思路其实也是⼀样的。
⼀构造HttpClient对象 这⾥建议使⽤IHttpClientFactory这个接⼝来创建httpClient⽽不是直接new⼀个对象,⾄于具体原因⽹上有很多原因,具体理由也是IHttpClientFactory创建的HttpClient对象能够在使⽤完得到更好的释放资源的效果。
在 Core中直接在构造函数中注⼊IHttpClientFactory接⼝,然后采⽤CreateClient⽅法来创建对象。
public LogisticsService(IHttpClientFactory httpClientFactory) {_httpClient = httpClientFactory.CreateClient(PartsConsts.DcsPartClientName);} 这个CreateClient⽅法中需要传⼀个标识你现在使⽤的HttpClient的名称。
⼆获取参数Token 按照他们的API规范中说的,在Headers中需要进⾏Token传递的,这个称之为请求票据,没有这个是⽆法进⾏验证的,⾸先我们需要定义⼀个⽤于请求Token的数据结构,同时还需要根据他们的规范来定义⼀个接收Token的数据结构。
postman调用快递100事例
postman调用快递100事例
Postman是一款常用的API测试工具,能够帮助开发人员快速测试和调试接口。
在物流行业中,快递100是一家提供全球物流信息查询的服务商,为用户提供便捷的快
递查询服务。
本文将介绍如何使用Postman调用快递100的API进行快递信息查询。
首先,我们需要在Postman中创建一个新的请求。
在请求中填入快递100的API
接口地址,并选择GET方法。
在Headers中添加必要的参数,如Authorization等。
接着,在Body中填入需要查询的快递单号等信息。
点击Send按钮发送请求,即可获
取到返回的快递信息。
随着电子商务的快速发展,物流行业也日益重要。
通过Postman调用快递100的API,开发人员可以快速集成物流信息查询功能到自己的应用中,提升用户体验。
同时,快递100的服务覆盖全球多家物流公司,为用户提供了更广泛的物流信息查询选择。
在使用Postman调用快递100的API时,开发人员需要注意接口的安全性和稳定性,确保数据传输的安全性和准确性。
同时,合理设置请求参数和处理返回结果,可
以提高接口调用的效率和准确性。
通过不断优化和调试,开发人员可以更好地利用Postman和快递100的API,实现更多定制化的物流信息查询功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调用外部API接口实现快递物流单号查询
前两天需要做一个快递查询的需求,由于也是第一次做,完全不懂,但是还是明白这必定是需要调用外部接口来实现,并且应该不是调用快递公司所给的接口,于是便上网查询了能够提供快递查询接口的公司.提供查询接口的公司我查询到的有很多家:1).快递鸟,2).菜鸟,3).物流公司自己快递接口,通过分别阅读了几家公司的api文档,快递鸟除快递查询之外,还提供了其他的服务接口,也更加完善,且他们能查询的物流公司数量也有所不同.如果想在将来对自己产品的快递查询业务进行功能完善,个人推荐选择快递鸟和快递,本人公司选择的是快递鸟所以就以快递鸟作为案例进行解说吧.
注册快递鸟账号
注册这里就不演示了,注册完成后登入,进入到个人中心,这里需要进行一个实名认证,按公司产品的类型进行一个选择,展示页面如图1,认证完成后在我的产品服务中选择自己所需要的服务,当然对于初创型公司来说选择免费版就够了,等到业务做大时再选择其他产品服务.还有就是在个人中心中如图2所示,我们需要记住的是用户ID,和API key(不要泄露),这将是我们进行接口调用时需要用到的,
调用接口文档
说完了上面的,接下来我们就开始调用API进行开发吧,打开首页中API文档,选择即时查询,我们可以看到它对改接口的介绍,我们来看看对于参数的说明,图3是在发送请求时所需的参数
图四是进行接口请求时需要用的参数,这里需要说明下,每个所提供接口的公司他们对物流公司的编码都不同,可以下载他们提供的编码文档进行查询,避免出现错误,当然快递鸟也有提供根据物流单号查询智能查询快递公司以及编码,下面我会一起详细介绍
图5是请求成功后返回的数据
我们可以下载他们写好的分别是即时查询接口demo和单号识别接口demo进行更改,这里就不打开demo了,我直接讲解我修改后的,并且也不讲解前端代码,大家只要根据文档来进行数据传输就可以了.后端代码这里建议大家将以下数据抽取出来单独建一个类,方便以后信息修改:
公共信息
controller层
由于即时查询接口demo和单号识别接口demo它们中的部分方法有所重复,故对它们重复的方法进行抽取,作为公共的方法:
公共方法类
这里测试返回的数据大家可以参考API所提供的数据,形式就跟我们在支付宝上查询的物流信息一样,美化的话就需要靠前端了,这里就不给大家展示了。