2012-10-23 18 views
0

我需要創建一個SOAP請求,看起來像這樣:SOAP的錯誤:編碼:對象沒有「起始日期」屬性

<s:element name="GetOrders"> 
<s:complexType> 
    <s:sequence> 
    <s:element minOccurs="0" maxOccurs="1" name="Token" type="s:string"/> 
    <s:element minOccurs="0" maxOccurs="1" name="Context" type="s:string"/> 
    <s:element minOccurs="1" maxOccurs="1" name="StartDate" type="s:dateTime"/> 
    <s:element minOccurs="1" maxOccurs="1" name="EndDate" type="s:dateTime"/> 
    <s:element minOccurs="1" maxOccurs="1" name="IncludeFulfilledOrders" type="s:boolean"/> 
    <s:element minOccurs="0" maxOccurs="1" name="ProductNumber" type="s:string"/> 
    </s:sequence> 
</s:complexType> 
</s:element> 

我創建了一個變量類:

class GetOrders { 
    public $Token = "THE_TOKEN"; // string 
    public $Context='THE_CONTEXT'; // string 
    public $StartDate=""; // dateTime 
    public $EndDate=""; // dateTime 
    public $IncludeFulfilledOrders=true; // boolean 
    public $ProductNumber=""; // string 
} 

運行SOAP調用該函數如下:

public function GetOrders(GetOrders $parameters) { 
return $this->__soapCall('GetOrders',array('parameters'=>array($parameters)),  array(
     'uri' => 'http://www.domain.net/', 
     'soapaction' => '' 
     ) 
); 
} 

,我發現了錯誤: 的SOAPFault excepti於:[客戶] SOAP的錯誤:編碼:對象沒有「起始日期」在...

財產這裏是$參數我傳遞的的var_dump:

object(GetOrders)#1 (6) { 
    ["Token"]=> 
    string(17) "THE_TOKEN" 
    ["Context"]=> 
    string(7) "THE_CONTEXT" 
    ["StartDate"]=> 
    string(25) "2012-09-01T00:00:00-05:00" 
    ["EndDate"]=> 
    string(25) "2012-09-30T00:00:00-05:00" 
    ["IncludeFulfilledOrders"]=> 
    bool(true) 
    ["ProductNumber"]=> 
    string(10) "P-PRODUCT" 
} 

我似乎無法找出StartDate的問題是什麼。我相信這個格式是正確的。我不太瞭解SOAP,但是我很抱歉如果這是一個新問題。

謝謝!

回答

0

原來我有功能在它的錯誤被扔這一請求。

這是函數應該如何讀取的。

public function GetOrders(GetOrders $parameters) { 
return $this->__soapCall('GetOrders',array('parameters'=>$parameters),  array(
     'uri' => 'http://www.domain.com/', 
     'soapaction' => '' 
     ) 
); 
} 

注意數組('parameters'=> $ parameters)與上面不同。

它總是很少...

0

格式可能是錯誤的。請檢查您是否以正確的格式發送數據。另外,請檢查生成的存根是否按照WSDL定義生成。

您可以登錄使用

public function __doRequest($request, $location, $action, $version, $one_way = 0) 
    { 
     // Add code to inspect/dissect/debug/adjust the XML given in $request here 

     // Uncomment the following line, if you actually want to do the request 
     // return parent::__doRequest($request, $location, $action, $version); 
     $dom = new DomDocument('1.0', 'UTF-8'); 
    $dom->preserveWhiteSpace = false; 
    try { 
     $dom->loadXML($request); 

    } catch (DOMException $de) { 
     die ('Parse error with code ' . $de->code); 
    } 
    $request = $dom->saveXml(); 
    return parent::__doRequest($request, $location, $action, $version); 

    } 
+0

我直接從WSDL定義中生成了php類。我從來沒有使用__doRequest函數。我會傳遞給$ request變量的是什麼?它不會是真正的XML嗎?這需要我整天寫出和測試。我所擁有的函數應該將數組解析爲XML。 – tomjung

相關問題