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

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?
 

fixxxer

К.О.
Партнер клуба
Может, для начала, стоит попробовать использовать стандартный SoapClient, а не всякие левые библиотеки?
 

cyborg

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

PHP:
$client->__soapCall("SomeFunction", array($a, $b, $c),
                   array('soapaction' => 'some_action',
                         'uri'        => 'some_uri'));
?>
 

fixxxer

К.О.
Партнер клуба
Там есть SoapVar, кажется оно тебе и надо.

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

А в качество SoapClient мне верится больше чем в качество какой-то левой либы; в крайнем случае можно написать багрепорт на bugs.php.net :)
 

aspire

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