Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP SOAP客户端进行枚举验证,导致请求为空_Php_Web Services_Soap_Wsdl - Fatal编程技术网

使用PHP SOAP客户端进行枚举验证,导致请求为空

使用PHP SOAP客户端进行枚举验证,导致请求为空,php,web-services,soap,wsdl,Php,Web Services,Soap,Wsdl,使用包含受限枚举的参数进行SOAP调用时遇到问题。以下是我的WSDL的相关部分(方法、输入类型和枚举): 最后,这里是正在发送的实际请求(请注意空正文): ABC123 使用者 显然,当发送到方法的数据不符合WSDL的约束时,PHP的SOAP客户端什么也不发送?即使如此,我发送的数据对我来说仍然有效。我遗漏了什么?确保禁用了wsdl缓存,以确保客户端获取真实的wsdl文档(而不是缓存的文档)。 <s:element name="createMagnetMailMessage">

使用包含受限枚举的参数进行SOAP调用时遇到问题。以下是我的WSDL的相关部分(方法、输入类型和枚举):

最后,这里是正在发送的实际请求(请注意空正文):


ABC123
使用者

显然,当发送到方法的数据不符合WSDL的约束时,PHP的SOAP客户端什么也不发送?即使如此,我发送的数据对我来说仍然有效。我遗漏了什么?

确保禁用了wsdl缓存,以确保客户端获取真实的wsdl文档(而不是缓存的文档)。
<s:element name="createMagnetMailMessage">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="message" type="tns:MessageDetails" />
      </s:sequence>
    </s:complexType>
  </s:element>

  <s:complexType name="MessageDetails">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="characterSet" type="tns:CharacterSet" />
    </s:sequence>
  </s:complexType>

  <s:simpleType name="CharacterSet">
    <s:restriction base="s:string">
      <s:enumeration value="Western" />
      <s:enumeration value="International" />
    </s:restriction>
  </s:simpleType>
</s:element>
$options = array('trace' => true, 'exceptions' => true, 'connection_timeout' => 60);
$client = new SoapClient('https://example.com/mmapi.asmx?wsdl', $options);

// ... stuff to add authentication header ...

$data = array();
$data['characterSet'] = 'International';

try {
    $request = $client->createMagnetMailMessage($data);
} catch(Exception $ex) {
    echo 'ERROR: '.$ex->getMessage();
}

var_dump($client->__getLastRequest());
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.magnetmail.net/">
  <SOAP-ENV:Header>
    <ns1:mmAuthHeader>
      <ns1:sessionId>ABC123</ns1:sessionId>
      <ns1:user_id>USER</ns1:user_id>
    </ns1:mmAuthHeader>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns1:createMagnetMailMessage/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>