单号自动识别接口文档-快递鸟

合集下载

快递单号查询自动识别接口API技术文档

快递单号查询自动识别接口API技术文档

快递单号查询自动识别接口API
快递鸟
版本
1功能说明
通过运单单号自动识别所属的快递公司。

同一个单号可能属于一家或者多家公司,快递鸟提供的服务为智能识别可能的快递公司,识别结果还需用户审核。

接口说明如下:
该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。

接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。

接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序,排名靠前的命中率更高。

若识别失败,快递鸟返回的匹配结果为空。

2接口规则
(1)、接口只支持Json格式参数,接口指令2002。

只支持POST请求方式,utf-8编码。

(2)、支持增值服务,保价、代收货款、货款直退、货款垫付等。

(3)、测试地址:
:8081/Ebusiness/EbusinessOrderHandle.aspx
(4)、正式地址:/Ebusiness/EbusinessOrderHandle.aspx
3系统级输入参数
4应用级输入参数
5返回结果参数。

快递鸟API电子面单接口说明文档

快递鸟API电子面单接口说明文档

快递鸟电子面单接口说明文档快递鸟2017-04-25版本一、前言1、业务背景随着电子商务和物流信息化服务的迅猛发展,电子面单已经成为了商家快速发货并连接订单与物流的有力工具。

快递鸟电子面单接口是快递鸟提供给独立电商、仓储管理系统、打单软件、物流供应链等物流系统平台使用的物流下单接口,满足商家在线发货需求并提供打印电子面单的服务。

商家通过贵司系统选择物流公司发送请求通知快递公司有快递要发货,贵公司把数据通过此接口转发到快递鸟,由快递鸟为商家通知对应的快递公司快递员上门取件。

电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用贵司推送接收接口将物流信息反向推送至商家。

同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给商家用户。

电子面单具有如下特点:●打印效率高相比传统针式打印机套打模式,打印速度提升6-8倍,热敏打印机打印速度平均30-40张/分。

●发货效率高包裹出库时减少了抽底单的工序,降低了操作成本、提升操作效率,运单和订单即时绑定,无需人工再次扫描绑定发货。

目前商家在使用电子面单的过程中也存在一些情况导致部分用户无法顺畅使用,例如:●大电商有多家合作快递公司,各家快递公司的模板尺寸不一,需要使用多个打印机打印面单。

●单号作废后回收机制不完善导致电商成本升高。

●二联电子面单无底单,运费核账存在问题(部分商家货物重量以称重为准)。

●打印时发现面单号余额不足,耽误发货。

●小B电商发货量不够申请网点的电子面单服务。

快递鸟电子面单接口为解决客户以上问题,新增如下解决方案:●电子面单余量查询:可通过电子面单余量查询接口查询,并且在快递鸟官网可设置余额不足提醒值(后续会加上余额不足短信/邮件提醒功能)●电子面单取消/回收:可通过电子面单取消接口,回收部分加盟快递公司的面单号。

●通用电子面单模板,含二联、三联模板●快递公司电子面单客户号在线申请●散户模式电子面单:部分快递公司无需申请电子面单客户号即可直接打印电子面单。

php快递鸟单号查询api接口免费对接调用

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查询快递接口

快递鸟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次/秒。

免费快递查询接口文档

免费快递查询接口文档

免费快递查询接口文档-快递鸟API1.报文及报文编码接口提供:快递鸟报文格式:Json 格式请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"交互协议上统一用UTF-8,避免传递中文数据出现乱码。

2.应用场景(1)电商网站用户打开“我的订单”时调用此API显示物流信息详情。

(2)电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题。

(3)每日调用次数限制不超过3000次,如超过该限制,可对接物流跟踪API。

(4)全流程的物流状态跟踪I3.关于签名采用IP 认证加签名的方式对接,具体方案如下:1)防止数据被篡改在POST 请求中会传递 5 个必须(R)参数RequestData==数据内容(URL 编码:UTF-8)EBusinessID==用户IDRequestType=请求指令类型DataSign== 数据内容签名:把(请求内容(未编码)+ApiKey)进行MD5 加密,然后Base64编码,最后进行URL(utf-8)编码DataType==返回数据类型(2-json)注:DataSign 生成后,对方接收到数据后,以同样的算法进行签名,生成摘要,对比两者的摘要是否相同,如果不同,说明传递过程中发生数据篡改。

2)调用接口的身份认证注册成为接口用户后,会生成对应的用户ID 和APIKey,用户ID 相当于用户名,APIKey 相当于密码。

4.接入步骤1)接口网注册账号成为用户;提供的用户ID 是调用接口服务的身份证明,不可更改、不可转用,API Key 是应用访问API 的签名附加密钥,必须妥善保存。

两者关系类似于用户名和密码,两者都会在签名和业务参数中使用。

2)登陆用户后台,登陆用户后台,进行实名认证,并开通会员服务;3)根据技术文档进行开发并在调试平台测试联调;根据技术文档进行开发并在调试平台测试联调;API 接口的DEMO(包括:.Net 版本、Java 版本、PHP 版本)供开发参考。

接口技术文档doc

接口技术文档doc

