Как остановить PHP SoapClient, преобразовывающий аргументы s1: char в 0 или 1 в запросе - PullRequest
3 голосов
/ 22 сентября 2011

PHP-клиент Soap неправильно обрабатывает аргументы с типом s1: char при построении запроса.Soap API требует либо «Y», либо «N», но в XML-запросе я получаю «0».(Передача истинного Bool приводит к «1», но вместо «Y» это не принимается как API).

Я использую 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 Ответ

1 голос
/ 23 сентября 2011

Вот как я обошел это, хотя я бы хотел узнать, почему SoapClient преобразует эту строку в int.

Вместо «Y» в моем массиве параметров я использовал:

new SoapVar('Y', XSD_ANYTYPE)
...