2012-01-03 13 views
3

Zend_Soap_Clientを使用してWebサービスを呼び出したいとします。Zend_Soap_Client経由で複合型を送信するには?

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

問題は、WSDLで複合型であるdetailsパラメータ、である:これは、関連するコードです。 $transactionDetailsには、複合型の(空ではない)要素を含む配列が含まれており、これはvar_dump()に表示されます。以前は、その要素をプロパティとして持つPHPクラスを使用しようとしました。どちらの場合でも、SOAPクライアントが実際に送信するものは次のとおりです。

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

私は間違っていますか?

UPDATE:私は、問題の原因は複合型がparmeterに対して宣言ということだと思うは、いくつかの拡張型がWSDLに存在し、私はそれらの拡張型のいずれかを使用したいの基本型、です。私は、Zend_Soap_Clientは基本型に存在しない要素をすべて認識しないと考えています。これを回避する方法はありますか?

答えて

1

解決策は、Zend_Soap_Clientが拡張する標準のPHP SOAPクライアントにあります。 SoapVarクラスを使用すると、パラメータをラップし、使用する実際の型を指定できます。私がしなければならなかったのは、$transactionDetailsとこのコードのPHPクラスを使用することに戻ります。

$params->details = new SoapVar($transactionDetails, 
    SOAP_ENC_OBJECT, get_class($transactionDetails), $namespace); 
関連する問題