快递鸟接口(API)技术文档版本日期版本说明作者2014-12-01 3.0 重新整理,根据功能分类,部分有调整杨文胜2014-01-11 3.1 对接口的说明进行了注释,提高可读性杨汉汶2014-01-13 3.2 新增推送接口杨汉汶2015-03-11 3.3 新增批量订阅推送接口,删除3.2版本推送接口杨文胜2015-10-12 3.4 新增订单分发接口,整理电子面单接口曹强2016-01-19 3.5 重新调整在线下单接口曹强2016-03-01 3.6 增加智选物流接口曹强2016-03-01 3.7 分发及订阅接口更新任海洋2016-04-07 3.7.1 推送接口更新任海洋2016-05-11 3.7.2 电子面单新增通知快递员上门字段,推送接口新增货款状态推送詹益伟2016-07-01 4.0 全新4.0接口,新增单号识别接口、智选物流接口、更新物流轨迹接口(订阅查询)詹益伟2016-9-26 4.0.1 推送接口新增DataSign字段、订阅2.0新增仓库标识ID、智选物流接口新增字段胡蕾蕾2016-11-03 4.1 新增在途监控(增值服务)曹强2016-12-13 4.1.1 电子面单新增第三方订单号ThrOrderCode胡蕾蕾2017-1-10 4.2 新增隐私快递胡蕾蕾2017-2-16 4.2.1 新增代收货款业务胡蕾蕾2017-4-13 4.3 1、即时查询接口中轨迹状态新增0-无轨迹2、普通回调接口中删除201状态3、修改智选物流接口文档4、电子面单接口添加特殊字符提示陈爱2017-4-25 4.4 1、新增申请电子面单客户号接口2、新增电子面单余额查询接口3、新增电子面单单号回收接口4、新增申请客户号信息推送接口陈爱2017-6-22 4.5 新增短信接口李旭安2017-7-14 4.6 电子面单接口新增支持邮政快递包裹吴明名词定义必须要求说明R 必填(Required)。

快递鸟电子面单API接口使用指南

快递鸟电子面单API接口使用指南

快递鸟电子面单使用手册V1.0目录1 服务介绍 (1)2 服务价值 (2)3 准备工作 (2)3.1申请电子面单客户号及单号 (2)3.1.1月结模式申请客户号 (3)3.1.1快递鸟模式直接打印 (9)3.2购买或充值单号 (9)3.3准备热敏打印纸及打印机 (9)4 对接流程 (10)4.1 自营商家对接流程 (10)4.2 系统商,电商平台商家对接流程 (15)5 常见问题 (15)1服务介绍快递鸟电子面单API服务,是指由快递公司通过快递鸟电子面单API,向打单用户提供物流单号,实现种通过热敏纸打印输出纸质物流面单并发货的服务。

现该服务已支持21家快递公司,57个官方承认模板(含隐私快递),有效提高打印速度4-6倍,一次开发即可接入所有支持快递公司。

目前已支持:顺丰(SF)、EMS(EMS)、宅急送(ZJS)、圆通(YTO)、百世快递(HTKY)、中通(ZTO)、韵达(YD)、申通(STO)、德邦(DBL)、优速(UC)、京东(JD)、信丰(XFEX)、全峰(QFKD)、跨越速运(KYSY)、安能小包(ANE)、快捷快递(FAST)、国通(GTO)、天天快递(HHTT)、邮政快递包裹(YZPY)、中铁快运(ZTKY),后续更多的快递公司正在对接中。

EMS电子面单模板展示2服务价值打印速度提升:电子面单是普通纸质面单的4-6倍,平均每单打印只需花费1-2秒钟,高效率的打单大大缓解电商等客户的大批量打单压力,轻松应对大促。

提高发货效率:传统发货模式,操作员需要将已打出的快递单和订单信息匹配后再发货,电子面单不需要把快递单和定单信息逐一匹配操作,在定单信息申请快递单号的时候就已完成了定单匹配;卖家无需再安排人员专门抽取“发货联”,操作效率进一步提升。

3准备工作针对自营商家,以下工作可在对接过程中准备,以便对接完成后即可上线立即使用。

平台及系统商可参考如下流程指导平台用户自行准备。

3.1申请电子面单客户号及单号电子面单客户号即请求打印面单时的用户账号或月结编码或客户编码,不同物流服务商的叫法不同而已。

快递鸟物流接口技术文档

快递鸟物流接口技术文档

快递鸟接口(API)技术文档版本名词定义1 前言.............................................. 错误!未定义书签。

2 概述.............................................. 错误!未定义书签。

用户使用流程图............................. 错误!未定义书签。

接口规范及说明............................. 错误!未定义书签。

报文及报文编码............................. 错误!未定义书签。

接入步骤................................... 错误!未定义书签。

接口数据包结构............................. 错误!未定义书签。

JSON 范例.................................. 错误!未定义书签。

流程示意图................................. 错误!未定义书签。

网关地址................................... 错误!未定义书签。

签名说明................................... 错误!未定义书签。

关于签名................................... 错误!未定义书签。

