我寫了soap服務器,soap客戶端和wsdl文件。當我調用一個函數時,soap服務器無法識別輸入。有人可以幫我解決這個問題。PHP SOAP服務器無法讀取輸入值(返回empy)?
WSDL文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/accounts/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="accounts" targetNamespace="http://www.example.org/accounts/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/accounts/">
<xsd:element name="addAcount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addAcountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="accountNumber" type="xsd:string"></xsd:element>
<xsd:element name="accountHolder" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="status" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="addAcountRequest">
<wsdl:part element="tns:addAcount" name="parameters"/>
</wsdl:message>
<wsdl:message name="addAcountResponse">
<wsdl:part element="tns:addAcountResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="closeAccountRequest">
<wsdl:part name="parameters" element="tns:closeAccount"></wsdl:part>
</wsdl:message>
<wsdl:message name="closeAccountResponse">
<wsdl:part name="parameters" element="tns:closeAccountResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="accounts">
<wsdl:operation name="addAcount">
<wsdl:input message="tns:addAcountRequest"/>
<wsdl:output message="tns:addAcountResponse"/>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<wsdl:input message="tns:closeAccountRequest"></wsdl:input>
<wsdl:output message="tns:closeAccountResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="accountsSOAP" type="tns:accounts">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addAcount">
<soap:operation soapAction="http://www.example.org/accounts/addAcount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<soap:operation soapAction="http://www.example.org/accounts/closeAccount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="accounts">
<wsdl:port binding="tns:accountsSOAP" name="accountsSOAP">
<soap:address location="http://localhost:8888/testing/wsdl/service.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
SOAP客戶端,在SOAP客戶端我試圖訪問關閉帳戶功能。該功能有兩個參數。
$wsdl = 'http://localhost:8888/testing/wsdl/service.php?wsdl';
$options = array('trace' => TRUE);
$client = new SoapClient($wsdl, $options);
$values = array(
'accountNumber' => 'sdfsd',
'accountHolder' => 'sfsdf'
);
$response = $client->closeAccount($values);
echo "<pre>";
print_r($response);
echo "</pre>";
SOAP服務器,
class Exam {
function closeAccount($accountNumber, $accountHolder){
$value = array('status'=>$accountNumber);
return $value;
}
}
$server = new SoapServer("http://localhost:8888/testing/wsdl/addAccount.wsdl");
$server->setClass('Exam');
$server->handle();
在SOAP服務器,當我嘗試返回$使用accountNumber它顯示數值名稱 「對象」。如果我嘗試訪問$ accountHolder,它將返回空白。
爲什麼我的soap服務器無法讀取輸入值。請有人幫助我。
我曾嘗試它不工作,這是輸出, stdClass的對象 ( [狀態] =>對象 ) – user3099298
我嘗試第二個選項,但它返回這個 「致命錯誤:未捕獲的SOAPFault例外:SOAP-ENV:Server]不能使用類型爲stdClass的對象作爲排序」 – user3099298
$客戶端是SoapClient類的實例化。 closeAccount函數屬於考試類。 –