<?php
/**
 * Created by JetBrains PhpStorm.
 * User: user
 * Date: 13-8-8
 * Time: 下午2:24
 * To change this template use File | Settings | File Templates.
 */
class Service_EpacketApi extends Common_Service
{
    //  private $wsdlUrl = 'http://epacketws.pushauction.net/orderservice.asmx?WSDL';     //测试
    //private $wsdlUrl = 'http://shippingapi.ebay.cn/production/v2/orderservice.asmx?wsdl';   //正式
    //private $wsdlUrl ='/var/www/suntek/iship2.com/wsdl/orderservice.WSDL';
    private $wsdlUrl ='http://shippingapi.ebay.cn/production/v3/orderservice.asmx?wsdl';

    private $header = array(
        'Version'=> '3.0.0',
        'APIDevUserID'=>'',
        'APIPassword' => '',
        'APISellerUserID' => '',
        'MessageID' => '',
    );
    private $soap = '';
    private $order;
    private static $con = '';

    public function __construct(){
        if ('' == $this->soap) {
            $this->soap =  new soapClient($this->wsdlUrl);
        } else {
            $this->soap = $this->soap;
        }
        // array( "trace"      => 1,   "exceptions" => 0)

    }
    public static function getInstance() {
        if ('' == self::$con) {
            return new Service_EpacketApi();
        } else {
            return self::$con;
        }

    }

    public function setHeader($messageId,$appUserId=null,$appPassword=null,$appSellerUserId=null) {

        $this->header['MessageID'] = $messageId;
        if (null != $appUserId) {
            $this->header['APIDevUserID'] = $appUserId;
        }
        if (null != $appPassword) {
            $this->header['APIPassword'] = $appPassword;
        }
        if (null != $appSellerUserId) {
            $this->header['APISellerUserID'] = $appSellerUserId;
        }
    }




    /*********************
     * set PickUpType
     * @param $pickUpType	Required	取件类型 0 上门取件， 1 自己送件
     ************************/
    public function setPickUpType($pickUpType=1) {
        //$this->order['EMSPickUpType'] = $pickUpType;
        $this->order['EMSPickUpType'] = $pickUpType;

    }



    /*******************
     * add FormAddress to ORDER
     *
     * @param	array
     * 	$shipFromAddress['countact']	 	Required 	联系人
     * 	$shipFromAddress['company'] 	 	Optional 	公司
     * 	$shipFromAddress['street']			Required	街道
     *  $shipFromAddress['district']	 	Required 	区
     * 	$shipFromAddress['city']			Required 	城市
     * 	$shipFromAddress['province'] 	 	Required 	省
     * 	$shipFromAddress['postcode'] 		Required 	邮编
     * 	$shipFromAddress['country']			Required 	国家
     * 	$shipFromAddress['email'] 			Optional	电邮
     * 	$shipFromAddress['mobile'] 			Optional	手机号
     *
     ***********************/
    public function  setShipFromAddress($shipFromAddress) {
        $this->order['ShipFromAddress'] = array(
            'Contact' => $shipFromAddress['contact'],
            'Company' => $shipFromAddress['company'],
            'Street' => $shipFromAddress['street'],
            'District' => $shipFromAddress['district'],
            'City' => $shipFromAddress['city'],
            'Province' => $shipFromAddress['province'],
            'Postcode' => $shipFromAddress['postcode'],
            'Country' => $shipFromAddress['country'],
            'Email' => $shipFromAddress['email'],
            'Mobile' => $shipFromAddress['mobile'],
        );
        if (isset($shipFromAddress['company'])&&!empty($shipFromAddress['company'])) {
            $this->order['ShipFromAddress']['Company'] = $shipFromAddress['company'];
        }
    }


