如何在请求中停止PHP SoapClient将s1:char参数转换为0或1

时间:2011-09-22 10:14:13

标签: php xml soap soap-client

PHP的Soap客户端在构建请求时似乎正在处理类型为s1:char的参数。 Soap API需要'Y'或'N',但在请求XML中我得到'0'。 (传递Bool的结果为'1',但不接受作为API代替'Y')。

我正在使用PHP版本5.3.8与本机Soap客户端

这是我的PHP

$this->soapClient = new SoapClient( $client->wsdl,
  array(
    'soap_version' => SOAP_1_2,
    'trace' => true
  )
);

$result = $this->soapClient->SomeSoapMethod(array(
  'sSessionKey'        => $sessionKey,
  // other string and int args that work fine here
  'cReturnNonSeats'    => 'Y' // API wants 'Y' or 'N'
));

请求XML中的相关XML节点:

<ns1:cReturnNonSeats>0</ns1:cReturnNonSeats>

来自WSDL:

    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="cReturnNonSeats" type="s1:char" />
      </s:sequence>
    </s:complexType>

如果不手动构建XML,有没有办法控制这些参数是如何进行类型转换的呢?

1 个答案:

答案 0 :(得分:1)

这就是我如何解决它虽然我现在想为什么SoapClient将该字符串转换为int。

我的参数数组中没有'Y',而是使用了:

new SoapVar('Y', XSD_ANYTYPE)