快递鸟物流对接--电商

 

一、准备阶段

  你需要自己去快递鸟注册信息,或者是公司会给你对接接口所需要的EBusinessID、AppKey (这个必须有,没有的话还搞什么)

  在官网可下载接口文档、快递公司的编码(这个也得有,没有怎么查)
  

二、代码示例(这个可以直接拿来用,将你的参数改一改就可以了)

    public $ReqURL='https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';
    public $EBusinessID='1111111';
    public $AppKey='111111111111111111111111';

    public function getOrderTracesByJson($customerName,$key,$number){
        // 组装应用级参数
        $requestData= "{".
            "'CustomerName': '$customerName',".
            "'OrderCode': '',".
            "'ShipperCode': '$key',".
            "'LogisticCode': '$number',".
            "}";
        // 组装系统级参数
        $datas = array(
            'EBusinessID' => $this->EBusinessID,
            'RequestType' => '8001', //免费即时查询接口指令1002/在途监控即时查询接口指令8001/地图版即时查询接口指令8003
            'RequestData' => urlencode($requestData) ,
            'DataType' => '2',
        );
        $datas['DataSign'] = $this->encrypt($requestData, $this->AppKey);
        //以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
        $result = json_decode($this->sendPost($this->ReqURL, $datas),1);
        if ($result){
            if( $result['Success'] === false ) {
                $traces[$key]['alttime'] = date('Y-m-d H:i:s',time());
                $traces[$key]['log_text'] = $result['Reason'];
            }
            if ($result['Success'] === true ){
                if( $result['State'] == '0' ) {
                    $traces[$key]['alttime'] = date('Y-m-d H:i:s',time());
                    $traces[$key]['log_text'] = $result['Reason'];
                }
                $traces = array();
                if($result['Traces']){
                         foreach( $result['Traces'] as $key=>$value) {
                             $traces[$key]['alttime'] = $value['AcceptTime'];
                             $traces[$key]['log_text'] = strip_tags($value['AcceptStation']);
                         }
                         if ($result['State'] == 3){
                             $traces['State']=$result['State'];
                         }
                         return $traces;
                }else{
                    $traces[$key]['alttime'] = date('Y-m-d H:i:s',time());
                    $traces[$key]['log_text'] = '查询失败,请到快递公司官网查询';
                }
            }
        }else{
            $traces[$key]['alttime'] = date('Y-m-d H:i:s',time());
            $traces[$key]['log_text'] = '查询失败,请到快递公司官网查询';
        }
    }


    /**
     *  post提交数据
     * @param  string $url 请求Url
     * @param  array $datas 提交的数据
     * @return url响应返回的html
     */
    public function sendPost($url, $datas) {

        $postdata = http_build_query($datas);
        $options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type:application/x-www-form-urlencoded',
                'content' => $postdata,
                'timeout' => 15 * 60 // 超时时间(单位:s)
            )
        );

        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        return $result;
    }

    /**
     * 电商Sign签名生成
     * @param data 内容
     * @param ApiKey ApiKey
     * @return DataSign签名
     */
    public function encrypt($data, $ApiKey) {
        return urlencode(base64_encode(md5($data.$ApiKey)));
    }

注释:$customerName -- 如果是顺丰的话需要发货人或者收件人的手机号后四位,其他快递不需要

   $key -- 快递公司编号(eg:STO   SF   JD)

   $number -- 物流单号

   getOrderTracesByJson,这个方法里面我根据实际需要将数据进行了一些修改,可以根据自己的业务需要进行修改

 

posted @ 2021-09-16 17:23  Conqueror·  阅读(303)  评论(0编辑  收藏  举报