nusoap: не получается тип short

  • Автор темы Автор темы cyborg
  • Дата начала Дата начала

cyborg

Новичок
Кусок из WDSL:

PHP:
<s:element name="ReceiveMT">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="Mo_ConcentratorId" type="s:int"/>
      <s:element minOccurs="0" maxOccurs="1" name="UserId" type="s:string"/>
      <s:element minOccurs="0" maxOccurs="1" name="MessageOut" type="s:string"/>
      <s:element minOccurs="1" maxOccurs="1" name="TelcoId" type="s:short"/>
      <s:element minOccurs="1" maxOccurs="1" name="FeeTypeId" type="s:short"/>
      <s:element minOccurs="1" maxOccurs="1" name="MsgTypeId" type="s:short"/>
      <s:element minOccurs="0" maxOccurs="1" name="PrefixId" type="s:string"/>
    </s:sequence>
  </s:complexType>
</s:element>

Делаю вызов

PHP:
require_once('nusoap/nusoap.php');
$client = new nusoap_client($url);

$params = array(
         'Mo_ConcentratorId' => $MO_ConcentratorId,
         'UserId' => $UserId,
         'MessageOut' => $MessageOut,
         'TelcoId' => $TelcoId,
         'FeeTypeId' => 2,
         'MsgTypeId' => 0,
         'PrefixId' => $PrefixId
);

$result = $client->call(
      'ReceiveMT',
      $params,
      'http://tempuri.org/',
      'http://tempuri.org/ReceiveMT'
);

В результате параметры, котороые должны быть типом short передаются как int, видимо потому что нет в PHP типа такого. Пробовал задать тип через soapval, то же самое....

PHP:
$params = array(
...
         'TelcoId' => new soapval('TelcoId', 'xsd:short', $TelcoId),
...
);

Может кто-то знает решение, как вызвать с типом short?
 
Может, для начала, стоит попробовать использовать стандартный SoapClient, а не всякие левые библиотеки?
 
Почему левые? Тут целая статья была про использование NuSOAP... Судя по примерам вызова там будет та же проблема, нужно как то принудительно тип указать, которого нет в PHP

PHP:
$client->__soapCall("SomeFunction", array($a, $b, $c),
                   array('soapaction' => 'some_action',
                         'uri'        => 'some_uri'));
?>
 
Там есть SoapVar, кажется оно тебе и надо.

Статьи тут столетней давности.

А в качество SoapClient мне верится больше чем в качество какой-то левой либы; в крайнем случае можно написать багрепорт на bugs.php.net :)
 
Присоединяюсь к fixxxer, если автор воспользовался родным SoapClient, то этой проблемы больше чем уверен не было.
Притом вызывать функции можно не только через __soapCall, а и так :
PHP:
$res = self::$instance->ПроверитьСтатусЗаказа(
		array(
			"СписокЗаказов"=>$mass
			)
	);
Не могу сказать что проблемы этой не будет, но когда то заходил на msdn в описание технологии soap, то там было написано что библиотеки которые реализуют обмен через soap поддержуют преобразование типов.
 
Сверху