2012-01-03 28 views
3

我想使用Zend_Soap_Client調用webservice。這是相關的代碼:如何通過Zend_Soap_Client發送複雜類型?

$params = new stdClass(); 
    $params->transactionId = $transactionId; 
    $params->transactionState = $transactionState; 
    $params->details = $transactionDetails; 
    var_dump($params->details); 
    try { 
     $this->_soapClient->updateTransaction($params); 
    } 

的問題是與details參數,它是在WSDL的複雜類型。 $transactionDetails包含一個帶有複雜類型(非空)元素的數組,這在var_dump()中可見。以前,我嘗試使用一個帶有元素作爲屬性的PHP類。在這兩種情況下,什麼SOAP客戶端實際上將是這樣的:

<SOAP-ENV:Body> 
    <ns1:UpdateTransactionRequest> 
     <transactionId>45</transactionId> 
     <transactionState>SUCCESS</transactionState> 
     <details/> 
    </ns1:UpdateTransactionRequest> 
</SOAP-ENV:Body> 

我在做什麼錯?

更新:我認爲問題的原因是爲parmeter聲明的complexType是基類型,其中幾種擴展類型存在於WSDL中,我想使用其中一種擴展類型。我猜Zend_Soap_Client不識別任何不存在於基本類型中的元素,這就是所有元素。有沒有解決的辦法?

回答

1

解決方案在於Zend_Soap_Client擴展的標準PHP SOAP客戶端。 SoapVar類允許您包裝參數並指定要使用的實際類型。我所要做的是回到使用PHP類$transactionDetails和此代碼:

$params->details = new SoapVar($transactionDetails, 
    SOAP_ENC_OBJECT, get_class($transactionDetails), $namespace); 
相關問題