    /*******************
     * add    PickUpAddress to ORDER
     *
     * @param	array pickUpAddress
     *	$pickUpAddress['email']			Required 	联系人
     * 	$pickUpAddress['company']		Optional 	公司
     * 	$pickUpAddress['country']	 	Required	国家
     * 	$pickUpAddress['province'] 		Required 	省，输入相应省份的代码，请参考揽收地址代码表
     * 	$pickUpAddress['city']	 		Required 	城市，输入相应城市的代码，请参考揽收地址代码表
     * 	$pickUpAddress['district']  	    Required 	区，输入相应区的代码，请参考揽收地址代码表
     * 	$pickUpAddress['street']		Required 	街道
     * 	$pickUpAddress['postcode']  	Required 	邮编
     * 	$pickUpAddress['contact'] 		Required 	联系人
     * 	$pickUpAddress['mobile']  		Required	手机；方便揽收人员上门揽收前联系，必须填写。
     * 	$pickUpAddress['phone']  		Optional	固话
     *
     ************************/
    public function  setPickUpAddress($pickUpAddress) {
        $this->order['PickUpAddress'] = array(
            'Email' => $pickUpAddress['email'],
            'Company' => $pickUpAddress['company'],
            'Country' => $pickUpAddress['country'],
            'Province' => $pickUpAddress['province'],
            'City' => $pickUpAddress['city'],
            'District' => $pickUpAddress['district'],
            'Street' => $pickUpAddress['street'],
            'Postcode' => $pickUpAddress['postcode'],
            'Contact' => $pickUpAddress['contact'],
            'Mobile' => $pickUpAddress['mobile'],
            'Phone' => $pickUpAddress['phone'],
        );
    }


    public function  setReturnAddress($ReturnAddress) {
        $this->order['ReturnAddress'] = array(
            'Company' => $ReturnAddress['company'],     //公司
            'Country' => $ReturnAddress['country'],     //国家 中国
            'Province' => $ReturnAddress['province'],   //省
            'City' => $ReturnAddress['city'],           //城市
            'District' => $ReturnAddress['district'],   //区
            'Street' => $ReturnAddress['street'],       //街道
            'Postcode' => $ReturnAddress['postcode'],   //邮编
            'Contact' => $ReturnAddress['contact'],     //联系人
        );
    }

    /*****************************
     * add    ShipToAddress to ORDER
     *
     * @param Array shipToAddress
     * 	$shipToAddress['email'] 		Required 		电邮
     * 	$shipToAddress['company']		Optional	 	公司
     * 	$shipToAddress['contact']		Required		街道
     * 	$shipToAddress['phone']  		Required 		电话
     * 	$shipToAddress['street'] 		Required 		街道
     * 	$shipToAddress['city']			Required 		城市
     *	$shipToAddress['province'] 		Required		省份
     *	$shipToAddress['postcode'] 		Required  		邮政编码
     *	$shipToAddress['country']		Required		国家
     *	$shipToAddress['country_code']	Required		国家代码，与eBay API 里的标准国家代码一致。
     *
     ***************************/
    public function  setShipToAddress($shipToAddress) {

        $this->order['ShipToAddress'] = array(
            'Email' => $shipToAddress['email'],
            'Company' => $shipToAddress['company'],
            'Contact' => $shipToAddress['contact'],
            'Phone' => empty($shipToAddress['phone'])?' ':$shipToAddress['phone'],
            'Street' => $shipToAddress['street'],
            'City' => $shipToAddress['city'],
            'Province' => $shipToAddress['province'],
            'Postcode' => $shipToAddress['postcode'],
            //	'District' => $district,
            'Country' => $shipToAddress['country'],
            'CountryCode' => $shipToAddress['country_code'],
        );
    }


