快递查询和电子面单数据服务接口(API)
- 格式:pdf
- 大小:1.47 MB
- 文档页数:19
快递鸟电子面单接口说明文档快递鸟2017-04-25版本一、前言1、业务背景随着电子商务和物流信息化服务的迅猛发展,电子面单已经成为了商家快速发货并连接订单与物流的有力工具。
快递鸟电子面单接口是快递鸟提供给独立电商、仓储管理系统、打单软件、物流供应链等物流系统平台使用的物流下单接口,满足商家在线发货需求并提供打印电子面单的服务。
商家通过贵司系统选择物流公司发送请求通知快递公司有快递要发货,贵公司把数据通过此接口转发到快递鸟,由快递鸟为商家通知对应的快递公司快递员上门取件。
电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用贵司推送接收接口将物流信息反向推送至商家。
同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给商家用户。
电子面单具有如下特点:●打印效率高相比传统针式打印机套打模式,打印速度提升6-8倍,热敏打印机打印速度平均30-40张/分。
●发货效率高包裹出库时减少了抽底单的工序,降低了操作成本、提升操作效率,运单和订单即时绑定,无需人工再次扫描绑定发货。
目前商家在使用电子面单的过程中也存在一些情况导致部分用户无法顺畅使用,例如:●大电商有多家合作快递公司,各家快递公司的模板尺寸不一,需要使用多个打印机打印面单。
●单号作废后回收机制不完善导致电商成本升高。
●二联电子面单无底单,运费核账存在问题(部分商家货物重量以称重为准)。
●打印时发现面单号余额不足,耽误发货。
●小B电商发货量不够申请网点的电子面单服务。
快递鸟电子面单接口为解决客户以上问题,新增如下解决方案:●电子面单余量查询:可通过电子面单余量查询接口查询,并且在快递鸟官网可设置余额不足提醒值(后续会加上余额不足短信/邮件提醒功能)●电子面单取消/回收:可通过电子面单取消接口,回收部分加盟快递公司的面单号。
●通用电子面单模板,含二联、三联模板●快递公司电子面单客户号在线申请●散户模式电子面单:部分快递公司无需申请电子面单客户号即可直接打印电子面单。
常用快递接口,顺丰快递接口api对接调用顺丰快递是常用快递,电商、ERP等企业都需要对接其快递接口api。
对接有两种方式,第一和顺丰快递直接对接,第二,和快递鸟对接,和快递鸟对接可以一次性接入其他常用快递的接口。
快递100有顺丰接口,不过只能查询不能打印电子面单,而且是收费的,菜鸟有电子面单接口,但又不支持顺丰快递。
接口平台:快递鸟免费查询接口接口地址:http://ap /Ebusiness/EbusinessOrd erHandle.aspx支持格式:json请求方式:HTTP POST请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
顺丰快递接口api申请JSON请求/返回示例:1.请求{"OrderCode": "","ShipperCode": "SF","LogisticCode": "118650888018"}2.返回没有物流轨迹的{"EBusinessID": "1109259","Traces": [],"OrderCode": "","ShipperCode": "SF","LogisticCode": "118461988807","Success": false,"Reason": null}有物流轨迹的{"EBusinessID": "1109259","OrderCode": "","ShipperCode": "SF","LogisticCode": "118461988807","Success": true,"State": 3,"Reason": null,"Traces": [{"AcceptTime": "2014/06/25 08:05:37","AcceptStation": "正在派件..(派件人:邓裕富,电话:187****6310)[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 04:01:28","AcceptStation": "快件在深圳集散中心,准备送往下一站深圳[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 01:41:06","AcceptStation": "快件在深圳集散中心[深圳市]","Remark": null},{"AcceptTime": "2014/06/24 20:18:58","AcceptStation": "已收件[深圳市]","Remark": null},{"AcceptTime": "2014/06/24 20:55:28","AcceptStation": "快件在深圳,准备送往下一站深圳集散中心[深圳市]", "Remark": null},{"AcceptTime": "2014/06/25 10:23:03","AcceptStation": "派件已签收[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 10:23:03","AcceptStation": "签收人是:已签收[深圳市]","Remark": null}]}注:接口及签名说明1)、支持http传输协议2)、支持的数据传输格式Json/Xml(暂不支持<content/>这种形式)。
快递单号查询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>。
请求代码示例↓支持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接口对接后可以在自己的网站点击查询就能查到物流轨迹,像京东淘宝查询物流的功能一样,适合一些自己研发的系统商、微信小程序,还有自己的电商网站。
方法/步骤
进入快递鸟网站下载对接相关的接口文档,和接口demo案例,接口demo案例可以直接调用,不用自己编写代码。
如果需要自己编写,可以参照接口文档
另外即时查询API、物流跟踪API和在途监控API都是查询快递的,可以根据不同情况对接使用
在右上角注册账号登录后进行账号认证,就可以对接接口了
在账号登录后首页可以查看接口ID和接口KEY,复制到demo中的“EBusinessID”和“AppKey”两个参数中,demo就可以使用了
对接完成后就是在调试平台调试接口,对比请求报文和返回报文确认对接是不是正确的。
这里需要注意的是,对接的是什么接口,就查看什么接口的调试报文
测试后就可以正式调用了,正式调用的时候在正式地址调用
最后做一个物流轨迹的数据展现就可以了,如下图。
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次/秒。
电子面单API相关API接口的详细说明(白皮书)以及快递公司电子面单模版:http://y /s/17EkwPYdX79 (提取码:1e1gZz)一、前言1. 业务背景随着电子商务平台和物流服务信息化飞速发展,面单号(或称之为运单号)成为物流服务商串联快递单、订单、商家、商品等各种信息的枢纽。
相比之下,传统纸质面单价格高、信息录入效率低、信息安全隐患等方面的劣势已愈发凸显。
近一年来,电子面单的普及已是大势所趋。
究其原因,是因为电子面单具备的独特优势:a. 效率更高n 提升打印效率:电子面单的打印效率是普通纸质面单的4-6倍,平均每单打印只需花费1-2秒钟,高效率的打单大大缓解电商等客户的大批量打单压力,轻松应对大促;n 提高发货效率:电子面单不需要把快递单和定单信息逐一匹配操作,在订单信息申请快递单号的时候就已完成了定单匹配;卖家无需再安排人员专门抽取“发货联”,操作效率进一步提升;减少了手写“大头笔”等动作,提高了分拣效率;提高了分拣的准确性;n 支持多种电商增值业务,无需人肉绑定面单(例如:货到付款,预约配送)。
b. 成本更低n 电子面单的纸张是0.1元/张,成本比传统纸质面单0.2-0.3元降低了一大半;n 降低快递公司作业成本,如取消抽单和手写大头笔,单位时间内的揽货可以提升一倍以上;c. 数据信息完整实效n 在申请电子面单运单号的时候,就匹配到具体的“大头笔”信息,既减少人工操作的成本并又可以提高准确率和效率;商家在使用电子面单的时候就会自动将数据同步给快递公司,可以在申请面单的时候就拿到第一手数据,更加真实并且提高速度。
2. 名词解释3. 特殊说明3.1 云栈平台所用到编码参考规范a. 物流服务商(cp_code) :顺丰(SF)、EMS(标准快递:EMS;经济快件:EYB)、宅急送(ZJS)、圆通(YTO)、中通(ZTO)、百世汇通(HTKY)、优速(UC)、申通(STO)、天天快递 (TTKDEX)、全峰 (QFKD)、快捷(FAST)、邮政小包(POSTB)、国通(GTO)、韵达(YUNDA)b. 订单来源:订单产生的电商平台淘宝(TB)、天猫(TM)、京东(JD)、当当(DD)、拍拍(PP)、易讯(Y X)、ebay(EBAY)、QQ网购(QQ)、亚马逊(AMAZON)、苏宁(SN)、国美(GM)、唯品会(WPH)、聚美(JM)、乐蜂(LF)、蘑菇街(MGJ)、聚尚(JS)、拍鞋(PX)、银泰(YT)、1号店(YHD)、凡客(VANCL)、邮乐(Y L)、优购(YG)、阿里巴巴(1688)、其他(OTHERS)3.2 电子面单接入流程1.申请开通电子面单接口权限包. 技术问题交流群:2508358362.沙箱环境开发接口,测试。
免费物流查询API接口对接案例这是来自快递鸟的一个快递查询的api接口,支持快递单号查询,接口不错,分享给大家。
接口申请地址:/regPHP代码<?php//电商IDdefined('EBusinessID') or define('EBusinessID', 1237100);//电商加密私钥,注意保管,不要泄漏defined('AppKey') or define('AppKey', '518a73d8-1f7f-441a-b644-33e77b49d846');//请求urldefined('ReqURL') or define('ReqURL', '/Ebusiness/EbusinessOrderHandle.aspx');/*** Json方式查询订单物流轨迹*/function getOrderTracesByJson(){$requestData= "{'OrderCode':'','ShipperCode':'SF','LogisticCode':'589707398027'}";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1002','RequestData' => urlencode($requestData) ,'DataType' => '2',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** XML方式查询订单物流轨迹*/function getOrderTracesByXml(){$requestData= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"."<Content>"."<OrderCode></OrderCode>"."<ShipperCode>SF</ShipperCode>"."<LogisticCode>589707398027</LogisticCode>"."</Content>";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1002','RequestData' => urlencode($requestData) ,'DataType' => '1',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** post提交数据* @param string $url 请求Url* @param array $datas 提交的数据* @return url响应返回的html*/function sendPost($url, $datas) {$temps = array();foreach ($datas as $key => $value) {$temps[] = sprintf('%s=%s', $key, $value);}$post_data = implode('&', $temps);$url_info = parse_url($url);if($url_info['port']==''){$url_info['port']=80;}echo $url_info['port'];$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";$httpheader.= "Host:" . $url_info['host'] . "\r\n";$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";$httpheader.= "Connection:close\r\n\r\n";$httpheader.= $post_data;$fd = fsockopen($url_info['host'], $url_info['port']);fwrite($fd, $httpheader);$gets = "";$headerFlag = true;while (!feof($fd)) {if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {break;}}while (!feof($fd)) {$gets.= fread($fd, 128);}fclose($fd);return $gets;}/*** 电商Sign签名生成* @param data 内容* @param appkey Appkey* @return DataSign签名*/function encrypt($data, $appkey) {return urlencode(base64_encode(md5($data.$appkey)));}?>.NET代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using ;using System.IO;namespace KdGoldAPI{public class KdApiSearchDemo{//电商IDprivate string EBusinessID = "1237100";//电商加密私钥,注意保管,不要泄漏private string AppKey = "518a73d8-1f7f-441a-b644-33e77b49d846";//请求urlprivate string ReqURL = "/Ebusiness/EbusinessOrderHandle.aspx";/// <summary>/// Json方式查询订单物流轨迹/// </summary>/// <returns></returns>public string getOrderTracesByJson(){string requestData = "{'OrderCode':'','ShipperCode':'SF','LogisticCode':'589707398027'}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "1002");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, param);//根据公司业务处理返回的信息......return result;}/// <summary>/// XML方式查询订单物流轨迹/// </summary>/// <returns></returns>public string getOrderTracesByXml(){string requestData = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +"<Content>" +"<OrderCode></OrderCode>" +"<ShipperCode>SF</ShipperCode>" +"<LogisticCode>589707398027</LogisticCode>" +"</Content>";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "1002");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "1");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));}}}。
快递鸟电子面单使用手册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接口可实现需求(查询、取件、下单)快递?快递接口?快递查询?快递下单接口?快递预约取件接口?你需要快递什么接口?是找不到?使用的是次数限制,还是收费的呢?是否有技术支持?是否能给予我们全方位服务?生活中,想到快递,无非就是四通一达,顺丰快递等。
四通一达:申通快递、圆通速递、中通快递、百世汇通、韵达快递。
他们之中也各有自己的开发平台或接口平台,开放给我们使用,如果不能满足当下我们的需求,只能选择商务合作等方式。
今天,我们主要看一些专业提供快递数据的平台,当然我说的都是我认为我比较了解的。
快递鸟API数据接口整合600余家国内外快递物流公司接口,为电商平台、电商ERP、仓储系统、清关公司、跨境电商、快递柜等公司提供包括物流轨迹数据查询、物流数据推送、在线发件、电子面单、跨境分段物流统一查询、货款金融服务等功能的综合性快递物流接口服务。
对接流程:网站申请接口KEY并认证-对接接口-调试-上线使用1、登录官网注册页面注册账号2、登录用户管理后台注:登录快递鸟用户管理后台后获得用户ID和APIKey,此用于保证应用来源的可靠性,避免应用伪造,被不法使用。
进入“我的会员中心”进行实名认证注:1、认证类型、应用类型根据用户实际情况选择即可,接口返回数据与选择结果无关;2、标记为*的为必填,要求上传清晰、jpg格式且小于2M的证件图片;3、技术对接人信息为用户方对接工程师的信息;4、如有其他疑问可进入官网加入商务合作群进行咨询。
认证成功后,进入“产品服务管理”,开通相关会员服务字文章供GO 爱好者们玩耍,写的不好大神勿喷!不废话,上代码:首先,导入包然后,定义各种结构体、变量、常量然后,处理请求内容,加密,初始化配置然后,POST请求然后,获取路由信息,并进行处理最后完事,用这个结构体去干点什么吧。
快递查询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 ⾃⼰定义的快递商家的简码。
各种电子面单Api接口免费对接-快宝开放平台
1、什么是电子面单?
快递公司联合向商家提供的一种通过热敏纸打印输出纸质物流面单的物流服务,并且承载分单自动化算法等数据服务,是快递行业赋能的基础产品和服务。
2、电子面单长什么样?
各快递公司有自己的模板,有两联,也有三联模板;以中通电子面单(100mm X 180mm)为例(标准三联模板),样子如下:
3.1 提高收货效率,服务质量高
3.2 规范订单,降低订单错误
3.3 降低人力成本,提高耗材利用效率
4、电子面单免费对接平台?
快宝开放平台,一个免费提供各大快递公司电子面单对接的平台。
5、如何对接快宝开放平台?
5.1 注册快宝开放平台。
5.2 获得快宝开放平台的开发者账号。
5.3 开始对接,联调。
常用快递单号物流查询接口通用API (JAVA 对接)快递查询接口通用API 是给发货电商以实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和APIKEY快递API 的应用场景与用途最常见的应用场景如下:(1)电商网站:例如B2C ,团购,B2B ,批发分销站,C2C ,本地生活交易等网站。
(2)管理系统:订单处理平台,调度平台,发货平台,分销系统,渠道管理系统,客户管理系统,ERP 等。
快递API 的用途如下:(1)让顾客登录网站后,直接在“我的订单”页面上可以看到订单的物流状态。
(2)自动筛选出“已签收”,“疑难件”等状态的单号,减轻物流跟单人员的压力。
(3)更改订单的状态和交易流程,例如单号变为“已签收”,可以让订单转化可以确认退换货等。
(4)评估选择快递公司,根据“已签收”的运单数,可以算出销售人员的业绩,并进行应对的结算。
(5)邮件,短信提醒用户运单的最新状态,可以安抚用户,也可以利用邮件短信二次营销。
对接要求:(1),查询接口支持遵循运输单号查询(个别查询,并发不超过10个/ S )。
(2),指定的物流运输单号选择相应的快递公司编码,格式不对或则编码错误都会返回失败的信息。
例如EMS 物流单号应选择快递公司编码(EMS )(3),返回的物流跟踪信息遵循发生的时间升序排列。
(4),接口指令1002(5),接口提供:快递鸟 (6),请求地址:http ://java 请求示例: 1个2 3 4 5 6 7 8 9 10 import java.io.BufferedReader;import java.io.IOException; import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .URL;import .URLEncoder;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map;11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 /**** 单日超过500单查询量,建议接入物流轨迹订阅推送接口**/public class KdniaoTrackQueryAPI {//DEMOpublic static void main(String[] args) {KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();try {String result = api.getOrderTracesByJson("ANE", "210001633605");System.out.print(result);} catch (Exception e) {e.printStackTrace();}}//电商IDprivate String EBusinessID="申请";//电商加密私钥,注意保管,不要泄漏private String AppKey="申请";//请求urlprivate String ReqURL="/Ebusiness/EbusinessOrderHandle.aspx";/*** Json 方式 查询订单物流轨迹* @throws Exception*/public String getOrderTracesByJson(String expCode, String expNo) throws Exception{String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";Map params = new HashMap();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "1002");String dataSign=encrypt(requestData, AppKey, "UTF-8");params.put("DataSign", urlEncoder(dataSign, "UTF-8"));params.put("DataType", "2");String result=sendPost(ReqURL, params);//根据公司业务处理返回的信息......5556575859606162636465666768697071727374757677787980818283848586878889909192939495969798return result;}/*** MD5加密* @param str 内容* @param charset 编码方式* @throws Exception*/@SuppressWarnings("unused")private String MD5(String str, String charset) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes(charset));byte[] result = md.digest();StringBuffer sb = new StringBuffer(32);for(int i = 0; i < result.length; i++) {int val = result[i] & 0xff;if(val <= 0xf) {sb.append("0");}sb.append(Integer.toHexString(val));}return sb.toString().toLowerCase();}/*** base64编码* @param str 内容* @param charset 编码方式* @throws UnsupportedEncodingException*/private String base64(String str, String charset) throws UnsupportedEncodingException{ String encoded = base64Encode(str.getBytes(charset));return encoded;}@SuppressWarnings("unused")private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{ String result = URLEncoder.encode(str, charset);return result;}/**99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142* 电商Sign签名生成* @param content 内容* @param keyValue Appkey* @param charset 编码方式* @throws UnsupportedEncodingException ,Exception* @return DataSign签名*/@SuppressWarnings("unused")private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception{if(keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}/*** 向指定 URL 发送POST方法的请求* @param url 发送请求的 URL* @param params 请求的参数集合* @return 远程资源的响应结果*/@SuppressWarnings("unused")private String sendPost(String url, Map params) {OutputStreamWriter out = null;BufferedReader in = null;StringBuilder result = new StringBuilder();try{URL realUrl = new URL(url);HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// POST方法conn.setRequestMethod("POST");// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.connect();143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186// 获取URLConnection对象对应的输出流out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");// 发送请求参数if(params != null) {StringBuilder param = new StringBuilder();for(Map.Entry entry : params.entrySet()) {if(param.length()>0){param.append("&");}param.append(entry.getKey());param.append("=");param.append(entry.getValue());//System.out.println(entry.getKey()+":"+entry.getValue());}//System.out.println("param:"+param.toString());out.write(param.toString());}// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while((line = in.readLine()) != null) {result.append(line);}} catch(Exception e) {e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result.toString();188 189190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 private static char[] base64EncodeChars = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n','o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3','4', '5', '6', '7', '8', '9', '+', '/'};public static String base64Encode(byte[] data) {StringBuffer sb = new StringBuffer();int len = data.length;int i = 0;int b1, b2, b3;while(i < len) {b1 = data[i++] & 0xff;if(i == len){sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[(b1 & 0x3) << 4]);sb.append("==");break;}b2 = data[i++] & 0xff;if(i == len){sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);sb.append("=");break;}b3 = data[i++] & 0xff;sb.append(base64EncodeChars[b1 >>> 2]);sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);sb.append(base64EncodeChars[b3 & 0x3f]);}return sb.toString();}。