<?php
class Service_RumalApiProcess{
   private $url='http://47.88.2.1:8080/rumall/services/rumallInter?wsdl';//测试地址
   private $user='SFTEST';
   private $token='SFTEST';
   private $singKey='BHKDNIAO';//'%E4%BF%9D%E5%AE%8F%E4%BB%93%E5%BA%93';
   private $checkWord='09cec52b819340d488af1080d3d6f6d5';
   public $sendXml='';
   private $client='';
   private $labelUrl='http://47.88.2.1:8080/rumall/exportWaybill';//获取标签地址
//   private $logisticType=array(
//       'Rumall-RU-EP'=>'俄罗斯电商专递',
//       'Rumall-RU-G'=>'俄罗斯挂号',
//   );
   public $method=array(
       'confirmSenderInfo',//订单确认接口，
       'queryRoute',//路由查询
   );
    private $logisticType=array(
       'Rumall-RU-EP'=>'29',
       'Rumall-RU-G'=>'10',
   );
   public function __construct() {
       $this->client=new SoapClient($this->url,array('trace'=>'1'));
   }
   public function makeOrderXml($order){
       if(is_string($order)){
           $orderInfo=Service_Orders::getByField($order, 'order_code');
       }else{
           $orderInfo=$order;
       }
       $declarValue=Service_OrderProduct::sumPurposeDeclaredValue($orderInfo['order_code']);
       //$sendInfo=  Service_OrderAddressBook::getByWhere(array('order_code'=>$orderInfo['order_code'],'oab_type'=>'0'));
       $sendArray=array(
           'Head'=>array(
               'SingKey'=>$this->singKey,
               'CheckWord'=>$this->checkWord,
               'OrderNum'=>$orderInfo['order_code'],
               'TradeOrderNum'=>$orderInfo['reference_no'],//100011112002测试用的,200000088001 603467921907 603467921907 
               'LogisticsType'=>$this->logisticType[$orderInfo['sm_code']],
               'DeclaredValue1'=>$declarValue,
               'DeclaredValue2'=>$declarValue,
           ),
           'OrderSenderInfo'=>array(
               'SenderCompany'=>'GLOBEX E-SERVICES(HK) LIMITED',//$sendInfo['oab_company'],
               'SenderName'=>'Jane Lin',//$sendInfo['oab_lastname'].$sendInfo['oab_firstname'],
               'SenderEmail'=>'janelin@globex.cn',//$sendInfo['oab_email'],
               'SenderZipCode'=>'999077',//$sendInfo['oab_postcode'],
               'SenderMobile'=>'85224190251',//$sendInfo['oab_phone'],
               'SenderPhone'=>'85236102720',//$sendInfo['oab_cell_phone'],
               'SenderCity'=>'HONGKONG',//$sendInfo['oab_city'],
               'SenderAddress'=>'FLAT/RM A3, G/F WING LOI INDUSTRIAL BUILDING , 8-14 WING LAP STREET, KWAI CHUNG, NT',//$sendInfo['oab_street_address1'].$sendInfo['oab_street_address2'],
           )
       );
       ECHO "<pre/>";
       print_r($sendArray);
       $xml=self::assocArrayToXML($sendArray);
       $this->sendXml=$xml;
   }
    public function genaratLabel($orderCode){
            $requestArray=array(
                'Checkword'=>$this->checkWord,
                'CompanyCode'=>$this->singKey,
                'OrderId'=>$orderCode,
            );
          $requestXml=self::assocArrayToXML($requestArray, 0, 0, 'ExportWaybill');
          $request=array(
              'xml'=>$requestXml
          );
         return  Common_Common::http_post($this->labelUrl, 30, $request);
          
    }
    public function getTrackeTracking($orderId){
        $request=array(
            'ID'=>$orderId,
        );
        $requestXml=self::assocArrayToXML($request,0,0,'QueryRoute');
        $return=$this->client->queryRoute($requestXml);

        return  self::xmlToArray($return);
    }
    
   public static function assocArrayToXML($arr,$dom=0,$item=0,$root='Request')
    {
    if (!$dom){
        $dom = new DOMDocument("1.0",'utf-8');
    }
    if(!$item){
        $item = $dom->createElement($root); 
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
            
        }else {
            self::assocArrayToXML($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();

    } 
   public  function xmlToArray($xml){
       $xmlObj=  simplexml_load_string($xml);
       return Common_Common::objectToArray($xmlObj);
       
   }
   public function __call($method,$args){
       try{
            return call_user_func_array(array($this->client,$method),$args);
        
       }catch(Exception $e){
          return $e->getMessage();
       }
   }
public static function objectToArray($obj) {
        $arr = '';
        $_arr = is_object($obj) ? get_object_vars($obj) : $obj;
        if (is_array($_arr)) {
            foreach ($_arr as $key => $val) {
                $val = (is_object($val)) ? self::objectToArray($val) : $val;
                $arr[$key] = $val;
            }
        }
        return $arr;
    }
}