    /**********************************
     * add ItemList to ORDER
     *@param array item
     *	$item['skuid']						Optional			SKUID
     *	$item['weight']						Required			重量
     *	$item['customs_title_cn']			Required			中文报关名称
     *	$item['customs_title_en']			Required			英文报关名称
     *	$item['declared_value']				Required			申报价值
     *	$item['origin_country_name']		Required 			原产地国家名称
     *	$item['origin_country_code']		Required			产地国家Code
     *	$item['currency_code']				Optional			货币符号，可用值：USD
     *	$item['ebay_email']					Optional			买家eBay电邮
     *	$item['ebay_buyer_id']				Required			eBay买家ID
     *	$item['ebay_item_id']				Required			eBay物品号
     *	$item['ebay_item_title']			Optional			eBay商品标题
     *	$item['ebay_message']				Optional			eBay留言
     *	$item['ebay_site_id']				Required			站点
     *	$item['ebay_transaction_id']		Required			eBay交易号，拍卖的物品请输入0
     *	$item['note']						Optional			附注
     *	$item['order_sales_record_number']	Required			订单销售编号，如果在eBay上合并订单，会产生一个新的SalesRecordNumber
     *	$item['payment_date']				Required			付款日期
     *	$item['paypal_email']				Optional			买家PayPal电邮
     *	$item['paypal_message']				Optional			PayPal留言
     *	$item['posted_qty']					Required			寄货数量
     *	$item['received_amount']			Required			收到金额
     *	$item['sales_record_number']		Required			用户从eBay上下载的时eBay销售编号
     *	$item['sold_date']					Required			卖出日期
     *	$item['sold_price']					Required			卖出价格
     *	$item['sold_qty']					Required			卖出数量
     *********************************/
    public function addItem($item) {
        $sku = array(
            'SKUID' => $item['skuid'],
            'Weight' => $item['weight'],
            'CustomsTitleCN' => $item['customs_title_cn'],
            'CustomsTitleEN' => $item['customs_title_en'],
            'DeclaredValue' => $item['declared_value'],
            'OriginCountryName' => empty($item['origin_country_name'])?'China':$item['origin_country_name'],
            'OriginCountryCode' => empty($item['origin_country_code'])?'CN':$item['origin_country_code'],
        );
        $this->order['ItemList']['Item'][] = array(
            'CurrencyCode' => $item['currency_code'] ,
            'EBayEmail' => $item['ebay_email'],
            'EBayBuyerID' => $item['ebay_buyer_id'],
            'EBayItemID'=>$item['ebay_item_id'],
            'EBayItemTitle'=>$item['ebay_item_title'],
            'EBayMessage' => $item['ebay_message'],
            'EBaySiteID' => $item['ebay_site_id'],
            'EBayTransactionID' => $item['ebay_transaction_id'],
            'Note' => $item['note'],
            'OrderSalesRecordNumber'=>$item['order_sales_record_number'],
            'PaymentDate'=>$item['payment_date'],
            'PayPalEmail'=>$item['paypal_email'],
            'PayPalMessage'=>$item['paypal_message'],
            'PostedQTY' => $item['posted_qty'],
            'ReceivedAmount'=>$item['received_amount'],
            'SalesRecordNumber'=>$item['sales_record_number'],
            'SoldDate' => $item['sold_date'],
            'SoldPrice'=>$item['sold_price'],
            'SoldQTY' => $item['sold_qty'],

            'SKU'=>$sku,
        );
    }

    /******
     * AddPackage
     * 用户通过调用该方法上传一个需要发货的包裹信息，返回申请到的包裹追踪号
     * 调用接口方法AddAPACShippingPackage
     *
     *
     ******/
    public function AddPackage(){

        try {
            $order['AddAPACShippingPackageRequest'] = $this->header;
            $order['AddAPACShippingPackageRequest']['OrderDetail'] = $this->order;
            $respones = $this->soap->AddAPACShippingPackage($order);
            $epacketLog = 'AddPackage '.$respones->AddAPACShippingPackageResult->Ack.' ';
            if (isset($respones->AddAPACShippingPackageResult->Message)) {
                $epacketLog .= $respones->AddAPACShippingPackageResult->Message.' ';
            }
            $epacketLog .= $respones->AddAPACShippingPackageResult->Timestamp.' ';
            $epacketLog .= $respones->AddAPACShippingPackageResult->InvocationID.' ';
            if (strtolower($respones->AddAPACShippingPackageResult->Ack) == 'success') {
                $epacketLog .=	$respones->AddAPACShippingPackageResult->TrackCode;

            }
            /* 调试
                print "<pre>\n";
                print "Request :\n".htmlspecialchars($this->soap->__getLastRequest()) ."\n";
                print "Response:\n".htmlspecialchars($this->soap->__getLastResponse())."\n";
                print "</pre>";
            */
            $this->logError($epacketLog);
            return $respones;

        } catch (Exception $e) {
            echo $e->getMessage();
            $this->logError($e);
        }

    }


