Foros del Web » Programando para Internet » PHP »

NuSoap-Arreglos-PHP

Estas en el tema de NuSoap-Arreglos-PHP en el foro de PHP en Foros del Web. Hola Foreanos, tengo el siguiente dilema, tengo que consumir un WSDL con la siguiente estructura -Nombre método, "prueba" <tag> <option> <desc>PRUEBA 1</desc> <valor>1</valor> </option> <option> ...
  #1 (permalink)  
Antiguo 09/06/2016, 06:46
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
NuSoap-Arreglos-PHP

Hola Foreanos, tengo el siguiente dilema, tengo que consumir un WSDL con la siguiente estructura

-Nombre método, "prueba"

<tag>
<option>
<desc>PRUEBA 1</desc>
<valor>1</valor>
</option>
<option>
<desc>PRUEBA 2 </desc>
<valor>3</valor>
</option>
<option>
<desc>PRUEBA 3</desc>
<valor>3</valor>
</option>
</tag>

Tengo problemas para consumir los TAG de OPTION ya que no sé como enviar el arreglo, al repetirse el nombre OPTION cuando genero un arreglo se van pisando y envía sólo el ultimo.

Como lo hago.

$wsdl = new nusoap_client("RUTA WSDL");

***No funciona [paso el TAG OPTION PREVIO ]

$opciones = array("desc" =>array("PRUEBA 1","PRUEBA 2","PRUEBA 3"),
"valor" => array("1","2","3"))

*** No funciona

$opciones[0] = array("option"=>array("desc" =>array("desc"=>"PRUEBA 1","valor"=>1)));
$opciones[1] =array("option"=>array("desc" =>array("desc"=>"PRUEBA 2","valor"=>2)));
$opciones[2] =array("option"=>array("desc" =>array("desc"=>"PRUEBA 3","valor"=>3)));

$respuesta = $wsdl->call("prueba",array("tag"=>$opciones));


Bueno este ejemplo lo realicé acá ya que la estructura es muy parecida pero es mas compleja, si tienen alguna ida favor ayudar
  #2 (permalink)  
Antiguo 09/06/2016, 12:29
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: NuSoap-Arreglos-PHP

Estas equivocado en conceptos, si te proporcionaron un WSDL, lo que vas a consumir es un WebService y el WSDL es un XML que describe la interfaz de entrada (o de llamado) a ese WebService. Investiga mas sobre WebService. Si usas las herramientas adecuadas del lenguaje, podrás consumirlo en pocas lineas. Ejemplos:
Código PHP:
Ver original
  1. $WebService= new SoapClient("http://factulaar.grupolaar.com:9019/ClsWaybill.svc?wsdl",
  2.                     array('trace' => 1,'soap_version' => SOAP_1_1));
  3. $arreglo=array('parametro1'=>$parametro1,'parametro2'=>$parametro2, ...);//PuedenSerVarios
  4. $respuesta = $WebService->__soapCall('CreateWayBill',array($arreglo));
Código PHP:
Ver original
  1. $WebService= new SoapClient("http://factulaar.grupolaar.com:9019/ClsWaybill.svc?wsdl", array('trace' => 1,'soap_version' => SOAP_1_1));    
  2. $wayBill=new WayBill();
  3. $wayBill->ActualWeight=$valor1;
  4. $wayBill->Branch=$valor2;
  5. //etc. Así con el resto de los campos
  6. $arreglo=array('objWayBillDetails'=>$wayBill);
  7. $respuesta = $WebService->__soapCall('CreateWayBill',array($arreglo));

Si te das cuenta en estos ejemplos no desarme el WSDL, ni lo explore como el xml que es, solo lo cargue en la clase SoapClient.
Mira aqui y aqui tambien.

Última edición por abrahamhs; 09/06/2016 a las 12:39
  #3 (permalink)  
Antiguo 09/06/2016, 13:20
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NuSoap-Arreglos-PHP

Cita:
Iniciado por abrahamhs Ver Mensaje
Estas equivocado en conceptos, si te proporcionaron un WSDL, lo que vas a consumir es un WebService y el WSDL es un XML que describe la interfaz de entrada (o de llamado) a ese WebService. Investiga mas sobre WebService. Si usas las herramientas adecuadas del lenguaje, podrás consumirlo en pocas lineas. Ejemplos:
Código PHP:
Ver original
  1. $WebService= new SoapClient("http://factulaar.grupolaar.com:9019/ClsWaybill.svc?wsdl",
  2.                     array('trace' => 1,'soap_version' => SOAP_1_1));
  3. $arreglo=array('parametro1'=>$parametro1,'parametro2'=>$parametro2, ...);//PuedenSerVarios
  4. $respuesta = $WebService->__soapCall('CreateWayBill',array($arreglo));
Código PHP:
Ver original
  1. $WebService= new SoapClient("http://factulaar.grupolaar.com:9019/ClsWaybill.svc?wsdl", array('trace' => 1,'soap_version' => SOAP_1_1));    
  2. $wayBill=new WayBill();
  3. $wayBill->ActualWeight=$valor1;
  4. $wayBill->Branch=$valor2;
  5. //etc. Así con el resto de los campos
  6. $arreglo=array('objWayBillDetails'=>$wayBill);
  7. $respuesta = $WebService->__soapCall('CreateWayBill',array($arreglo));

Si te das cuenta en estos ejemplos no desarme el WSDL, ni lo explore como el xml que es, solo lo cargue en la clase SoapClient.
Mira aqui y aqui tambien.

Gracias por la respuesta, pero, eh trabajo mucho con WSDL, el tema es que la estructura de arreglos que tiene definidael XML, es repetitiva como di en el ejemplo, necesito enviar
- parametro->codigo->valor
- parametro->codigo->valor
- parametro->codigo->valor
- parametro->codigo->valor
- parametro->codigo->valor
- parametro->codigo->valor

No puedo enviarle un arreglo ya que no tiene una estructura con un indice predeterminado, algo más directo

<atributo>
<codigo>A</codigo>
<valor>1</valor>
</atributo>
<atributo>
<codigo>B</codigo>
<valor>2</valor>
</atributo>
<atributo>
<codigo>C</codigo>
<valor>3</valor>
</atributo>

Si te pasan un WSDL con esa estructura y debes consumirlo, como lo haces para indicarle en la llamada enviar el arreglo con datos siendo que cada TAG se llama de igual forma, en Java te crea objetos pero en PHP en manual

¿No sé si me explico bien?

si no es igual a crear esto:

$array = array("atributo" => array("codigo" => "A",
"valor" => "1"),
"atributo" => array("codigo" => "B",
"valor" => "2"));

Si estoy le envío al WSDL sólo enviará el último atributo por un tema de indices de arreglos
  #4 (permalink)  
Antiguo 09/06/2016, 16:29
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: NuSoap-Arreglos-PHP

Bueno, si no pones la url del wsdl, o en su defecto el contenido, esta dificil ayudar, no podemos adivinar.
Por otra parte parece que en el server esa estructura es un mapa (java) o un diccionary (.net)
O podría ser una clase:
Código PHP:
Ver original
  1. $atributo=new Atributo();
  2. $atributo->A="1";
  3. $atributo->B="2";
y cada atributo en un array

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:34.