快递查询

浏览:2506 发布日期:2016/09/30 分类:技术分享
<?php
namespace app\common\service;

/**
 * 快递信息服务
 */
class Express
{
    
    /**
     * 查询快递状态
     * @param string $express_num 快递订单号
     * @param string $express_com 快递公司编码
     * @param integer $type 接口类型,1 为快递100,2 为百度
     * @return array | boolean
     */
    public static function process($express_num,$express_com = null ,$type = 0)
    {
        $data = [];
        $type = $type ?: \think\Config::get('express_api_type');
        switch ($type){            
            case 2:
                $data = self::processBaidu($express_num,$express_com);
                break;
            case 1:
                $data = self::processKuaidi100($express_num,$express_com);
                break;
            default:
                $data = self::processKuaidi100($express_num,$express_com);
                break;
        }        
        return self::formatData($data,$type,$express_num,$express_com);
    }
    
    /**
     * 格式化数据,为统一数据返回
     * @param unknown $data
     * @param unknown $type
     * @param unknown $num
     * @param unknown $com
     */
    public static function formatData($data,$type,$num,$com)
    {
        $return = [];
        switch ($type){
            case 2:
                $return['message'] = $data['msg']?:'ok';
                $return['status'] = $data['error_code'] ?: 200;
                $return['ischeck'] = $data['data']['info']['state'] == 3 ? 1 : 0;
                $return['state'] = $data['data']['info']['state'];
                $return['updatetime'] = format_time($data['data']['info']['context'][0]['time']);
                $return['nu'] = $return['num'] = $num;
                $return['com'] = $com;
                $return['data'] = [];
                foreach ($data['data']['info']['context'] as $value){
                    $return['data'][] = [
                            'time' => $value['time'],
                            'context' => $value['desc'],
                            'ftime' => format_time($value['time']),
                    ];
                }
                break;
            case 1:
            default:
                $return = $data;
                $return['num'] = $num;
                foreach ($return['data'] as &$value){
                    $value['time'] = strtotime($value['time']);
                }
                break;
        }
        $return['state_text'] = self::getStateText($return['state']);
        $return['com_info'] = self::getComInfo($com);
        return $return;
    }
    
    /**
     * 获取状态文字
     * @param unknown $state
     */
    public static function getStateText($state)
    {
        $text = [
                0 => '在途中',
                1 => '已揽件',
                2 => '疑难',
                3 => '已签收',
                4 => '退签',
                5 => '派件中',
                6 => '退回',
        ];
        return isset($text[$state]) ? $text[$state] : '未知';
    }
    
    /**
     * 获取公司信息
     * @param unknown $com
     */
    public function getComInfo($com)
    {
        return [];
    }
    
    /**
     * 查询快递状态,调用快递100接口
     * @param string $express_num 快递订单号
     * @param string $express_com 快递公司编码
     * @return array | boolean
     */
    public static function processKuaidi100($express_num,&$express_com = null)
    {
        if(!$express_num){
            return false;
        }
        $header = [];
        $cookies = [];
        if(!$express_com){
            $auto_url = 'https://www.kuaidi100.com/autonumber/autoComNum?text='.$express_num;
            $express_com_data = json_decode(Tools::curl($auto_url,['text'=>$express_num],$cookies,$header),true);
            if(isset($express_com_data['auto'][0]['comCode'])){
                $express_com = $express_com_data['auto'][0]['comCode'];
            }
        }
        $param = [
                'type' => $express_com,
                'postid' => $express_num,
                'id' => 1,
                'valicode' => Tools::getRandChar(4,3),
                'temp' => '0.'.Tools::getRandChar(17,4),
        ];
        $url ='https://www.kuaidi100.com/query?'.http_build_query($param);
        $rs = Tools::curl($url,false,$cookies,$header);
        return $rs ?  json_decode($rs,true) : false;
    }
    
    /**
     * 查询快递状态,调用百度快递查询接口
     * @param string $express_num 快递订单号
     * @param string $express_com 快递公司编码
     * @return array | boolean
     */
    public static function processBaidu($express_num,&$express_com = null)
    {
        if(!$express_num){
            return false;
        }
        $cookies = 'BAIDUID=FC90082031B5BF81C4BD5D84DF23FB96:FG=1;';
        $ip = Tools::getRandIp();
        $header = [
                'X-FORWARDED-FOR:'.$ip,
                'CLIENT-IP:'.$ip,
        ];
        if(!$express_com){
            $auto_url = 'https://www.kuaidi100.com/autonumber/autoComNum?text='.$express_num;
            $express_com_data = json_decode(Tools::curl($auto_url,['text'=>$express_num],$cookies,$header),true);
            if(isset($express_com_data['auto'][0]['comCode'])){
                $express_com = $express_com_data['auto'][0]['comCode'];
            }
        }
        $param = [
                'appid' => '4001',
                'com' => $express_com,
                'nu' => $express_num,
                'vcode' => '',
                '_' => Tools::getTimestamp(13),
        ];
        $url = 'https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?'.http_build_query($param);        
        $rs = Tools::curl($url,false,$cookies,$header);
        return $rs ?  json_decode($rs,true) : false;
    }
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>