    /************
     * getShippingLabel()
     * 用于打印详情单，呼叫成功后会返回标签流。
     * 调用接口方法 GetAPACShippingLabel
     ************/
    public function getShippingLabel($trackDetail)  {

        $getLabelArray = array(
            'GetAPACShippingLabelRequest' => $this->header,


        );
        $getLabelArray['GetAPACShippingLabelRequest']['TrackCode'] = $trackDetail['track_number'];
        $getLabelArray['GetAPACShippingLabelRequest']['PageSize'] = $trackDetail['PageSize'];
        //$getLabelArray['GetAPACShippingLabelRequest']['pagesize'] = 1;

        $response = $this->soap->GetAPACShippingLabel($getLabelArray);
        //var_dump($response);

        if ($response->GetAPACShippingLabelResult->Ack  == 'Success') {

            //header('Content-type: application/pdf');
            //header('Content-Disposition: attachment; filename="downloaded.pdf"');

            return $response->GetAPACShippingLabelResult->Label;

        } else {
            $logInfo = 'getShippingLabel '.$response->GetAPACShippingLabelResult->Ack.' ';
            if (isset($response->GetAPACShippingLabelResult->Message)) {
                $logInfo .= $response->GetAPACShippingLabelResult->Message.' ';
            }
            $logInfo .= $response->GetAPACShippingLabelResult->Timestamp.' '.$response->GetAPACShippingLabelResult->InvocationID;
            $this->logError($logInfo);
        }


    }

    /**************************
     *Cancel Order
     *
     ***************************/
    public function cancelOrder($trackNumber){

        $confirmArray = array(
            'CancelAPACShippingPackageRequest' => $this->header,
        );
        if ($trackNumber  == '') {
            return false;
        }
        $confirmArray['CancelAPACShippingPackageRequest']['TrackCode'] = $trackNumber;
        $confirmArray['CancelAPACShippingPackageRequest']['Version'] = '3.0.0';

        try {

            $response = $this->soap->CancelAPACShippingPackage($confirmArray);

            $logInfo = 'confirmPackage '.$response->CancelAPACShippingPackageResult->Ack.' ';
            if (isset($response->CancelAPACShippingPackageResult->Message)) {
                $logInfo .= $response->CancelAPACShippingPackageResult->Message.' ';
            }
            $logInfo .= $response->CancelAPACShippingPackageResult->Timestamp.' '.$response->CancelAPACShippingPackageResult->InvocationID;
            $this->logError($logInfo);

            return $response;

        } catch (Exception $e) {
            $this->logError($e);
            //return $e;
        }


    }

    /*************
     * confirmPackage()
     * 确认并交运包裹信息
     * 调用接口方法 ConfirmAPACShippingPackage
     *
     ****************/
    public function confirmPackage($trackDetail) {
        $confirmArray = array(
            'ConfirmAPACShippingPackageRequest' => $this->header,
        );
        if ($trackDetail['track_number'] == '') {
            return false;
        }

        $confirmArray['ConfirmAPACShippingPackageRequest']['TrackCode'] = $trackDetail['track_number'];
        try {

            $response = $this->soap->ConfirmAPACShippingPackage($confirmArray);

            $logInfo = 'confirmPackage '.$response->ConfirmAPACShippingPackageResult->Ack.' ';
            if (isset($response->ConfirmAPACShippingPackageResult->Message)) {
                $logInfo .= $response->ConfirmAPACShippingPackageResult->Message.' ';
            }
            $logInfo .= $response->ConfirmAPACShippingPackageResult->Timestamp.' '.$response->ConfirmAPACShippingPackageResult->InvocationID;
            $this->logError($logInfo);

            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }

    }




    /*************
     * cancelPackage()
     * 用于取消并删除在交运前的订单
     *  调用接口方法 CancelAPACShippingPackage
     *
     ****************/
    public function cancelPackage($trackDetail) {
        $cancelArray = array(
            'CancelAPACShippingPackageRequest' => $this->header,
        );
        if ($trackDetail['track_number'] == '') {
            return false;
        }
        $cancelArray['CancelAPACShippingPackageRequest']['TrackCode'] = $trackDetail['track_number'];

        try {

            $response = $this->soap->CancelAPACShippingPackage($cancelArray);
            $logInfo = 'cancelPackage '.$response->CancelAPACShippingPackageResult->Ack.' ';
            if (isset($response->CancelAPACShippingPackageResult->Message)) {
                $logInfo .= $response->CancelAPACShippingPackageResult->Message.' ';
            }
            $logInfo .= $response->CancelAPACShippingPackageResult->Timestamp.' '.$response->CancelAPACShippingPackageResult->InvocationID;
            $this->logError($logInfo);
            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }


    }





    /***
     * getPackage()
     * 用于获取包裹的详细信息
     * 调用接口方法 GetAPACShippingPackage
     *
     */
    public function getPackage($trackDetail) {
        $requestArray = array(
            'GetAPACShippingPackageRequest' => $this->header,
        );
        if ($trackDetail['track_number'] == '') {
            return false;
        }
        $requestArray['GetAPACShippingPackageRequest']['TrackCode'] = $trackDetail['track_number'];

        try {

            $response = $this->soap->GetAPACShippingPackage($requestArray);
            $logInfo = 'getPackage '.$response->GetAPACShippingPackageResult->Ack.' ';
            if (isset($response->GetAPACShippingPackageResult->Message)) {
                $logInfo .= $response->GetAPACShippingPackageResult->Message.' ';
            }
            $logInfo .= $response->GetAPACShippingPackageResult->Timestamp.' '.$response->GetAPACShippingPackageResult->InvocationID;
            $this->logError($logInfo);
            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }




    }



    /****
     * verifyUser();
     * 用于验证用户授权是否成功。
     * 调用接口方法 VerifyAPACShippingUser
     *
     */
    public function verifyUser() {
        $requestArray = array(
            'VerifyAPACShippingUserRequest' => $this->header,
        );

		print_r($this->header);

        try {

            $response = $this->soap->VerifyAPACShippingUser($requestArray);
            $logInfo = 'verifyUser '.$response->VerifyAPACShippingUserResult->Ack.' ';
            if (isset($response->VerifyAPACShippingUserResult->Message)) {
                $logInfo .= $response->VerifyAPACShippingUserResult->Message.' ';
            }
            $logInfo .= $response->VerifyAPACShippingUserResult->Timestamp.' '.$response->VerifyAPACShippingUserResult->InvocationID;
            $this->logError($logInfo);
            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }




    }


    /****
     * getPackageStatus();
     * 获取一个包裹的当前状态
     * 调用接口方法 GetAPACShippingPackageStatus
     * 包裹当前状态，返回 Status可用值： 0  待交运 4  揽收拒绝 5  投递成功 6    投递失败 7  卖家自送 8  上门揽收 9  订单取消 10  运输中
     *					 Note 补充信息
     */
    public function getPackageStatus($trackDetail) {
        $requestArray = array(
            'GetAPACShippingPackageStatusRequest' => $this->header,
        );
        $requestArray['GetAPACShippingPackageStatusRequest']['TrackCode'] = $trackDetail['track_number'];


        try {

            $response = $this->soap->GetAPACShippingPackageStatus($requestArray);

            $logInfo = 'getPackageStatus '.$response->GetAPACShippingPackageStatusResult->Ack.' ';
            if (isset($response->GetAPACShippingPackageStatusResult->Message)) {
                $logInfo .= $response->GetAPACShippingPackageStatusResult->Message.' ';
            }
            $logInfo .= $response->GetAPACShippingPackageStatusResult->Timestamp.' '.$response->GetAPACShippingPackageStatusResult->InvocationID;
            $this->logError($logInfo);
            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }






    }



    /**
     * recreatePackage()
     * 用于重新发货。重新发货成功之后会返回一个新的跟踪号，并且订单会移动到待交运文件夹里面。
     * 调用接口方法 RecreateAPACShippingPackage
     *
     *
     */
    public function recreatePackage($trackDetail) {
        $requestArray = array(
            'RecreateAPACShippingPackageRequest' => $this->header,
        );
        if (''==  $trackDetail['track_number']) {
            return false;
        }
        $requestArray['RecreateAPACShippingPackageRequest']['TrackCode'] = $trackDetail['track_number'];



        try {

            $response = $this->soap->RecreateAPACShippingPackage($requestArray);

            $logInfo = 'recreatePackage '.$response->RecreateAPACShippingPackageResult->Ack.' ';
            if (isset($response->RecreateAPACShippingPackageResult->Message)) {
                $logInfo .= $response->RecreateAPACShippingPackageResult->Message.' ';
            }
            $logInfo .= $response->RecreateAPACShippingPackageResult->Timestamp.' '.$response->RecreateAPACShippingPackageResult->InvocationID;
            $this->logError($logInfo);
            return $response;

        } catch (Exception $e) {
            $this->logError($e);
        }





    }

