Nueva pregunta

Pregunta:

Fecha: 29-11-2018 10:21:18 (En Español)

Webservices con arreglo multidimencional de entrada y salida[Resuelta]

Estimados me acabo de inscribir en este foro en el cual espero me puedan ayudar y a futuro poder devolver el favor.

les comento mi problema, estoy creando un servicio que de parametros de entrada recibe un arreglo multidimencional y retorna lo mismo, ahora el problema que tengo es que al momento de ingresar a la función en php ya no tengo el arreglo enviado por el cliente, de alguna forma que no se cual es, se pierde. adjunto dejare el código.

el servicio recibe un arreglo el cual tiene una estructura de un código (string) y una descripción (string)


WEBSERVICES.PHP


include 'nusoap.php';
$server = new soap_server;
$server->configureWSDL('Mi Web Service', 'urn:mi_ws1');
 
// Parametros de entrada
$server->wsdl->addComplexType(  'datos_persona_entrada', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array(
                                	'codigo_repuesto'       => array('name' => 'codigo_repuesto','type' => 'xsd:string'),
                                	'nombre_repuesto'       => array('name' => 'nombre_repuesto','type' => 'xsd:string'))
);
// Parametros de Salida
$server->wsdl->addComplexType(  'datos_persona_salida', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array(
								'codigo_externo_bie'=> array('name' => 'codigo_externo_bie','type'=>'xsd:string'),
								'nombre_repuesto'=> array('name' => 'nombre_repuesto','type'=>'xsd:string'),
								'cantidad'=> array('name' => 'cantidad','type'=>'xsd:boolean'),
								)
);
 
 
$server->register(   'codigos_existentes', // nombre del metodo o funcion
                    array('datos_persona_entrada' => 'tns:datos_persona_entrada'), // parametros de entrada
                    array('return' => 'tns:datos_persona_salida'), // parametros de salida
                    'urn:mi_ws1', // namespace
                    'urn:hellowsdl2#codigos_existentes', // soapaction debe ir asociado al nombre del metodo
                    'rpc', // style
                    'encoded', // use
                    'La siguiente funcion recibe un arreglo multidimensional de codigos de repuestos' // documentation,
                     //$encodingStyle
);



FUNCIÓN PHP acá tengo el problema, ya no existe el arreglo

function codigos_existentes($arreglo_codigo) {
print_r($arreglo_codigo);
}



CLIENTE PHP

$arreglo_codigo = array();
$arreglo_codigo[0] =  array('codigo_repuesto' => '6810986FG1AC', 'nombre_repuesto' => 'descripcion 1');
$arreglo_codigo[1] =  array('codigo_repuesto' => '68109861AC', 'nombre_repuesto' => 'descripcion 2');
$arreglo_codigo[2] =  array('codigo_repuesto' => '68109861ACC', 'nombre_repuesto' => 'descripcion 3');

$params = array( "datos_persona_entrada" => $arreglo_codigo);
$codigos_existentes = $oSoapClient->call("codigos_existentes",$params);


Etiquetas: Votos: 1 - Respuestas: 2 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 06-12-2018 02:47:41 Hola Lester, ante todo bienvenido a la comunidad.

    Te sugiero hacer una prueba, intenta pasar solo un array de datos con $arreglo_codigo, o sea, remplaza:
    $arreglo_codigo[1] =  array('codigo_repuesto' => '68109861AC', 'nombre_repuesto' => 'descripcion 2');
    $arreglo_codigo[2] =  array('codigo_repuesto' => '68109861ACC', 'nombre_repuesto' => 'descripcion 3');
    

    Por esto:
    $arreglo_codigo =  array('codigo_repuesto' => '68109861AC', 'nombre_repuesto' => 'descripcion 2');
    


    Finalmente tienes en $arreglo_codigo un array, y no un array de arrays

    Y verifica si obtienes algo en el print_r. Si obtienes respuesta, modifica la definición "...addComplexType('datos_persona_entrada'...." para recibir un array de arrays

    Prueba y luego nos cuentas, saludos y buen código!
      Votos: 1 - Link respuesta
     
  • Fecha: 07-12-2018 04:21:50 jejej vale por la respuesta, tiene sentido lo que me escribiste no alcanze a realizar esa prueba... pero ya solucione el problema era incorrecta la definición del servicio, adjunto la correcta para ingresar y retornar un arreglo multidimensional


    $server->wsdl->addComplexType('arrayEntrada',
    'complexType',
    'array',
    '', 
    'SOAP-ENC:Array', 
    array(),
    array(
    array('ref' => 'SOAP-ENC:arrayType', 
    'wsdl:arrayType' => 'tns:parametroEntrada[]')
    ),
    'tns:parametroEntrada'
    );
    
    // Parametros de entrada
    $server->wsdl->addComplexType(
    'parametroEntrada',
    'complexType',
    'struct',
    'all',
    '',
    array(
    'codigo_repuesto' => array('name' => 'codigo_repuesto','type' => 'xsd:string'),
    'nombre_repuesto' => array('name' => 'nombre_repuesto','type' => 'xsd:string')
    )
    );
    
    
    
    $server->wsdl->addComplexType(
    	'arraySalida',
    	'complexType',
    	'array',
    	'',
    	'SOAP-ENC:Array',
    	array(),
    	array(
    		array('ref' => 'SOAP-ENC:arrayType','wsdl:arrayType' => 'tns:parametroSalida[]')
    		),
    	'tns:parametroSalida'
    );
    
    $server->wsdl->addComplexType('parametroSalida','complexType','struct','all','',
    array(
    	'codigo_externo_bie'=> array('name' => 'codigo_externo_bie','type'=>'xsd:string'),
    	'nombre_repuesto'=> array('name' => 'nombre_repuesto','type'=>'xsd:string'),
    	'existencia'=> array('name' => 'existencia','type'=>'xsd:int')
    	)
    );
    
    
    
    $server->register('codigos_existentes', // method name
    array('repuestos' => 'tns:arrayEntrada'), // input parameters
    array('return' => 'tns:arraySalida'), // output parameters
    'urn:cotizacion', // namespace
    'urn:cotizacion#codigos_existentes', // soapaction
    'rpc', // style
    'encoded', // use
    'Recibe un arreglo multidimensional ' // documentation
    );
    
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión