<?php
/**
 * Created by JetBrains PhpStorm.
 * User: user
 * Date: 14-5-21
 * Time: 下午4:50
 * To change this template use File | Settings | File Templates.
 */
class Service_SfexpressService extends Common_Service
{
    private $param = array();

    private $PostMethod = "POST";

    private $head = '7552965620';
    //private $checkword = 'lp3Kv3QVwnbRWblK';
    private $checkword ='TYiJR3TbiepZ3kDuwLcuZOxc8JxweYj7';
    private $DeleteMethod = "DELETE";
    private $postHeader = array("Content-type: text/xml");

    //private $validateUrl = "http://218.17.248.244:11080/bsp-oisp/sfexpressService";
    private $validateUrl = "http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService";
    //private $orderUrl = "http://218.17.248.244:11080/bsp-oisp/expressService";


    public static function getOrderContent($orderCode){
        $orderRow = Service_Orders::getByField($orderCode,'order_code',"*");
        $orderReceiveAddress = Service_OrderAddressBook::getByCondition(array('order_code'=>$orderCode,'oab_type'=>'0'),"*");
        $receiver = $orderReceiveAddress[0];
        $receiAddress = $receiver['oab_street_address1'];
        if($receiver['oab_street_address2']!=""){
            $receiAddress = $receiAddress." ".$receiver['oab_street_address2'];
        }
        $reCountry = Service_Country::getByField($receiver['oab_country_id'],"country_id","*");
        $orderProduct = Service_OrderProduct::getByCondition(array('order_code'=>$orderCode),"*");
        //快件类型
        if ($orderRow['sm_code']=="SF-RUPT") {
            $express_type=9;
        }else if($orderRow['sm_code']=="SF-RUPR"){
            $express_type=10;
        }else{
            $express_type=29;
        }
        $city='';
        //城市代码
        switch ($reCountry['country_code']) {
            case 'RU':
                $city='MOW';
                break;
            case 'LT':
                $city='VNO';
                break;
            case 'LV':
                $city='RIX';
                break;
            case 'EE':
                $city='TLL';
                break;
            case 'SE':
                $city='ARN';
                break;
            case 'NO':
                $city='OSL';
                break;
            case 'FI':
                $city='HEL';
                break;
            case 'BY':
                $city='MSQ';
                break;
            case 'UA':
                $city='KBP';
                break;
            case 'PL':
                $city='WAW';
                break;
            default:
                break;
        }
        $cargo='';
        $totalWeight=0;
        $totalValue=0;
        $withBatty=0;
        foreach($orderProduct as $opk=>$opv){
            $p = Service_Product::getByField($opv['product_id'],"product_id","*");
            $weight = round($p['product_weight'],3);
            $cargo.="<Cargo name='".$opv['product_title_en']."' count='".$opv['op_quantity']."' unit='".$p['pu_code']."' weight='".$opv["op_quantity"]*$weight."' amount='".$opv['op_purpose_declared_value']."' currency='".$p['currency_code']."' source_area='CN'></Cargo>";
            $totalValue+=$opv['op_purpose_declared_value']*$opv['op_quantity'];
            $totalWeight+=$weight;
            if ($p['with_battery']==1) {
               $withBatty="{{isbat}}";            
            }
        }
        if ($withBatty==0) {
            $withBatty=$orderRow['remark'];
        }

        $xmlData = "<Request lang='zh-CN' service='OrderService'>
        <Head>7552965620</Head>
        <Body>
        <Order orderid=\"".$orderRow['order_code']."\" express_type=\"".$express_type."\" j_company=\"Globex eServices Limited\" j_contact=\"Carina\" j_tel=\"0755-21629099\" j_mobile=\"18676724516\" j_address=\"4/F, Block 5,Qianhaiwan Free Trade Port Area,No.53  Linhai Rd. Nanshan  District, Shenzhen, P.R.C.\" d_company=\"".$receiver['oab_company']."\" d_contact=\"".$receiver['oab_firstname']."\" d_tel=\"".$receiver['oab_phone']."\" d_mobile=\"".$receiver['oab_cell_phone']."\" d_address=\"".$receiAddress."\" parcel_quantity=\"1\" pay_menthod=\"1\" j_province=\"guangdong\" j_city=\"shenzhen\" d_province=\"".$receiver['oab_state']."\" d_city=\"".$receiver['oab_city']."\" declared_value=\"".$totalValue."\" declared_value_currency='USD' custid='7552965620' j_country='CN' j_county='nanshan' j_shippercode='E755AP' j_post_code='518000' d_country=\"".$reCountry['country_code']."\" d_county=\"".$receiver['oab_suburb']."\" d_deliverycode=\"".$city."\" d_post_code=\"".$receiver['oab_postcode']."\" cargo_total_weight=\"".$totalWeight."\" remark=\"".$withBatty."\" >".
            $cargo.
            "</Order>
        </Body>
        </Request>";  
        //$md5=base64_encode(substr(md5($xmlData."lp3Kv3QVwnbRWblK"),0,16)); // 16位MD5加密       
        //$md5=base64_encode(md5($xmlData."lp3Kv3QVwnbRWblK"));
        //$xml=array('xml'=>$xmlData,'verifyCode'=>$md5);
        //$xml=array('xml'=>$xmlData);
        return $xmlData;
    }

    public function validate($xml){
        $param=array('xml'=>$xml,'verifyCode'=>base64_encode(md5($xml.$this->checkword,true)));
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->validateUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //curl_setopt($ch, CURLOPT_HTTPHEADER, $this->head);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $response = curl_exec($ch);
        //print_r($response);
        if(curl_errno($ch)){
            print_r(curl_error($ch));
        }
        $obj = simplexml_load_string($response);
        $result = Common_Common::objectToArray($obj);
        if(empty($result)){
            echo $response."</br>";
        }
        curl_close ($ch);
        return $result['Head']=='OK'?$result['Body']['OrderResponse']:$result['ERROR'];
    }

}