    /**
     * getTrackCode()
     * 用于获取跟踪号，当订单已经存在时，用于根据ItemID及TransactionID查询一个物品的包裹跟踪号。
     * 调用接口方法 GetAPACShippingTrackCode
     */
    public function getTrackCode($trackDetail) {
        $requestArray = array(
            'GetAPACShippingTrackCodeRequest' => $this->header,
        );
        if (''==  $trackDetail['ebay_item_id']||''==$trackDetail['ebay_transaction_id']) {
            return false;
        }
        $requestArray['GetAPACShippingTrackCodeRequest']['EBayItemID'] = $trackDetail['ebay_item_id'];
        $requestArray['GetAPACShippingTrackCodeRequest']['EBayTransactionID'] = $trackDetail['ebay_transaction_id'];

        try {

            $response = $this->soap->GetAPACShippingTrackCode($requestArray);
            $logInfo = 'getTrackCode '.$response->GetAPACShippingTrackCodeResult->Ack.' ';
            if (isset($response->GetAPACShippingTrackCodeResult->Message)) {
                $logInfo .= $response->GetAPACShippingTrackCodeResult->Message.' ';
            }
            $logInfo .= $response->GetAPACShippingTrackCodeResult->Timestamp.' '.$response->GetAPACShippingTrackCodeResult->InvocationID;
            $this->logError($logInfo);
            return $response;
        } catch (Exception $e) {
            $this->logError($e);
        }


    }