(C#)DataSign签名加密代码.................. 错误!未定义书签。

3 下单.............................................. 错误!未定义书签。

预约取件接口............................... 错误!未定义书签。

接口规则................................... 错误!未定义书签。

快递鸟物流接口技术文档

快递鸟物流接口技术文档

快递鸟接口(API)技术文档版本名词定义1前言快递鸟API旨在为电商、电商平台、物流工具、仓储系统等等系统提供专业、稳定、优质的物流服务,为不同的用户量身定做了专业的API接口服务,供不同的用户各取所需。

本文档就各个API接口进行详细的说明,方便快递鸟的用户快速对接,方便快捷使用快递鸟服务。

2概述2.1用户使用流程图快递鸟API全流程服务(电商)流程图基于电商现有的服务流程,快递鸟为电商、电商平台、ERP系统、仓储系统等系统在用户下单、选择物流、下单、打单、轨迹跟踪等关键节点,均提供了专业、高效的API接口,方便各个平台实现一次接入,便可使用国内外主流物理公司的服务。

快递鸟API全流程服务(工具)流程图对于物流工具,基于用户的操作习惯,只需要输入单号,快递鸟即可完成后续的物流公司识别、查询轨迹等工作,为工具类用户提供一站式的服务。

2.2接口规范及说明2.2.1报文及报文编码Json格式。

编码格式:UTF-8交互协议上统一用UTF-8,避免传递中文数据出现乱码。

2.2.2接入步骤注册成为快递鸟用户(注:注册成功后进行实名认证,申请开通接口,后续会再对用户的注册信息进行审批)。

注册成功后,登录用户管理后台就可以查看到用户所属唯一的商户ID和APIkey。

按照快递鸟官网提示进行注册申请,注册成功后登录用户管理后台,您将得到由快递鸟提供的一组商户ID和APIKey。

商户ID是调用接口服务的身份证明,不可更改、不可转用,APIKey是应用访问API的签名附加密钥,必须妥善保存。

两者关系类似于登录帐号和密码,两者都会在签名和业务参数中使用。

注册成功登录用户管理后台可以查看商户ID和APIKey,需实名认证后才能申请开通接口。

(1)开发服务开发自身业务的服务,服务需遵循接口的定义规则。

(2)查看接口调用的DEMO快递鸟物流技术接口提供调用快递鸟物流接口的DEMO(.Net版本,Java 版本,PHP版本),包括网上在线订单下单、物流轨迹查询等物流行业标准化的下单操作流程与数据查询格式。

快递鸟接口调试平台使用指南

快递鸟接口调试平台使用指南

快递鸟接口调试平台使用指南版本目录1、前言 (4)2、使用指南 (4)2.1登陆调试平台 (4)2.2即时查询 (6)2.3订阅推送接口 (7)2.3.1订阅接口 (8)2.3.2推送接口 (9)2.3.3推送地址修改 (14)2.4电子面单 (16)2.5单号识别 (19)3、技术支持...................................................................................... 错误!未定义书签。

1、前言快递鸟API旨在为电商、电商平台、物流工具、仓储系统等系统提供专业、稳定、优质的物流服务,为不同的用户量身定做了专业的API 接口服务,供不同的用户各取所需。

接口申请:快递鸟官网注册账号后,在后台获取私有接口秘钥,对接接口并使用。

为了方便用户接入快递鸟接口,我们提供了调试平台供用户使用。

用户可以通过调试平台进行接口测试与校验,以及推送地址自助配置。

本文档就快递鸟调试平台的使用进行详细讲解。

2、使用指南2.1登陆调试平台1、使用快递鸟账户登陆官网:2、点击左侧菜单栏【调试平台】选项3、进入调试平台。

调试平台目前包含:即时查询、订阅推送、电子面单、单号识别等接口调试功能,下面分接口进行使用详解。

2.2即时查询1、点击左侧【即时查询】菜单栏进入即时查询调试界面。

2、在ShipperCode和LogisticCode中填快递公司编码和快递单号,点击【生成】按钮后会自动在【系统级参数报文】和【应用级参数报文(RequestData)】的文本框中生成请求报文。

用户可将调试平台上生成的报文与自己程序生成的报文进行比较,校验程序生成报文是否正确。

4、点击【调用】按钮,提交请求。

【应用级参数报文】文本框中显示的就是快递鸟返回的轨迹信息。

2.3订阅推送接口点击菜单栏【订阅推送】选项进入订阅推送接口调试界面。

该页面包括【订阅】、【推送】两个tab页。

python快速实现极兔快递物流轨迹单号查询API接口对接快递鸟

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} 这⾥根据我们的实际业务需求来选择免费套餐或者收费套餐。

快递鸟智选物流接口对接方案

快递鸟智选物流接口对接方案

快递鸟智选物流接口对接方案1智选物流1.1对接流程1)注册快递鸟接口账号/reg2)在官网登录进入用户管理后台,进行实名认证,开通接口3)技术对接(在线开发文档:/api-subscribe)4、上线1.2JSON请求返回案例1)JSON请求{"MemberID": "123456","WarehouseID": "1","Detail": [{"OrderCode": "12345","OriginalExpCode":"SF","EstimatedShipTime":"2017-02-16 12:13:12""IsCOD": 0,"Sender": {"ProvinceName": "广东省","CityName": "广州","ExpAreaName": "龙岗区","Subdistrict": "布吉街道","Address": "518000"},"Receiver": {"ProvinceName": "广东","CityName": "梅州","ExpAreaName": "丰顺","Subdistrict": "布吉街道","Address": "518000"},"Goods": [{"ProductName": "包","Volume": "","Weight": "1"}]},{"OrderCode": "12346","IsCOD": 0,"Sender": {"ProvinceName": "广东省","CityName": "广州","ExpAreaName": "龙岗区","Subdistrict": "布吉街道","Address": "518000"},"Receiver": {"ProvinceName": "湖南","CityName": "长沙","ExpAreaName": "龙岗区","Subdistrict": "布吉街道","Address": "518000"},"Goods": [{"ProductName": "包","Volume": "","Weight": "1"}]}]}2)JSON返回{"EBusinessID": "1257227", "Success": true, "RecommendDetail": [{"ExpressList": [{"ExpCode": "ZTO","ExpName": "中通速递","LineName": "","Fee": 10.00,"EstimatedDeliveryTime": 44.20,"SpecificDeliveryTime ":"2017-02-12 09:12","IsSupport": "1","RecommendReason": 0,"Remark": ""},{"ExpCode": "ZTO","ExpName": "中通速递","LineName": "","Fee": 10.00,"EstimatedDeliveryTime": 44.20,"IsSupport": "1","RecommendReason": 1,"Remark": ""},{"ExpCode": "JYM","ExpName": "加运美","SpecificDeliveryTime ":"2017-02-12 09:12","LineName": "","EstimatedDeliveryTime": 15.23,"IsSupport": "1","RecommendReason": 2,"Remark": ""}],"OrderCode": "12345"},{"ExpressList": [{"ExpCode": "ZTO","ExpName": "中通速递","SpecificDeliveryTime ":"2017-02-12 09:12","LineName": "","Fee": 16.00,"EstimatedDeliveryTime": 48.26,"IsSupport": "1","RecommendReason": 0,"Remark": ""},{"ExpCode": "ZTO","ExpName": "中通速递","SpecificDeliveryTime ":"2017-02-12 09:12","LineName": "","Fee": 16.00,"EstimatedDeliveryTime": 48.26,"IsSupport": "1","RecommendReason": 1,"Remark": ""},{"ExpCode": "SF","ExpName": "顺丰快递","LineName": "","EstimatedDeliveryTime": 38.33,"IsSupport": "1","RecommendReason": 2,"Remark": ""}],"OrderCode": "12346"}]}1.3Demo1).NETusing System;using System.Collections.Generic;using System.IO;using System.Linq;using ;using System.Text;using System.Web;namespace KdGoldAPI{public class KdApiExpRecommend{//电商IDprivate string EBusinessID = "请申请";//电商加密私钥,注意保管,不要泄漏private string AppKey = "请申请";//请求url//测试环境private string ReqURL = ":8081/Ebusiness/EbusinessOrderHandle.aspx";//正式环境//private string ReqURL = "/Ebusiness/EbusinessOrderHandle.aspx";/// <summary>/// Json方式智选物流/// </summary>/// <returns></returns>public string getExpRecommendByJson(){string requestData = "{'MemberID':'123456','WarehouseID':'1','Detail':[{'OrderCode':'12345','IsCOD':0,'Sender':{'Provi nceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'广东','CityName':'梅州','ExpAreaName':'丰顺','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]},{'OrderCode':'12346','IsCOD':0,'Sender':{'ProvinceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'湖南','CityName':'长沙','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]}]}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "2006");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, param);//根据公司业务处理返回的信息......return result;}/// <summary>/// Json方式运费模板导入/// </summary>/// <returns></returns>public string importCostTemplateByJson(){string requestData ="{'MemberID':'123456','Detail':[{'ShipperCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'龙岗','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':''},{'Ship perCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'雨花','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':'{{w-0}-0.4}*{{{1000-w}-0.4}+1}*4.700+ {{w-1000}-0.6}*[(w-1000)/1000]*4.700)','ShippingType':'1','IntervalList':[{'StartWeight': 1.0,'EndWeight': 2.0, 'Fee': 3.0}]}]}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "2004");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, 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);}}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;erAgent = "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 = puteHash(buffer);string ret = "";foreach (byte a in somme){if (a < 16)ret += "0" + a.ToString("X");elseret += 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){returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}}}2)JAVAimport 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;/****智选物流**/public class KdApiExpRecommend {//DEMOpublic static void main(String[] args) {KdApiExpRecommend api = new KdApiExpRecommend();try {String result = api.getOrderTracesByJson();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 getExpRecommendByJson() throws Exception{String requestData= "{'MemberID':'123456','WarehouseID':'1','Detail':[{'OrderCode':'12345','IsCOD':0,'Sender':{'Provi nceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'广东','CityName':'梅州','ExpAreaName':'丰顺','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]},{'OrderCode':'12346','IsCOD':0,'Sender':{'ProvinceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'湖南','CityName':'长沙','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]}]}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "2006");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;}/*** Json方式导入运费模板* @throws Exception*/public String importCostTemplateByJson() throws Exception{String requestData="{'MemberID':'123456','Detail':[{'ShipperCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'龙岗','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':''},{'Ship perCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'雨花','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':'{{w-0}-0.4}*{{{1000-w}-0.4}+1}*4.700+ {{w-1000}-0.6}*[(w-1000)/1000]*4.700)','ShippingType':'1','IntervalList':[{'StartWeight': 1.0,'EndWeight': 2.0, 'Fee': 3.0}]}]}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "2004");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();}}3)PHP<?php//电商IDdefined('EBusinessID') or define('EBusinessID', '请申请');//电商加密私钥,注意保管,不要泄漏defined('AppKey') or define('AppKey', '请申请');//请求url//测试地址defined('ReqURL') or define('ReqURL', ':8081/Ebusiness/EbusinessOrderHandle.aspx');//正式地址//defined('ReqURL') or define('ReqURL', '/Ebusiness/EbusinessOrderHandle.aspx');//调用获取物流轨迹//-------------------------------------------------------------$logisticResult = getExpRecommendByJson();echo $logisticResult;//-------------------------------------------------------------/*** Json方式智选物流*/function getExpRecommendByJson(){$requestData="{'MemberID':'123456','WarehouseID':'1','Detail':[{'OrderCode':'12345','IsCOD':0,'Sender':{'Provi nceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'广东','CityName':'梅州','ExpAreaName':'丰顺','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]},{'OrderCode':'12346','IsCOD':0,'Sender':{'ProvinceName':'广东省','CityName':'广州','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Receiver':{'ProvinceName':'湖南','CityName':'长沙','ExpAreaName':'龙岗区','Subdistrict':'布吉街道','Address':'518000'},'Goods':[{'ProductName':'包','Volume':'','Weight':'1'}]}]}";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '2006','RequestData' => urlencode($requestData) ,'DataType' => '2',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** Json方式导入运费模板*/function importCostTemplateByJson(){$requestData= "{'MemberID':'123456','Detail':[{'ShipperCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'龙岗','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':''},{'Ship perCode':'YD','SendProvince':'广东','SendCity':'广州','SendExpArea':'天河','ReceiveProvince':'湖南','ReceiveCity':'长沙','ReceiveExpArea':'雨花','FirstWeight':'1','FirstFee':'8','AdditionalWeight':'1','AdditionalFee':'10','WeightFormula':'{{w-0}-0.4}*{{{1000-w}-0.4}+1}*4.700+ {{w-1000}-0.6}*[(w-1000)/1000]*4.700)','ShippingType':'1','IntervalList':[{'StartWeight': 1.0,'EndWeight': 2.0, 'Fee': 3.0}]}]}";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '2004','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)));}?>2运费模板导入接口2.1功能说明ERP服务商也可以将用户的协议物流公司及其协议价格先保存到接口运费模板系统中,智选物流每次计算时:若接口传递了协议公司和价格,那么默认按照接口提供的数据进行计算;若接口没有提供数据,则获取以保存的运费模板进行计算。

快递鸟API电子面单接口说明文档

快递鸟API电子面单接口说明文档

快递鸟电子面单接口说明文档快递鸟2017-04-25版本一、前言1、业务背景随着电子商务和物流信息化服务的迅猛发展,电子面单已经成为了商家快速发货并连接订单与物流的有力工具。

快递鸟电子面单接口是快递鸟提供给独立电商、仓储管理系统、打单软件、物流供应链等物流系统平台使用的物流下单接口,满足商家在线发货需求并提供打印电子面单的服务。

商家通过贵司系统选择物流公司发送请求通知快递公司有快递要发货,贵公司把数据通过此接口转发到快递鸟,由快递鸟为商家通知对应的快递公司快递员上门取件。

电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用贵司推送接收接口将物流信息反向推送至商家。

同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给商家用户。

电子面单具有如下特点:●打印效率高相比传统针式打印机套打模式,打印速度提升6-8倍,热敏打印机打印速度平均30-40张/分。

●发货效率高包裹出库时减少了抽底单的工序,降低了操作成本、提升操作效率,运单和订单即时绑定,无需人工再次扫描绑定发货。

目前商家在使用电子面单的过程中也存在一些情况导致部分用户无法顺畅使用,例如:●大电商有多家合作快递公司,各家快递公司的模板尺寸不一,需要使用多个打印机打印面单。

●单号作废后回收机制不完善导致电商成本升高。

●二联电子面单无底单,运费核账存在问题(部分商家货物重量以称重为准)。

●打印时发现面单号余额不足,耽误发货。

●小B电商发货量不够申请网点的电子面单服务。

快递鸟电子面单接口为解决客户以上问题,新增如下解决方案:●电子面单余量查询:可通过电子面单余量查询接口查询,并且在快递鸟官网可设置余额不足提醒值(后续会加上余额不足短信/邮件提醒功能)●电子面单取消/回收:可通过电子面单取消接口,回收部分加盟快递公司的面单号。

●通用电子面单模板,含二联、三联模板●快递公司电子面单客户号在线申请●散户模式电子面单:部分快递公司无需申请电子面单客户号即可直接打印电子面单。

快递鸟物流查询接口demo

快递鸟物流查询接口demo
StringBuffersb= newStringBuffer();
intlen=data.length;
inti= 0;
intb1, b2, b3;
while (i<len) {
b1 = data[i++] & 0xff;
if (i==len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
}
}
catch(IOExceptionex){
ex.printStackTrace();
}
}
returnresult.toString();
}
private static char[] base64EncodeChars = new char[] {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
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");
{

快递公司单号查询接口编码说明

快递公司单号查询接口编码说明
欧e捷
ZY_OZF
欧洲疯
ZY_OZGO
欧洲GO
ZY_QMT
全美通
ZY_QQEX
QQ-EX
ZY_RDGJ
润东国际快线
ZY_RT
瑞天快递
ZY_RTSD
瑞天速递
ZY_SCS
SCS国际物流
ZY_SDKD
速达快递
ZY_SFZY
四方转运
ZY_SOHO
SOHO苏豪国际
ZY_SONIC
Sonic-Ex速递
ZY_ST
立陶宛邮政
ILZDSDYZ
列支敦士登邮政
IMEDFYZ
马尔代夫邮政
IMEDWYZ
摩尔多瓦邮政
IMETYZ
马耳他邮政
IMJLGEMS
孟加拉国EMS
IMLGYZ
摩洛哥邮政
IMLQSYZ
毛里求斯邮政
IMLXYEMS
马来西亚EMS
IMLXYYZ
马来西亚邮政
IMQDYZ
马其顿邮政
IMTNKEMS
马提尼克EMS
R
请求内容,JSON或XML格式,须和DataType一致
EBusinessID
String
R
用户ID
RequestType
String
R
请求指令类型:1002
DataSign
String
R
数据内容签名
DataType
String
O
请求、返回数据类型:1-xml,2-json;默认为xml格式
应用级输入参数
国内快递查询接口编码
编码
名称
AJ
安捷快递
ANE
安能物流
AXD

快递鸟物流接口技术文档

快递鸟物流接口技术文档

快递鸟接口(API)技术文档版本名词定义1 前言 (8)2 概述 (9)2.1 用户使用流程图 (9)2.2 接口规及说明 (10)2.2.1报文及报文编码 (10)2.2.2接入步骤 (11)2.2.3接口数据包结构 (11)2.2.4JSON 例 (12)2.2.5流程示意图 (13)2.2.6网关地址 (13)2.3 签名说明 (13)2.3.1关于签名 (13)2.3.2(C#)DataSign签名加密代码 (14)3 下单 (15)3.1 预约取件接口 (15)3.1.1功能说明 (15)3.1.2接口规则 (16)3.1.3系统级和应用级输入参数 (16)3.1.4返回结果参数 (19)3.1.5Json请求示例 (19)3.1.6Json请求返回示例 (20)3.2 电子面单 (21)3.2.1功能说明 (21)3.2.2接口规则 (21)3.2.3系统级和应用级输入参数 (21)3.2.4返回结果参数 (24)3.3 电子面单余量查询接口 (26)3.3.1功能说明 (26)3.3.2接口规则 (26)3.3.3系统级和应用级输入参数 (26)3.3.4返回结果参数 (27)3.3.5JSON请求示例 (27)3.3.6JSON返回示例 (27)3.4 电子面单单号取消 (28)3.4.1功能说明 (28)3.4.2接口规则 (28)3.4.3系统级和应用级输入参数 (28)3.4.4返回结果参数 (28)3.4.5Json请求示例 (29)3.4.6Json请求返回示例 (29)3.5 申请电子面单客户号 (29)3.5.1功能说明 (29)3.5.2接口规则 (29)3.5.3系统级和应用级输入参数 (30)3.5.4返回结果参数 (30)3.5.5Json请求示例 (31)3.5.6Json请求返回示例 (31)3.6 申请客户号信息推送 (32)3.6.1功能说明 (32)3.6.2接口规则 (32)3.6.3系统级和应用级输入参数 (32)3.6.4返回结果参数 (32)3.6.5Json请求示例 (33)3.6.6Json请求返回示例 (33)3.7 增值服务列表 (33)3.8 安全接口 (34)3.8.1功能说明 (34)3.8.2接口规则 (34)3.8.3系统级和应用级输入参数 (34)3.8.4返回结果参数 (36)3.8.5JSON请求示例 (36)3.8.6JSON请求返回示例 (37)4 轨迹查询 (37)4.1 物流轨迹(即时查询) (37)4.1.1功能说明 (37)4.1.2接口规则 (38)4.1.3系统级和应用级输入参数 (38)4.1.4返回结果参数 (38)4.1.5JSON请求示例 (39)4.1.6JSON返回示例 (39)4.2 物流轨迹(订阅查询) (40)4.2.1功能说明 (40)4.2.2接口规则 (41)4.2.3系统级和应用级输入参数 (41)4.2.4返回结果参数 (44)4.2.5JSON请求示例 (44)4.2.6JSON返回示例 (45)5 异步推送(回调)接口 (45)5.1 功能说明 (45)5.2 接口规则 (46)5.3 系统级和应用级输入参数 (46)5.3.1订阅查询结果(RequestType:101) (46)5.3.2订阅查询(增值版)结果(RequestType:102) (47)5.3.3货款状态(RequestType:107) (49)5.4 返回结果参数 (49)5.5 JSON请求示例 (50)5.6 JSON返回示例 (53)6 智能服务 (54)6.1智选物流 (54)6.1.1.功能说明 (54)6.1.2.接口规则 (54)6.1.3.应用级输入参数 (54)6.1.4.返回结果参数 (56)6.1.5.JSON请求示例 (57)6.1.6.JSON返回示例 (59)6.2运费模板导入接口 (61)6.2.1.功能说明 (61)6.2.2.接口规则 (62)6.2.3.系统级输入参数 (62)6.2.4.应用级输入参数 (62)6.2.5.返回结果参数 (63)6.2.6.JSON请求示例 (64)6.2.7.JSON返回示例 (65)6.3单号识别 (65)6.3.1.功能说明 (65)6.3.2.接口规则 (66)6.3.3.系统级和应用级输入参数 (66)6.3.4.返回结果参数 (66)7 在途监控(增值版) (67)7.1 物流轨迹(即时查询增值版) (67)7.1.1功能说明 (67)7.1.2接口规则 (67)7.1.3系统级和应用级输入参数 (67)7.1.4返回结果参数 (67)7.1.5JSON请求示例 (68)7.1.6JSON返回示例 (69)7.2 物流轨迹(订阅查询增值版) (71)7.2.1功能说明 (71)7.2.2接口规则 (71)7.2.3系统级和应用级输入参数 (71)7.2.4返回结果参数 (74)7.2.5JSON请求示例 (74)7.2.6JSON返回示例 (75)8 短信 (76)8.1 短信发送 (76)8.1.1功能说明 (76)8.1.2接口规则 (76)8.1.3返回结果参数 (77)8.1.4JSON请求示例 (77)8.1.5JSON返回示例 (77)8.2 短信模板 (78)8.2.1功能说明 (78)8.2.2接口规则 (78)8.2.3系统级和应用级输入参数 (78)8.2.4返回结果参数 (79)8.2.5JSON请求示例 (79)8.2.6JSON返回示例 (79)8.3 短信黑 (80)8.3.1功能说明 (80)8.3.2接口规则 (80)8.3.3系统级和应用级输入参数 (80)8.3.4返回结果参数 (81)8.3.5JSON请求示例 (81)8.3.6JSON返回示例 (81)9 附录 (86)9.1 快递公司编码 (86)9.2 常见问题解答Q&A (86)9.3 电子面单模板规格 (86)9.4 返回编码列表 (88)10 技术支持 (89)1前言快递鸟API旨在为电商、电商平台、物流工具、仓储系统等等系统提供专业、稳定、优质的物流服务,为不同的用户量身定做了专业的API接口服务,供不同的用户各取所需。

快递鸟接口技术文档说明书

快递鸟接口技术文档说明书

快递鸟接口(API)技术文档1前言 (5)2接口规范说明 (5)2.1接口规范及说明 (5)2.1.1报文及报文编码 (5)2.1.2接口数据包结构 (5)2.1.3JSON示例 (6)2.1.4系统级参数 (6)2.1.5流程示意图 (7)2.2签名说明 (7)2.2.1关于签名 (7)2.2.2(C#)DataSign签名加密代码 (9)3下单类接口 (10)3.1接入步骤 (10)3.2预约取件接口 (11)3.2.1功能说明 (11)3.2.2基本信息 (11)3.2.3接口规则 (12)3.2.4支持情况 (12)3.2.5应用级参数 (12)3.2.6返回参数 (17)3.3预约取件取消接口 (17)3.3.1功能说明 (17)3.3.2基本信息 (17)3.3.3接口规则 (18)3.3.4支持情况 (18)3.3.5应用场景 (18)3.3.6应用级参数 (18)3.3.7返回参数 (19)3.4电子面单接口 (19)3.4.1功能说明 (19)3.4.2基本信息 (19)3.4.3应用场景 (20)3.4.4接口规则 (20)3.4.6应用场景 (21)3.4.7应用级参数 (21)3.4.8返回参数 (30)3.5电子面单取消接口 (35)3.5.1功能说明 (35)3.5.2基本信息 (36)3.5.3接口规则 (36)3.5.4支持情况 (36)3.5.5应用级参数 (36)3.5.6返回参数 (37)3.6电子面单追加子单接口 (37)3.6.1功能说明 (37)3.6.2基本信息 (37)3.6.3应用级参数 (38)3.6.4返回参数 (38)3.7获取电子面单文件接口 (39)3.7.1功能说明 (39)3.7.2基本信息 (39)3.7.3应用级参数 (39)3.7.4返回参数 (40)4轨迹查询类接口 (42)4.1即时查询接口 (42)4.1.1功能说明 (42)4.1.2基本信息 (42)4.1.3接口规则 (42)4.1.4支持情况 (42)4.1.5应用场景 (42)4.1.6应用级参数 (42)4.1.7返回参数 (43)4.2物流跟踪 (45)4.2.1轨迹订阅接口 (45)4.3单号识别接口 (64)4.3.1功能说明 (64)4.3.2基本信息 (64)4.3.3接口规则 (64)4.3.4应用级参数 (64)4.3.5返回参数 (65)5增值类接口 (66)5.1在途监控-国内版 (66)5.1.1即时查询接口(增值版) (66)5.1.2物流跟踪接口(增值版) (72)5.2快递查询接口 (78)5.2.1功能说明 (78)5.2.2基本信息 (78)5.2.3接口规则 (78)5.2.4支持情况 (78)5.2.5应用场景 (78)5.2.6应用级参数 (78)5.2.7返回参数 (79)5.3在途监控-国际版 (84)5.3.1物流跟踪接口(国际版) (84)5.4物流查询地图接口 (86)5.4.1即时查询接口(地图版) (87)5.4.2物流跟踪接口(地图版) (95)5.5短信服务 (100)5.5.1短信模板接口 (101)5.5.2短信发送接口 (103)5.5.3短信黑名单接口 (105)5.6智能地址解析接口 (106)5.6.1功能说明 (106)5.6.2基本信息 (106)5.6.3应用级参数 (106)5.6.4返回参数 (107)6附录 (109)6.1对接相关资料 (109)6.2电子面单模板规格 (109)6.3返回编码列表 (116)7技术支持 (117)1前言快递鸟API旨在为电商、电商平台、物流工具、打单工具、仓储系统、移动APP等系统提供专业、稳定、优质的API接口服务,满足不同用户的物流管理需求。

快递单号查询快递鸟API接口-京东快运

快递单号查询快递鸟API接口-京东快运

快递单号查询快递鸟API接⼝-京东快运调⽤快递鸟提供的快递查询API标准接⼝,快速对接100多家快递公司的物流轨迹查询,本篇⽂章实现<京东快运>的快递单号查询。

⾸先我们准备好需要⽤到的资源,这⾥推荐⼤家去爱奇艺查看视频教程:测试商户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,快递鸟官⽹要求必须传递快递公司编码和物流单号,京东快运的编码是JD如要查看其他快递公司的编码,点击此链接:我们⽤京东快运的真实单号(JDVD00215296905)来完成快递单号查询接⼝的调⽤,请求的完整报⽂(URL编码以后):RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27JD%27%2c%27LogisticCode%27%3a%27JDVD00215296905%27%2c%27CustomerNURL解码的请求报⽂:{'OrderCode':'','ShipperCode':'JD','LogisticCode':'JDVD00215296905','CustomerName':'12333'}&EBusinessID=1264783&RequestType=1002&DataSign=M2QzMmVmMzUwNmNkNDFhODc2MmZmMWY5OWNkODU0NmQ=&DataType=2窗体顶端窗体底端返回参数定义:参数名称类型说明必须要求EBusinessID String⽤户ID ROrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流运单号OSuccess Bool成功与否RReason String失败原因OState String物流状态:2-在途中,3-签收,4-问RState String物流状态:2-在途中,3-签收,4-问R题件TracesAcceptTime StringAcceptStation StringRemark String返回报⽂信息-{ "LogisticCode" : "JDVD00215296905", "ShipperCode" : "JD", "Traces" : [ { "AcceptStation" : "货物已交付京东物流", "AcceptTime" : "2019-10-07 13:47:08" }, { "AcceptStation" : "配送员杨海滨已经揽收完成", "AcceptTime" : "2019-10-07 13:47:08" }, { "AcceptStation" : "受国庆假期影响,您的快递可能会延迟配送,请您耐⼼等待;", "AcceptTime" : "2019-10-07 13:47:12" }, { "AcceptStation" : "货物已到达【成都枢纽中⼼】", "AcceptTime" : "2019-10-07 20:21:41" }, { "AcceptStation" : "货物已完成分拣,离开【成都枢纽中⼼】", "AcceptTime" : "2019-10-07 23:24:14" }, { "AcceptStation" : "货物已完成分拣,离开【南充中转场】", "AcceptTime" : "2019-10-08 08:30:49" }, { "AcceptStation" : "货物已分配,等待配送", "AcceptTime" : "2019-10-08 08:42:27" }, { "AcceptStation" : "配送员开始配送,请您准备收货,配送员,张少虎,⼿机号,188********", "AcceptTime" : "2019-10-08 10:04:23" }, { "AcceptStation" : "货物已由本⼈签收,感谢您选择京东物流!", "AcceptTime" : "2019-10-08 15:46:50" } ], "State" : "3", "EBusinessID" : "1264783", "Success" : true }附上详细的接⼝⽂档给⼤家:提供源码下载:调⽤第三⽅物流接⼝,替换⾃⼰的key就能直接使⽤,主要实现了物流在线轨迹查询,订单订阅,轨迹推送,⽀持上百家家的快递查询接⼝,包括主流的四通⼀达,⽀持上门取件服务,其他接⼝调⽤,修改调⽤指令和参数就能实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单号自动识别接口文档-快递鸟一.接口说明PC端、移动端应用或网站应用集成运单物流信息查询功能时,只需要录入单号即可完成查询,无需用户输入快递公司。

电商网站要在快递鸟查询或者订阅运单时,可通过单号识别先行判断物流公司后,再订阅到快递鸟。

二.对接描述1.该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。

2.接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。

3.接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序,排名靠前的命中率更高。

4.若识别失败,快递鸟返回的匹配结果为空。

5.接口支持的消息接收方式为HTTP POST,请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。

三.参数列表四.对接案例1.JSON请求{"LogisticCode": "3967950525457"}2.JSON返回{"EBusinessID": "1257021","Success": true,"LogisticCode": "3967950525457","Shippers": [{"ShipperCode": "YD","ShipperName": "韵达快递"}]}3.C#对接demousing System;using System.Collections.Generic;using System.IO;using System.Linq;using ;using System.Text;using System.Web;namespace KdGoldAPI{public class KdApiOrderDistinguish{//电商IDprivate string EBusinessID = "请到快递鸟官网申请/ServiceApply.aspx";//电商加密私钥,快递鸟提供,注意保管,不要泄漏private string AppKey = "请到快递鸟官网申请/ServiceApply.aspx";//请求url//测试环境private string ReqURL = ":8081/Ebusiness/EbusinessOrderHandle.aspx";//正式环境//private string ReqURL = "/Ebusiness/EbusinessOrderHandle.aspx";/// <summary>/// Json方式单号识别/// </summary>/// <returns></returns>public string orderTracesSubByJson(){string requestData = "{'LogisticCode': '3967950525457'}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "2002");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, 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);}}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;erAgent = "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 = puteHash(buffer);string ret = "";foreach (byte a in somme){if (a < 16)ret += "0" + a.ToString("X");elseret += 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){returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}}}附:单号查询接口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;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="请到快递鸟官网申请/ServiceApply.aspx";//电商加密私钥,快递鸟提供,注意保管,不要泄漏private String AppKey="请到快递鸟官网申请/ServiceApply.aspx";//请求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<String, String> params = new HashMap<String, String>();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);//根据公司业务处理返回的信息......return result;}/*** XML方式查询订单物流轨迹* @throws Exception*/public String getOrderTracesByXml() throws Exception{String requestData= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+"<Content>"+"<OrderCode></OrderCode>"+"<ShipperCode>SF</ShipperCode>"+"<LogisticCode>589707398027</LogisticCode>"+"</Content>";Map<String, String> params = new HashMap<String, String>();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", "1");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();}}。

相关文档
最新文档