支付宝赞助帐号:service@kuitao8.com 

php获取物流订单号的信息

Created2014-07-22   Views 4681    Author 懒人程序
<?php
header( 'Content-Type: text/html; charset=utf-8' );
class Express {
     
    private $expressname =array(); //封装了快递名称
    
    function __construct(){
        $this->expressname = $this->expressname();
    }
    
    /*
     * 采集网页内容的方法
     */
    private function getcontent($url){
        if(function_exists("file_get_contents")){
            $file_contents = file_get_contents($url);
        }else{
            $ch = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $file_contents = curl_exec($ch);
            curl_close($ch);
        }
        return $file_contents;
    }
    /*
     * 获取对应名称和对应传值的方法
     */
    private function expressname(){
        $result = $this->getcontent("http://www.kuaidi100.com/");
        preg_match_all("/data\-code\=\"(?P<name>\w+)\"\>\<span\>(?P<title>.*)\<\/span>/iU",$result,$data);
        $name = array();
        foreach($data['title'] as $k=>$v){
            $name[$v] =$data['name'][$k];
        }
        return $name;
    }
    
    /*
     * 解析object成数组的方法
     * @param $json 输入的object数组
     * return $data 数组
     */
    private function json_array($json){
        if($json){
            foreach ((array)$json as $k=>$v){
                $data[$k] = !is_string($v)?$this->json_array($v):$v;
            }
            return $data;
        }
    }
    
    /*
     * 返回$data array      快递数组
     * @param $name         快递名称
     * 支持输入的快递名称如下
     * (申通-EMS-顺丰-圆通-中通-如风达-韵达-天天-汇通-全峰-德邦-宅急送-安信达-包裹平邮-邦送物流
     * DHL快递-大田物流-德邦物流-EMS国内-EMS国际-E邮宝-凡客配送-国通快递-挂号信-共速达-国际小包
     * 汇通快递-华宇物流-汇强快递-佳吉快运-佳怡物流-加拿大邮政-快捷速递-龙邦速递-联邦快递-联昊通
     * 能达速递-如风达-瑞典邮政-全一快递-全峰快递-全日通-申通快递-顺丰快递-速尔快递-TNT快递-天天快递
     * 天地华宇-UPS快递-新邦物流-新蛋物流-香港邮政-圆通快递-韵达快递-邮政包裹-优速快递-中通快递)
     * 中铁快运-宅急送-中邮物流
     * @param $order        快递的单号
     * $data['ischeck'] ==1   已经签收
     * $data['data']        快递实时查询的状态 array
     */
    public  function getorder($name,$order){
        $keywords = $this->expressname[$name];
        $result = $this->getcontent("http://www.kuaidi100.com/query?type={$keywords}&postid={$order}");
        $result = json_decode($result);
        $data = $this->json_array($result);
        return $data;
    }
}
$a = new Express();
$_type = $_GET['type'];
$_order = $_GET['order'];
$result = $a->getorder("{$_type}","{$_order}");
/*
 * 4.输入参数
名称    类型    是否必需       描述
id     String    是    身份授权key,请 快递查询接口 进行申请(大小写敏感)
com    String    是    要查询的快递公司代码,不支持中文,对应的公司代码见
《API URL 所支持的快递公司及参数说明》和《支持的国际类快递及参数说明》。
如果找不到您所需的公司,请发邮件至 kuaidi@kingdee.com 咨询(大小写不敏感)
nu     String    是    要查询的快递单号,请勿带特殊符号,不支持中文(大小写不敏感)
valicode    String    是    已弃用字段,无意义,请忽略。
show     String    是    返回类型:
0:返回json字符串,
1:返回xml对象,
2:返回html对象,
3:返回text文本。
如果不填,默认返回json字符串。
muti     String    是    返回信息数量:
1:返回多行完整的信息,
0:只返回一行信息。
不填默认返回多行。
order     String    是    排序:
desc:按时间由新到旧排列,
asc:按时间由旧到新排列。
不填默认返回倒序(大小写不敏感)
5.返回结果
字段名称      字段含义
com    物流公司编号
nu    物流单号
time    每条跟踪信息的时间
context    每条跟综信息的描述
state    快递单当前的状态 : 
0:在途,即货物处于运输过程中;
1:揽件,货物已由快递公司揽收并且产生了第一条跟踪信息;
2:疑难,货物寄送过程出了问题;
3:签收,收件人已签收;
4:退签,即货物由于用户拒签、超区等原因退回,而且发件人已经签收;
5:派件,即快递正在进行同城派件;
6:退回,货物正处于退回发件人的途中;
该状态还在不断完善中,若您有更多的参数需求,欢迎发邮件至 kuaidi@kingdee.com 提出。
status    查询结果状态:
0:物流单暂无结果,
1:查询成功,
2:接口出现异常,
message    无意义,请忽略
condition    无意义,请忽略
ischeck    无意义,请忽略
6.返回示例
 *
 调用方法:http://www.yii.com/q.php?type=%E7%94%B3%E9%80%9A&order=768482104793
*
 *
 *
 */
 
//var_dump($result);
if(!isset($result['ischeck'])){echo "error";exit;}
if($result['ischeck']==1){echo "己签收";}
foreach($result['data'] as $key => $value){
    echo $value['context'].'<br/>';
    echo $value['ftime'].'<br/>';
    echo "<hr>";
 
}
?>
上一篇: yii增加css js方法
下一篇: Yii CGridView 详细说明
支持键盘 ← →

邮件订阅

订阅我们的精彩内容