    private function logError($error){
        $logger = new Zend_Log();
        $uploadDir = Ec:: getConfig('logDir');
        $writer = new Zend_Log_Writer_Stream($uploadDir.'EpacketWebServiceVersion2.log');
        $logger->addWriter($writer);
        $logger->info(date('Y-m-d H:i:s').': '.$error." \n");
    }
    public function commitToEpacket($orderCode){
        $order = Service_Orders::getByField($orderCode,"order_code","*");
        $receivingAddress = Service_OrderAddressBook::getByField($order['order_id'],'order_id',"*");
        $country = Service_Country::getByField($receivingAddress["oab_country_id"],"country_id","*");
        $shipToAddress = array(
            'email' => $receivingAddress['oab_email'],
            'company' => $receivingAddress['oab_company'],
            'contact' => $receivingAddress['oab_firstname']." ".$receivingAddress['oab_lastname'],
            'phone' => $receivingAddress['oab_cell_phone'],
            'street' => $receivingAddress['oab_street_address1'],
            'city' => $receivingAddress['oab_city'],
            'province' => $receivingAddress['oab_state'],
            'postcode' => $receivingAddress['oab_postcode'],
            'country' => $country['country_name_en'],
            'country_code' => $country['country_code'],
        );
        $From = Service_CustomerAddressBook::getByCondition(array('cab_type'=>'2','customer_code'=>$order['customer_code']),"*");
        $fromAddress = $From[0];
        $fromCountry = Service_Country::getByField($fromAddress['cab_country_id'],"country_id","*");
        $shipFromAddress = array(
            'contact' => $fromAddress['cab_firstname']." ".$fromAddress['cab_lastname'],
            'company' => $fromAddress['cab_company'],
            'street' => $fromAddress['cab_street_address1']." ".$fromAddress['cab_street_address2'],
            'district' => $fromAddress['cab_suburb'],
            'city' => $fromAddress['cab_city'],
            'province' => $fromAddress['cab_state'],
            'postcode' => $fromAddress['cab_postcode'],
            'country' => $fromCountry['country_name_en'],
            'email' => $fromAddress['cab_email'],
            'mobile' => $fromAddress['cab_cell_phone'],
        );
        $reAddress = Service_CustomerAddressBook::getByCondition(
            array('cab_type'=>'3','customer_code'=>$order['customer_code']),"*");
        $returnCountry = Service_Country::getByField($reAddress[0]['cab_country_id'],'country_id',"*");
        $returnAddress = array(
            'company' => $reAddress[0]['cab_company'],     //公司
            'country' => $returnCountry['country_name'],     //国家 中国
            'province' => $reAddress[0]['cab_state'],   //省
            'city' => $reAddress[0]['cab_city'],           //城市
            'district' => $reAddress[0]['cab_suburb'],   //区
            'street' => $reAddress[0]['cab_street_address1'].' '.$reAddress[0]['cab_street_address2'],       //街道
            'postcode' => $reAddress[0]['cab_postcode'],   //邮编
            'contact' => $reAddress[0]['cab_firstname'].' '.$reAddress[0]['cab_lastname'],     //联系人
        );
        $pickUpAddress = array(
            'email' => 'Dannyzhou@cargofe.com.cn',
            'company' => 'cargo company',
            'country' => '中国',
            'province' => '440000',
            'city' => '440300',
            'district' => '440304',
            'street' => 'JinTian Road',
            'postcode' => '518026',
            'contact' => 'Danny Zhou',
            'mobile' => '0755-5180256',
            'phone' => '13594268155',
        );
        $epacketService = self::getInstance();
        $pickUpType = 1;
        $epacketService->setPickUpType($pickUpType);
        //$appUserId = "fzffzw84";
        //$appPassword = "84089ZG8D1NW2Z4BY85ESXGCOFMUZB1KFLC9LIYXPW6OH2PEL7MTK2013154828";沙箱
        $appUserId = "abing.967";
        $appPassword = "467813WCPT3NSGPMROI29DCWSWO3LFGM26IMW5ZPME32WPXMDMNQ6O201310946";//正式

        $epacketService->setHeader($order['order_code'],$appUserId,$appPassword,$appUserId);
        $epacketService->verifyUser();
        //print_r($epacketService);
        $epacketService->setShipFromAddress($shipFromAddress);
        $epacketService->setShipToAddress($shipToAddress);
        $epacketService->setReturnAddress($returnAddress);
        //if($pickUpType==0){
        $epacketService->setPickUpAddress($pickUpAddress);
        $orderProduct = Service_OrderProduct::getByCondition(array("order_code"=>$order['order_code']),"*");
        foreach($orderProduct as $k=>$v){
            $product = Service_Product::getByField($v['product_id'],"product_id","*");
            $epacketItem = array(
                'skuid' => $product['product_sku'],
                'weight' => 0.1,
                'customs_title_cn' => $product['product_title'],
                'customs_title_en' => $product['product_title_en'],
                'declared_value' => $product['product_declared_value'],
                'currency_code' => '',
                'ebay_email' => '',
                'ebay_buyer_id' => $v['op_ref_buyer_id'],
                'ebay_item_id' => $v['op_ref_item_id'],
                'ebay_item_title' => '',
                'ebay_message' => '',
                'ebay_site_id' => '',
                'ebay_transaction_id' => $v['op_ref_tnx'],
                'note' => '',
                'order_sales_record_number' => '',
                'payment_date' =>date("Y-m-d",strtotime($v['op_ref_paydate'])),
                'paypal_email' => '',
                'paypal_message' => '',
                'posted_qty' => $v['op_quantity'],
                'received_amount' =>$v['op_quantity']*$product['product_declared_value'],
                'sales_record_number' => '',
                'sold_date' => date("Y-m-d",strtotime($v['op_add_time'])),
                'sold_price' => $product['product_sales_value'],
                'sold_qty' => $v['op_quantity'],
            );
            $epacketService->addItem($epacketItem);
        }

        $result = $epacketService->AddPackage();
        if (strtolower($result->AddAPACShippingPackageResult->Ack) == 'success') {
            $row = array(
                'track_number' => $result->AddAPACShippingPackageResult->TrackCode
            );
            $shipOrder = Service_ShipOrder::getByCondition(array('order_code'=>$orderCode),"*");
            if(!empty($shipOrder)){
                Service_ShipOrder::update($row,$orderCode,'order_code');
            }else{
                $soCode = Common_GetNumbers::getCode('shiporder', $order['customer_code'], 'SP');
                $soRow = array(
                    'so_code'=>$soCode,
                    'order_id'=> $order['order_id'],
                    'order_code'=>$order['order_code'],
                    'tracking_number'=>$result->AddAPACShippingPackageResult->TrackCode,
                    'warehouse_id'=>$order['warehouse_id'],
                    'pp_barcode'=>'',
                    'sm_code'=>'',
                    'so_status'=>'0',
                    'so_weight'=>'0',
                    'so_vol_weight'=>'0',
                    'so_length'=>'0',
                    'so_width'=>'0',
                    'so_height'=>'0',
                    'so_declared_value'=>'0',
                    'so_insurance_value'=>'0',
                    'so_shipping_fee'=>'0',
                    'currency_code'=>'',
                    'currency_rate'=>'0',
                    'so_add_time'=>date("Y-m-d H:i:s"),
                    'so_ship_time'=>'',
                    'so_update_time'=>'',
                );
                Service_ShipOrder::add($soRow);
            }

            $TrackDetail = array(
                'PageSize'=>'0',
                'TrackCode'=>$result->AddAPACShippingPackageResult->TrackCode,
            );
            $label = $epacketService->getShippingLabel($TrackDetail);

            $file = APPLICATION_PATH.'/../data/pdf/'.$order['order_code'].".pdf";
            echo "file=".$file."</br>";
            if(!file_exists($file)){
                $fp=fopen($file, "w+");
            }
            file_put_contents($file,$label);

            $ret = array(
                'ask'=>'1',
                'message'=>'订单'.$orderCode." 已成功提交到EPACKET,跟踪号：".$result->AddAPACShippingPackageResult->TrackCode
            );
        } else {
            $ret = array(
                'ask'=>'0',
                'message'=>'订单'.$orderCode."提交到EPACKET失败，原因：".$result->AddAPACShippingPackageResult->Message
            );
        }
        return $ret;
    }

