PHP SOAP 服务器无法读取输入值(返回 empy)


PHP SOAP Server fail to read input values (return empy)?

我已经编写了肥皂服务器,肥皂客户端和wsdl文件。当我调用函数 soap 服务器无法识别输入时。有人可以帮我解决这个问题吗?

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>
肥皂客户端,

肥皂客户端中,我正在尝试访问关闭帐户功能。该函数有两个参数。

$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();

在肥皂服务器中,当我尝试返回$accountNumber它显示值名称"对象"。如果我尝试访问$accountHolder它会返回空白。

为什么我的 SOAP 服务器无法读取输入值。 请有人帮助我。

您正在向函数传递一个数组,但它需要两个不同的单独参数:

试试这个:

function closeAccount($array){
$value = array('status'=>$array['accountNumber']);
    return $value;
}

客户端输入作为"对象数组"接收到服务器 因此,请使用以下方式读取服务器中的值,$array->帐户持有人

function closeAccount($array) {
    $value = array('status' => $array->accountHolder);
    return $value;
}