Denis_Sokolov
Новичок
Здравствуйте. Не могу понять каким образом возможно передать массив значений, что бы в xml запросе он был с одинаковым тегом. Возможно непонятно изъясняюсь, приведу пример:
wsdl сгенерирован с помощью nuSOAP, вот выдержка кода который принимает данные:
Генерится соответствующий кусок wsdl:
Отправляю с помощью soapUI следующие данные:
Все работает замечательно, и в функции получаемые id доступны:
А вот теперь главный вопрос. Отправка из soapUI это конечно же хорошо, но нужно это использовать из php. Отправляю данные следующим образом:
А в результате облом. Посмотрел __getLastRequest() и увидел там:
То есть преобразовало массив в integer. Каким образом я могу корректно передать массив множества значений id? Пробовал указывать в wsdl int[] Но тогда soapUI ругается, и говорит что это неправильно...из php работать будет, но SOAP же не для того придумали что бы ограничиваться запросами из php
Прошу помощи знатоков. Благодарю за внимание.
UPD: Гуглил ровно неделю. Есть только одна подобная тема, где в решении написано: "Проблема решена, wsdl был с ошибкой" И все...
wsdl сгенерирован с помощью nuSOAP, вот выдержка кода который принимает данные:
PHP:
$server->wsdl->addComplexType(
'ArrayOfId',
'complexType',
'array',
'all',
'',
array(
'id' => array('name' => 'id', 'type' => 'xsd:int')
)
);
$server->wsdl->addComplexType(
'GetStatusQuery',
'complexType',
'struct',
'all',
'',
array(
'password' => array('name' => 'password', 'minOccurs' => 1, 'maxOccurs' => 1, 'type' => 'xsd:string'),
'id_array' => array('name' => 'id_array', 'minOccurs' => 1, 'type' => 'tns:ArrayOfId'),
'type' => array('name' => 'type', 'minOccurs' => 0, 'maxOccurs' => 1, 'type' => 'xsd:boolean')
)
);
$server->register('GetStatus',
array('get_status_query' => 'tns:GetStatusQuery'),
array('get_status_response' => 'tns:GetStatusResponse'),
'urn:SmsService',
'urn:SmsService#GetStatus',
'rpc',
'encoded'
);
PHP:
<xsd:complexType name="ArrayOfId">
<xsd:all>
<xsd:element name="id" type="xsd:int"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="GetStatusQuery">
<xsd:all>
<xsd:element name="password" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="id_array" type="tns:ArrayOfId" minOccurs="1"/>
<xsd:element name="type" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>
PHP:
<password>mypass</password>
<id_array xsi:type="urn:ArrayOfId" xs:type="type:ArrayOfId">
<id>22</id>
<id>23</id>
<id>24</id>
</id_array>
PHP:
$response['id_array']['id'][0] // 22
$response['id_array']['id'][1] // 23
$response['id_array']['id'][2] // 24
PHP:
$client->GetStatus(array('password'=>'mypass', 'id_array'=>array('id'=>array(22, 23, 24))));
PHP:
<password xsi:type="xsd:string">mypass</password>
<id_array xsi:type="ns1:ArrayOfId">
<id xsi:type="xsd:int">1</id>
</id_array>

UPD: Гуглил ровно неделю. Есть только одна подобная тема, где в решении написано: "Проблема решена, wsdl был с ошибкой" И все...