    public function confirmEpacketOrder($orderCode){
        $shipOrder = Service_ShipOrder::getByCondition(array('order_code'=>$orderCode),"*");
        $trackingCode = $shipOrder[0]['tracking_number'];
        $appUserId = "abing.967";
        $appPassword = "467813WCPT3NSGPMROI29DCWSWO3LFGM26IMW5ZPME32WPXMDMNQ6O201310946";//正式
        $epacketService = self::getInstance();
        $epacketService->setHeader($orderCode,$appUserId,$appPassword,$appUserId);
        $confirmEpacket = $epacketService->confirmPackage(array('track_number' =>$trackingCode));
        if (strtolower($confirmEpacket->ConfirmAPACShippingPackageResult->Ack) == 'success') {
            $TrackDetail = array(
                'PageSize'=>'0',
                'TrackCode'=>$trackingCode,
            );
            $label = $epacketService->getShippingLabel($TrackDetail);

            $file = APPLICATION_PATH.'/../data/pdf/'.$orderCode.".pdf";
            if(!file_exists($file)){
                $fp=fopen($file, "w+");
            }
            file_put_contents($file,$label);
            $ret = array(
                'ask'=>'1',
                'message'=>'订单'.$orderCode.'确认成功！'
            );
        }else{
            $ret = array(
                'ask'=>'1',
                'message'=>'订单确认失败！原因：'.$confirmEpacket->ConfirmAPACShippingPackageResult->Message
            );
        }
        return $ret;
    }

    public function cancelEpacketOrder($orderCode){
        $appUserId = "abing.967";
        $appPassword = "467813WCPT3NSGPMROI29DCWSWO3LFGM26IMW5ZPME32WPXMDMNQ6O201310946";//正式
        $epacketService = self::getInstance();
        $epacketService->setHeader($orderCode,$appUserId,$appPassword,$appUserId);
        $shipOrder = Service_ShipOrder::getByCondition(array('order_code'=>$orderCode),"*");
        $trackingCode = $shipOrder[0]['tracking_number'];
        $cancelEpacket = $epacketService->cancelPackage(array('track_number'=>$trackingCode));
        if(strtolower($cancelEpacket->CancelAPACShippingPackageResult->Ack)=='success'){
            $ret = array(
                'ask'=>'1',
                'message'=>"订单 ".$orderCode."取消成功"
            );
        }else{
            $ret = array(
                'ask'=>'0',
                'message'=>"订单 ".$orderCode."取消失败,原因：".$cancelEpacket->CancelAPACShippingPackageResult->Message
            );
        }
        return $ret;
    }
}
