电商网站接入快递查询
网页跳转格式
适用场景:在管理后台中,订单列表点击显示快递详情 和 订单详情页显示快递详情,使用 iframe 嵌入该URL
http://www.kuaidi100.com/chaxun?com=快递名称(可以中文英文)&nu=快递单号
快递名称:可以为中文或英文
快递单号:大小写不敏感
手机页跳转格式
适用场景:手机页在订单详情页中点击物流详情栏时跳转
http://m.kuaidi100.com/index_all.html?type=快递名称(可以中文英文)&postid=快递单号&callbackurl=返回按钮的网址
快递名称:可以为中文或英文
快递单号:大小写不敏感
返回网址:以http://或https://开头的完整网址
手机页跳转2,但这个不含返回按钮,在苹果上无法返回 http://m.kuaidi100.com/result.jsp?nu=快递单号
JSON格式
适用场景:显示在用户或/和后台中的 订单列表页、订单详情页,类似于淘宝手机网页版中的订单详情页
http://www.kuaidi100.com/query?type=快递英文名&postid=快递单号
快递英文名:英文名称,参考对照表
快递单号:大小写不敏感
JSON返回信息示例
其中的参数 "ischeck":"1" 表示已经签收
{ "message": "ok", "nu": "100486292177", "ischeck": "1", "com": "yuantong", "status": "200", "condition": "F00", "state": "3", "data": [ { "time": "2015-10-15 13:08:58", "context": "客户 签收人: 邵雯雯 已签收 感谢使用圆通速递,期待再次为您服务", "ftime": "2015-10-15 13:08:58" }, { "time": "2015-10-15 10:16:16", "context": "广东省广州市天平架公司(点击查询电话)周** 派件中 派件员电话18002211198", "ftime": "2015-10-15 10:16:16" }, { "time": "2015-10-15 08:23:10", "context": "广东省广州市天平架公司 已收入", "ftime": "2015-10-15 08:23:10" }, { "time": "2015-10-15 05:15:00", "context": "广州转运中心 已发出,下一站 广东省广州市天平架", "ftime": "2015-10-15 05:15:00" }, { "time": "2015-10-15 04:44:29", "context": "广州转运中心 已收入", "ftime": "2015-10-15 04:44:29" }, { "time": "2015-10-14 23:33:08", "context": "虎门转运中心 已发出,下一站 广州转运中心", "ftime": "2015-10-14 23:33:08" }, { "time": "2015-10-14 23:32:20", "context": "虎门转运中心 已收入", "ftime": "2015-10-14 23:32:20" }, { "time": "2015-10-13 20:32:22", "context": "泰州转运中心 已发出,下一站 虎门转运中心", "ftime": "2015-10-13 20:32:22" }, { "time": "2015-10-13 20:30:54", "context": "泰州转运中心 已收入", "ftime": "2015-10-13 20:30:54" }, { "time": "2015-10-13 18:04:50", "context": "江苏省扬州市公司 已发出,下一站 江苏省泰州市", "ftime": "2015-10-13 18:04:50" }, { "time": "2015-10-13 18:00:17", "context": "江苏省扬州市公司 已打包", "ftime": "2015-10-13 18:00:17" }, { "time": "2015-10-13 17:58:27", "context": "江苏省扬州市公司(点击查询电话) 已揽收", "ftime": "2015-10-13 17:58:27" }, { "time": "2015-10-13 15:44:59", "context": "江苏省扬州市公司 取件人: 王莹莹 已收件", "ftime": "2015-10-13 15:44:59" } ] }
PHP后台查询物流信息返回JSON数组的处理类
<?php namespace Home\Controller; use Think\Controller; //物流查询控制器 class ExpController extends Controller { //快递中英文对照数组 //注意因为本身数据库中的快递名称可能并不统一,使用正则表达式来匹配,所以这里的名称要尽量简短 //更多快递的对应参考快递100的对照文档 http://www.kuaidi100.com/openapi/api_post.shtml var $expNameArr = array( '圆通'=>'yuantong', '申通'=>'shentong', '中通'=>'zhongtong', '顺丰'=>'shunfeng', '韵达'=>'yunda', '邮政'=>'ems', 'EMS'=>'ems', 'ems'=>'ems', '天天'=>'tiantian', '百世汇通'=>'huitongkuaidi', '联昊通'=>'lianhaowuliu', ); /** * 获得物流信息JSON * @param string $expName 快递名称:中文 * @param string $expNum 快递单号:大小写不敏感 * @return array 快递100查询回来的信息JSON转换而成 */ function getExpJSON($expName, $expNum){ //快递名匹配算法 $expNameEn = ''; foreach( $this->expNameArr as $key=>$val){ $pattern = '/'.$key.'/'; if( preg_match($pattern, $expName) ){ $expNameEn = $val; } } // var_dump($expNameEn); // $expNameEn = 'shentong'; // $expNum = '220494269655'; //CURL方式获得JSON $url = 'http://www.kuaidi100.com/query?type='.$expNameEn.'&postid='.$expNum; $resStr = $this->curl_get_contents($url); //转为array return json_decode($resStr, TRUE); } /** * CURL方式获得内容:通用 * @param string $url 网址
* @param int $timeout 超时时间(可选) * @return string 页面内容 */ function curl_get_contents($url,$timeout=1) { $curlHandle = curl_init(); curl_setopt( $curlHandle , CURLOPT_URL, $url ); curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $curlHandle ); curl_close( $curlHandle ); return $result; } }
伪造IP地址,绕过IP地址的次数限制(未测试),在curl_get_contents中插入如下代码,(可能有用可能没用)
$fakeIP = '211.'.rand(1,255).'.'.rand(1,255).'.'.rand(1,255); $header = [ 'CLIENT-IP:'.$fakeIP, 'X-FORWARDED-FOR:'.$fakeIP, ]; curl_setopt( $curlHandle , CURLOPT_HTTPHEADER, $header);