2015-10-15 3 views
0

Как использовать многомерный массив как параметр для SOAP-клиента для создания мыльного запроса? Для моей работы я использовал NuSOAP v1.123.Многомерный массив как один из параметров для запроса SOAP

Код, который ниже работает отлично с простым массивом, но с многомерным не работает.

Так что мой код в SOAP-клиент:

$param_array = array(
    array(
     'var_1' => 1, 
     'var_2' => 2, 
    ), 
    array(
     'var_1' => 3, 
     'var_2' => 4, 
    ), 
); 

$result = $client->call('test', array('param_1' => 123, 'param_2' => $param_array)); 

Мой код в SOAP-сервер:

$server->wsdl->addComplexType(
      'Return_Array', 
      'complexType', 
      'struct', 
      'all', 
      '', 
      array(
       'param_1'     => array('name' => 'param_1', 'type' => 'xsd:int', 'nillable' => 'true'), 
       'param_2'    => array('name' => 'param_2', 'type' => 'xsd:int', 'nillable' => 'true'), 
      ) 
     ); 

     $server->wsdl->addComplexType(
      'ReturnArray', 
      'complexType', 
      'array', 
      'all', 
      '', 
      array(), 
      array(), 
      'tns:Resurn_Array' 
     ); 

$server->wsdl->addComplexType(
    'Array', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
     'var_1' => array('name' => 'var_1', 'type' => 'xsd:int', 'nillable' => 'true'), 
     'var_2' => array('name' => 'var_2', 'type' => 'xsd:int', 'nillable' => 'true') 
); 

     $server->register('test', 
      array('param_1' => 'xsd:int', 'param_2' => 'tns:Array'), 
      array('return' => 'tns:ReturnArray') 
     ); 

    function test($param_1, $param_2) 
    { 
     $data = array(
      'test' => array(
      'param_1' => $param_2['var_1'], 
      'param_2' => $param_2['var_2'], 
      ) 
     ); 

     return $data; 
    } 

С простой массив он отлично работает, но с многомерным - не. Как с этим бороться?

ответ

0

Первый элемент моей функции был неправильным, но пока это не важно. Но описание есть.

Это правильная форма описания:

$server->wsdl->addComplexType(
    'get_string', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
     'text' => array('name' => 'text', 'type' => 'xsd:string', 'nillable' => 'true'), 
    ) 
); 

$server->wsdl->addComplexType(
    'get_array', 
    'complexType', 
    'array', 
    '', 
    'SOAP-ENC:Array', 
    array(), 
    array(array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:get_string[]')), 
    'tns:get_string' 
);