2010-09-21 71 views
2

我想調用一個只有WSDL文件的Web服務。我會與一般所替代上下文敏感的名稱列表從WSDL文件的重要位:使用包含WSDL中的complexType的PHP訪問SOAP Webservice

功能我想打電話:

<wsdl:operation name="myFunction"> 
    <wsdl:input message="ns:myFunctionRequest" wsaw:Action="urn:myFunction"/> 
    <wsdl:output message="ns:myFunctionResponse" wsaw:Action="urn:myFunctionResponse"/> 
</wsdl:operation> 

功能的描述:

<xs:element name="myFunction"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" name="param0" nillable="true" type="xs:string"/> 
     <xs:element minOccurs="0" name="param1" nillable="true" type="somens:MyType"/> 
     <xs:element minOccurs="0" name="param2" nillable="true" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

'MyType'的描述:

<xs:complexType name="MyType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="date1" nillable="true" type="xs:dateTime"/> 
     <xs:element minOccurs="0" name="date2" nillable="true" type="xs:dateTime"/> 
     <xs:element minOccurs="0" name="string1" nillable="true" type="xs:string"/> 
     <xs:element minOccurs="0" name="int1" nillable="true" type="xs:int"/> 
     <xs:element minOccurs="0" name="int2" nillable="true" type="xs:int"/> 
    </xs:sequence> 
</xs:complexType> 

我在想我的PHP代碼看起來有點像e這:

$client = new SOAPClient('my soap URL'); 

$result = $client->setState(array('param0'=>'bla', 'param1'=><undecided>, 'param2'=>'bla'); 

我的問題是什麼放在未定部分。這應該是一個將複雜類型中的名稱映射到值的數組嗎?還是應該是一個我用相應類型的字段來定義自己的類?我目前沒有一個好的試驗場來嘗試這個方法,我希望能夠在我確實可以使用之前繼續前進。

我看到很多與SOAP無關的問題,所以我希望我會幸運:)。如果我碰巧找到自己,我當然會分享我的結果。

提前致謝!

回答

2

以我的經驗,你需要一個對象而不是數組,但stdClass就足夠了,這樣你就可以只投一個數組反對,如果它使生活更輕鬆:

$client->myFunction(
    'bla', 
    (object)array(
     'date1' => '2010-01-01 00:00:00', 
     'date2' => '2010-01-02 00:00:00', 
     'string1' => 'foobar', 
     'int1' => 1, 
     'int2' => 2 
    ), 
    'bla'); 
+0

謝謝!這非常簡潔,重點突出。正是我需要的。我會在這裏再次發表評論,以確認它在我必須有能力進行測試時纔有效。 – 2010-09-22 06:02:00

+0

我測試過它,它工作。 – 2010-10-04 07:28:38

+0

去了霍倫和丹克傑克沃爾德貝萊夫德黑德姆,甚至是尼特,迪特哈特斯尼特伊德萊恩的赫德和其他人; – Wrikken 2010-10-04 18:05:00