快递查询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对接调用demo
(1)开发服务
开发自身业务的服务,服务需按照后面接口的定义规则。
(2)查看接口调用的DEMO
物流技术接口提供调用物流接口的DEMO(.Net版本),包括网上在线订单下单、物流轨迹查询等物流行业标准化的下单操作流程与数据查询格式。提交接入处理的相关代码如有不明白的地方可与物流技术接口人协作开发。
(f)接收方判断签名后的数据跟传递过来的DataSign是否一致,如果一致进行业务操作,如果不一直返回错误。
9
///<summary>
///电商Sign签名
///</summary>
///<param name="content">内容</param>
///<param name="keyValue">Appkey</param>
"LogisticCode": "118461988807",
"Success": true,
"State": 3,
"Reason": null,
"Traces": [
{
"AcceptTime": "2014/06/25 08:05:37",
"AcceptStation": "正在派件..(派件人:邓裕富,电话:18718866310)[深圳市]",
在POST请求中会传递5个参数
4个必须参数:
RequestType=请求指令类型
EBusinessID==电商ID
快递物流寄件下单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>。
调用外部API接口实现快递查询
调用外部API接口实现快递物流单号查询前两天需要做一个快递查询的需求,由于也是第一次做,完全不懂,但是还是明白这必定是需要调用外部接口来实现,并且应该不是调用快递公司所给的接口,于是便上网查询了能够提供快递查询接口的公司.提供查询接口的公司我查询到的有很多家:1).快递鸟,2).菜鸟,3).物流公司自己快递接口,通过分别阅读了几家公司的api文档,快递鸟除快递查询之外,还提供了其他的服务接口,也更加完善,且他们能查询的物流公司数量也有所不同.如果想在将来对自己产品的快递查询业务进行功能完善,个人推荐选择快递鸟和快递,本人公司选择的是快递鸟所以就以快递鸟作为案例进行解说吧.注册快递鸟账号注册这里就不演示了,注册完成后登入,进入到个人中心,这里需要进行一个实名认证,按公司产品的类型进行一个选择,展示页面如图1,认证完成后在我的产品服务中选择自己所需要的服务,当然对于初创型公司来说选择免费版就够了,等到业务做大时再选择其他产品服务.还有就是在个人中心中如图2所示,我们需要记住的是用户ID,和API key(不要泄露),这将是我们进行接口调用时需要用到的,调用接口文档说完了上面的,接下来我们就开始调用API进行开发吧,打开首页中API文档,选择即时查询,我们可以看到它对改接口的介绍,我们来看看对于参数的说明,图3是在发送请求时所需的参数图四是进行接口请求时需要用的参数,这里需要说明下,每个所提供接口的公司他们对物流公司的编码都不同,可以下载他们提供的编码文档进行查询,避免出现错误,当然快递鸟也有提供根据物流单号查询智能查询快递公司以及编码,下面我会一起详细介绍图5是请求成功后返回的数据我们可以下载他们写好的分别是即时查询接口demo和单号识别接口demo进行更改,这里就不打开demo了,我直接讲解我修改后的,并且也不讲解前端代码,大家只要根据文档来进行数据传输就可以了.后端代码这里建议大家将以下数据抽取出来单独建一个类,方便以后信息修改:公共信息controller层由于即时查询接口demo和单号识别接口demo它们中的部分方法有所重复,故对它们重复的方法进行抽取,作为公共的方法:公共方法类这里测试返回的数据大家可以参考API所提供的数据,形式就跟我们在支付宝上查询的物流信息一样,美化的话就需要靠前端了,这里就不给大家展示了。
快递单号查询免费api接口(PHP示例)——快宝开放平台
请求代码示例↓支持6中开发语言对接,包括JAVA,C#,PHP,Python,Node.js,Crul;根据您的开发语言,选择参考对应的代码示例,下面以PHP代码为例:1$host = "https:///api";2$method = "POST";3$headers = array();4//根据API的要求,定义相对应的Content-Type5array_push($headers,"Content-Type".":"."application/x-www-form-urlencoded;charset=UTF-8");6$querys = "";7$bodys = [8 "app_id"=>'50001',9 "method"=>'.get',10 "sign"=>"bdf3b5f50865ac813cbdfd6c9b572b79",11 "ts"=>'1524209949',12 "data"=>'{ "waybill_no":"物流单号多个的以英文逗号分隔","exp_company_code":"品牌简称"}'13 ];14$bodys = http_build_query($bodys);15$url = $host;16$curl = curl_init();17curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);18curl_setopt($curl, CURLOPT_URL, $url);19curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);20curl_setopt($curl, CURLOPT_FAILONERROR, false);21curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);22curl_setopt($curl, CURLOPT_HEADER, true);23if (1 == strpos("$".$host, "https://"))24 {25curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);26curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);27 }28curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);29var_dump(curl_exec($curl));成功响应示例↓响应(成功、失败)示例,仅支持JSON格式。
快递单号查询API接口对接流程
快递单号查询API接口对接后可以在自己的网站点击查询就能查到物流轨迹,像京东淘宝查询物流的功能一样,适合一些自己研发的系统商、微信小程序,还有自己的电商网站。
方法/步骤
进入快递鸟网站下载对接相关的接口文档,和接口demo案例,接口demo案例可以直接调用,不用自己编写代码。
如果需要自己编写,可以参照接口文档
另外即时查询API、物流跟踪API和在途监控API都是查询快递的,可以根据不同情况对接使用
在右上角注册账号登录后进行账号认证,就可以对接接口了
在账号登录后首页可以查看接口ID和接口KEY,复制到demo中的“EBusinessID”和“AppKey”两个参数中,demo就可以使用了
对接完成后就是在调试平台调试接口,对比请求报文和返回报文确认对接是不是正确的。
这里需要注意的是,对接的是什么接口,就查看什么接口的调试报文
测试后就可以正式调用了,正式调用的时候在正式地址调用
最后做一个物流轨迹的数据展现就可以了,如下图。
快递鸟API查询快递接口
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接口对接案例这是来自快递鸟的一个快递查询的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));}}}。
快递查询和电子面单数据服务接口(API)
PART.15 谁在使用我们?
PART.16 关于快金数据
深圳市快金数据技术服务有限公司致力于物流数据的采集和应用服务,提供统一快递接口、快递 订单质押的物流金融服务。
公司团队由电商、金融、物流行业专业人才组建。经过三年经营,其交付问题(交货+付款=交 付)系统性解决方案已经被众多电商ERP系统、仓储系统、电商平台、跨境电商和快递公司使用,有效 的解决了物流信息化问题,帮助电商建立支付、物流、金融三大模块。
提供批量物流轨迹数据管理、在线发件、电 子面单等快递物流接口服务
问题2:缺少物流和金融模块
如何提供妥投报表? 如何提升物流管理用户体验? 阿里有蚂蚁金服提供金融服务 其他中小电商怎么办?
快递鸟帮助ERP为电商建立线下支付、物 流管理、金融三大服务模块
PART.4 我们的解决方案是什么?
目前
商品管 理模块
7 刷卡签收/货款直退给平台或卖家
7 现金收款
寄件人/卖家
1 发货
收件员
10 发放现金
2 录单
寄件网点
9 货款对冲
8 交回现金
派件员
派件网点
5 派货
收件人/买家
6 签收
3 物流
快递中心
4 物流
传统流程:6步,T+7返款,现金 优化后流程:1步,12小时返款,刷卡
PART.6 物流管理产品方案
目前
ERP系统
快金数据
提前返款 加速资金周转 7 刷卡回款
11 现金返款
寄件人/卖家
1 发货
收件员
10 发放现金
2 录单
寄件网点
9 货款对冲
传统流程6步,T+7返款,现金 新方案流程1步,4小时放款,刷卡
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接口方案
BufferedReader in = null;
StringBuilder result = new StringBuilder();
try {
URL realUrl = new URL(url);
HttpURLConnection conn =(HttpURLConnection) ();
* @param url 发送请求的 URL
* @param params 请求的参数集合
* @return 远程资源的响应结果
*/
@SuppressWarnings("unused")
private String sendPost(String url, Map<String, String> params) {
{
if (keyValue != null)
{
return base64(MD5(content + keyValue, charset), charset);
}
return base64(MD5(content, charset), charset);
}
/**
* 向指定 URL 发送POST方法的请求
String encoded = (charset));
return encoded;
}
@SuppressWarnings("unused")
private String urlEncoder(String str, String charset) throwsUnsupportedEncodingException{
* @param url 发送请求的 URL
【整理】快递鸟预约取件接口API对接说明手册
快递鸟预约取件接口API对接说明手册
一、接口描述/说明
(1)在线下单接口(预约取件接口)是提供给独立电商、仓储管理系统、物流供应链等物流系统平台使用的下单接口。
(2)为客户解决在线发货需求,商户通过网络选择快递公司发送请求通知快递公司有快递要发货。
(3)订单编号(OrderCode)不可重复提交,重复提交系统会返回具体错误代码。
(4)接口支持的消息接收方式为HTTP POST,请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
(5)接口地址:API测试地址::8081/api/OOrderService
API正式地址:/OOrderService
(6)接口使用:在快递鸟网站申请接口KEY
请求系统级参数说明:
备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)
二、接口参数
请求内容字段定义
返回参数定义
三、示例。
快递查询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 ⾃⼰定义的快递商家的简码。
查询快递单号-百世快运快递接口
查询快递单号-百世快运快递接⼝百世快运查询如何利⽤快递鸟提供的接⼝来查询百世快运的物流轨迹。
⾸先我们准备好需要⽤到的资源,这⾥推荐⼤家去爱奇艺查看视频教程:测试商户ID:test1617571测试API key:554343b2-7252-439b-b4eb-1af42c8f2175(此Key仅限测试环境使⽤)API测试地址:接下来,我们讲解⼀下请求参数⼀、接⼝描述/说明请求系统级参数说明:参数名称类型说明必须要求RequestData String请求内容需进⾏URL(utf-8)编码。
请求内容JSON格式,须和DataType⼀致。
REBusinessID String商户ID,请在我的服务页⾯查看。
RRequestType String请求指令类型:1002RDataSign String 数据内容签名:把(请求内容(未编码)+AppKey)进⾏MD5加密,然后Base64编码,最后进⾏URL(utf-8)编码。
详细过程请查看Demo。
RDataType String请求、返回数据类型:2-json;O备注:R-必填(Required),O-可选(Optional),C-报⽂中该参数在⼀定条件下可选(Conditional)这⾥提到了系统级参数,也相当于是公⽤参数,这些参数是调⽤每个接⼝都是必须要传参的。
⼆、接⼝参数请求内容字段定义:参数名称类型说明必须要求OrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流单号RCustomerName String寄件⼈或收件⼈的⼿机号后四位数字R接⼝参数,也叫业务参数,请求的业务接⼝不同,参数的字段,内容也不同,是跟着业务变化的,这⾥我们实现的是即时查询接⼝,请求指令类型:1002,快递鸟官⽹要求必须传递快递公司编码和物流单号,百世快运的编码是BTWL如要查看其他快递公司的编码,点击此链接:我们⽤真实单号(181********)来完成轨迹接⼝调⽤,请求 JSON{'OrderCode':'','ShipperCode': BTWL',LogisticCode':' 181********'}请求的完整报⽂(URL编码以后):RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27BTWL%27%2c%27LogisticCode%27%3a%2718111255341%27%7d%0d%0a++&EBu未编码的请求报⽂:RequestData= {'OrderCode':'','ShipperCode':'BTWL','LogisticCode':'181********'}&EBusinessID=1264783&RequestType=1002&DataSign=M2NhY2FiYzc1MzI5MmViZGYzZTVhNzI1ODg5N2I1Njk=&DataType=2返回参数定义:参数名称类型说明必须要求EBusinessID String⽤户ID ROrderCode String订单编号OShipperCode String快递公司编码RLogisticCode String物流运单号OSuccess Bool成功与否RReason String失败原因OState String物流状态:2-在途中,3-签收,4-问题件RTracesTracesAcceptTime StringAcceptStation StringRemark String返回报⽂信息-{"LogisticCode": "181********","ShipperCode": "BTWL","Traces": [{"AcceptStation": "快件在【新乡原阳ZX】已揽件","AcceptTime": "2019-11-03 19:03:12"}, {"AcceptStation": "快件由【新乡原阳】发往【郑州分拨】","AcceptTime": "2019-11-03 19:03:45"}, {"AcceptStation": "快件已到达【郑州分拨】","AcceptTime": "2019-11-03 21:48:50"}, {"AcceptStation": "快件由【郑州分拨】发往【南宁分拨】","AcceptTime": "2019-11-05 21:54:20"}, {"AcceptStation": "快件已到达【南宁分拨】","AcceptTime": "2019-11-07 17:24:45"}, {"AcceptStation": "快件由【南宁分拨】发往【桂林分拨】","AcceptTime": "2019-11-07 22:32:55"}, {"AcceptStation": "快件已到达【桂林分拨】","AcceptTime": "2019-11-08 13:07:55"}, {"AcceptStation": "快件由【桂林分拨】发往【桂林恭城】","AcceptTime": "2019-11-08 18:27:30"}, {"AcceptStation": "快件已到达【桂林恭城】","AcceptTime": "2019-11-09 14:30:15"}, {"AcceptStation": "快件已到达【桂林恭城ZX】,站点客服电话【199********】","AcceptTime": "2019-11-10 09:07:51"}, {"AcceptStation": "快件在【桂林恭城ZX】做了派件,派件员【陈真学】【173********】", "AcceptTime": "2019-11-10 09:12:09"}, {"AcceptStation": "已签收,签收⼈是:【⽀付宝付款签收】","AcceptTime": "2019-11-10 16:29:00"}],"State": "3","EBusinessID": "1264783","Success": true}这⾥根据我们的实际业务需求来选择免费套餐或者收费套餐。
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('发送请求失败')。
极兔快递单号查询快递鸟API接口-极兔速递
极兔快递单号查询快递鸟API接⼝-极兔速递前⾔看完快递鸟api极兔快递j&t对接教程这篇⽂章,然后把源码复制到你的项⽬上,就能快速完成极兔快递接⼝对接.到达极兔快递官⽹界⾯显⽰的效果,更适合刚⼊门的菜鸟,调⽤快递鸟的极兔快递查询API接⼝,能查询到极兔快递单号从收件、运输,到转运中⼼,派送到签收等各个环节的物流发货状态。
快递鸟api接⼝不区分开发语⾔,⽀持Java,C#,PHP,Python,ObjectC等开发语⾔的程序调⽤。
下⾯具体讲解实现过程.⽬录1.完成前期准备⼯作1.1,去快递鸟官⽹⼀个账号1.2,免费获得⼀个apiKey(接⼝权限验证需要)1.3,完成实名认证流程1.4,订购⼀个免费套餐2.API接⼝2.3,请求⽅式:POST2.4,编码格式(utf-8):application/x-www-form-urlencoded;charset=utf-82.5,返回类型:JSON2.7,调试⼯具:去调试(使⽤快递鸟账号登录)3.请求参数(Headers)参数名称类型说明必须要求RequestData String请求内容需进⾏URL(utf-8)编码,请求内容JSON格式,须和DataType⼀致必填EBusinessID String⽤户ID,查看⽤户ID和ApiKey必填RequestType String请求指令类型:1002 必填DataSign String签名数据,(Body+ApiKey)进⾏MD5加密,再进⾏Base64编码,最后进⾏URL(utf-8)编码必填DataType String求、返回数据类型:2-json ,默认Json选填4.请求参数(Body)参数名称类型说明必须要求OrderCode String订单编号选填ShipperCode String快递公司编码,极兔速递:JTSD必填LogisticCode String物流运单号必填5.返回参数(Return)参数名称类型说明必须要求EBusinessID String⽤户ID 必填ShipperCode String快递公司编码必填LogisticCode String物流运单号选填Success String成功与否必填Reason String失败原因选填State String物流状态:2-在途中,3-签收,4-问题件必填Traces String时间AcceptTime String必填AcceptStation String描述选填Remark String备注必填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": "JT0000052600488","ShipperCode": "JTSD","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": "JT0000052600488","ShipperCode": "JTSD","Traces": [],"State": "0","EBusinessID": "1264783","Reason": "业务错误[没有可⽤套餐]","Success": false}说明:未实名认证,未订购套餐,套餐可⽤查询量已经⽤完都会返回此报⽂信息/9.⽆轨迹返回报⽂(⽰例){"LogisticCode": "JT0000052600488","ShipperCode": "JTSD","Traces": [],"State": "0","EBusinessID": "1264783","Reason": "暂⽆轨迹信息","Success": true}10.分步讲解(C#版本)10.1,请求数据包结构10.2,C#调⽤代码⽰例//电商IDstring eEBusinessID = "test1617571";//电商加密私钥,快递鸟提供,注意保管,不要泄漏string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";//请求urlstring reqURL = ":8080/kdniaosandbox/gateway/exterfaceInvoke.json";//请求指令string reqType="1002";//2-jsonstring dataType = "2";//字符编码采⽤UTF-8string charset = "UTF-8";//JSON字符串stringstring jsonStr ="{\"OrderCode\":\"\",\"ShipperCode\":\"JTSD\",\"LogisticCode\":\"JT0000052600488\"}" ;//把(jsonStr+APIKey)进⾏MD5加密string md5Str=MD5(jsonStr + apiKey, charset);//把md5Str 进⾏Base64编码string base64Str=base64(md5Str,charset);//进⾏URL编码 (utf-8)string datasign = HttpUtility.UrlEncode(base64Str, charset);//请求报⽂参数string postStr = "RequestType=reqType&EBusinessID= eEBusinessID&RequestData=jsonStr&DataSign= datasign&DataType=dataType";//通讯协议使⽤Http协议Post请求⽅式返回轨迹数据string post = SendPost(reqURL, postStr);//获取到的post数据就是快递鸟返回的完整报⽂,接下来⾃⼰写⼀个解析json的⽅法就能获取到⾥⾯的字段信息。
菜鸟物流api接口对接标准
菜鸟物流api接口对接标准菜鸟物流是阿里巴巴集团旗下的一家专业物流服务提供商,致力于为电商行业提供全方位的物流解决方案。
菜鸟物流提供了一系列的API接口,方便企业与菜鸟物流进行系统对接,实现物流信息的及时同步和管理。
下面将详细介绍菜鸟物流API接口对接的标准。
1.确定对接需求:在进行API接口对接之前,首先需要确定对接的具体需求,包括物流信息的同步、订单的下发、运单的打印等功能。
2.申请接口权限:在菜鸟物流官网上申请API接口权限,获取对接所需的AppKey和AppSecret。
3.查询接口文档:下载菜鸟物流提供的API接口文档,了解各个接口的功能和调用方式。
4.选择合适的接口:根据对接需求选择合适的API接口,如物流信息查询接口、订单创建接口、运单打印接口等。
5.确定数据格式:确定接口请求和返回数据的格式,通常采用JSON格式进行数据交互。
6.进行接口调试:使用Postman等工具进行接口调试,验证接口的正确性和稳定性。
7.编写接口代码:根据接口文档编写对应的接口调用代码,实现与菜鸟物流系统的数据交互。
8.进行接口对接测试:在测试环境下进行接口对接测试,确保接口的功能正常。
9.与菜鸟物流对接人员沟通:在遇到问题时及时与菜鸟物流对接人员沟通,协助解决接口对接中的各种技术问题。
10.部署上线:完成接口对接测试后,将代码部署到生产环境上线,实现与菜鸟物流系统的正式对接。
11.完善接口监控:对接成功后,需要建立接口监控机制,及时发现和解决接口异常问题。
12.高可用性设计:在接口对接过程中,需要考虑接口的高可用性设计,保障接口的稳定性和可靠性。
13.数据加密传输:在进行数据传输时,需采用加密算法对数据进行加密,确保数据的安全性。
14.接口调用频率控制:合理控制接口的调用频率,防止接口被滥用导致系统崩溃。
15.接口权限验证:在接口调用时需要进行权限验证,确保只有授权的用户可以调用接口。
16.异常处理机制:对接口调用过程中可能出现的异常情况进行处理,保证系统的稳定性。
快递100api收费标准
快递100api收费标准快递100api是一个提供快递查询服务的接口,通过该接口,用户可以方便地获取快递信息,实现快递查询功能。
对于一些需要频繁使用快递查询功能的应用,使用快递100api可以极大地提高效率,因此收费标准就显得尤为重要。
快递100api的收费标准主要包括两个方面,即按次收费和按量收费。
按次收费是指每次调用接口都需要支付一定的费用,而按量收费则是根据用户的月度调用量来确定费用。
具体的收费标准如下:按次收费,对于一些使用频率较低的应用,可以选择按次收费的方式。
快递100api的按次收费标准为每次调用接口收取固定的费用,具体费用标准可以根据实际情况向快递100api官方进行咨询。
按量收费:对于一些使用频率较高的应用,可以选择按量收费的方式。
快递100api的按量收费标准是根据用户的月度调用量来确定费用,月度调用量越大,费用越高,具体的费用标准如下:月度调用量在1万次及以下的,收取基础费用;月度调用量在1万次以上10万次以下的,收取适量的超出费用;月度调用量在10万次以上的,可以与快递100api官方进行协商,制定个性化的收费方案。
除了按次收费和按量收费外,快递100api还提供了一些免费的接口调用次数,供用户在使用过程中进行测试和调试。
用户可以根据实际需求选择合适的收费方式,以便更好地满足自己的需求。
需要注意的是,快递100api的收费标准可能会根据市场需求和政策调整而发生变化,因此在选择使用快递100api时,建议用户及时关注官方公告,以获取最新的收费标准信息。
总的来说,快递100api的收费标准是相对灵活和多样的,可以根据用户的实际需求进行选择。
无论是按次收费还是按量收费,都可以为用户提供高效、稳定的快递查询服务,是一个性价比较高的快递查询接口。
在使用快递100api时,用户应当根据自己的实际情况选择合适的收费方式,并严格遵守快递100api的使用协议,以确保自己的合法权益,同时也为了维护整个行业的良好秩序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
快递查询api接口可实现需求(查询、取件、下单)
快递?快递接口?快递查询?快递下单接口?快递预约取件接口?你需要快递什么接口?是找不到?使用的是次数限制,还是收费的呢?是否有技术支持?是否能给予我们全方位服务?生活中,想到快递,无非就是四通一达,顺丰快递等。
四通一达:申通快递、圆通速递、中通快递、百世汇通、韵达快递。
他们之中也各有自己的开发平台或接口平台,开放给我们使用,如果不能满足当下我们的需求,只能选择商务合作等方式。
今天,我们主要看一些专业提供快递数据的平台,当然我说的都是我认为我比较了解的。
快递鸟API数据接口整合600余家国内外快递物流公司接口,为电商平台、电商ERP、仓储系统、清关公司、跨境电商、快递柜等公司提供包括物流轨迹数据查询、物流数据推送、在线发件、电子面单、跨境分段物流统一查询、货款金融服务等功能的综合性快递物流接口服务。
对接流程:
网站申请接口KEY并认证-对接接口-调试-上线使用
1、登录官网注册页面注册账号
2、登录用户管理后台
注:登录快递鸟用户管理后台后获得用户ID和APIKey,此用于保证应用来源的可靠性,避免应用伪造,被不法使用。
进入“我的会员中心”进行实名认证注:
1、认证类型、应用类型根据用户实际情况选择即可,接口返回数据与选择结果无关;
2、标记为*的为必填,要求上传清晰、jpg格式且小于2M的证件图片;
3、技术对接人信息为用户方对接工程师的信息;
4、如有其他疑问可进入官网加入商务合作群进行咨询。
认证成功后,进入“产品服务管理”,开通相关会员服务
字文章供GO 爱好者们玩耍,写的不好大神勿喷!不废话,上代码:
首先,导入包
然后,定义各种结构体、变量、常量
然后,处理请求内容,加密,初始化配置
然后,POST请求
然后,获取路由信息,并进行处理
最后完事,用这个结构体去干点什么吧。