Foros del Web » Programando para Internet » PHP »

Servicios web

Estas en el tema de Servicios web en el foro de PHP en Foros del Web. Hola a todos. Estoy empezando a consumir servicios web con PHP y tengo un problema inicial. Me ha facilitado la URL del servicio y los ...
  #1 (permalink)  
Antiguo 18/06/2012, 10:43
Avatar de anavarroegea  
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Servicios web

Hola a todos. Estoy empezando a consumir servicios web con PHP y tengo un problema inicial. Me ha facilitado la URL del servicio y los parametros que le tengo que pasar, pero claro, el servicio web me devuelve unos datos en formato XML o array? cierto? Lo que tengo claro es que no se la forma de recoger los datos porque la consulta la llego a ejecutar sin problemas pero me sirve de poco porque no llego a entender la estructura.

Un saludo y muchas gracias por anticipado
  #2 (permalink)  
Antiguo 18/06/2012, 10:53
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Servicios web

Si te puedes conectar y el servidor te devuelve datos en xml, esos datos puedes manejarlos como objetos si los procesas con simplexml de php
  #3 (permalink)  
Antiguo 20/06/2012, 12:09
Avatar de anavarroegea  
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Servicios web

Perdona pero no he especificado. Ahora mismo no me devuelve nada. El desarrollador del servicio web me dice que me devolvera una estructura XML pero actualmente no me hace nada. Me ha dicho que una funcion que se llama getMarca y que tiene 3 parametros (usuario, contraseña y marca) pero no me ha especificado nada más. Cuando ejecuto el codigo me sale lo siguiente
Código HTML:
Ver original
  1. Array ( [return] => Array ( [Respuesta] => Array ( [Id] => 0 [Mensaje] => Error en la llamada al programa ) ) ) Resultado: 1

Y creo que es porque le paso mal los parametros del array
Este es el codigo

Código PHP:
Ver original
  1. $soapclient = new soapclient($url, TRUE);
  2. $function = 'getMarca';
  3. $params = array( "usuario" => 'wSDSGX' , "password" => '313we', "marca" => 'FANTA');
  4. $result = $soapclient->call($function, $params);
  5. if (!$error = $soapclient->getError())
  6.  echo "Resultado: ".print_r ($result);
  7.  else
  8.  echo "ERROR:".print_r ($error);

¿Es posible que necesite el nombre exacto de los parametros del array?
Gracias
  #4 (permalink)  
Antiguo 20/06/2012, 12:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Servicios web

Pues sí, es muy posible, dependiendo de cómo procese el webservice tu petición, lo usual es que verifiquen nombre y tipos de campos.
  #5 (permalink)  
Antiguo 20/06/2012, 12:17
Avatar de anavarroegea  
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Servicios web

¿existe alguna forma de hacer uso generico de los parametros de un array? es decir, pasarle los valores sin saber exactamente el nombre de los parametro del array
  #6 (permalink)  
Antiguo 20/06/2012, 12:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Servicios web

Pues no, como te decía, eso depende del webservice, si permite pasar un arreglo de datos y sólo tomas los valores por posición, o si verifica cada nombre de dato con su correspondiente tipo.

Lo único que puedes hacer (sin preguntar por soporte) es colocar la dirección del ws en el navegador esperando que dicho ws publique su wsdl.
  #7 (permalink)  
Antiguo 20/06/2012, 12:46
Avatar de anavarroegea  
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Servicios web

La cosa es que lo publica o mejor dicho, tengo acceso a el, pero no se leer el nombre de los parametros
¿te lo paso en un privado?
  #8 (permalink)  
Antiguo 20/06/2012, 12:52
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Servicios web

Puedes leer este artículo, es bastante sencillo una vez que comprendes la estructura del xml
  #9 (permalink)  
Antiguo 20/06/2012, 14:02
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Servicios web

Los nombres de los parametros requeridos deben estar especificados dentro de la estructura del XML que te muestra al ver el WSDL.

Revisalo bien y analiza un poco lo que pone. Seguramente la respuesta esta ahí mismo.
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #10 (permalink)  
Antiguo 20/06/2012, 23:38
Avatar de anavarroegea  
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Servicios web

Este es la estructura del WSDL, pero no consigo ver nada claro. Sobre todo, el nombre de los parametros que tengo que pasarle a la funcion getStock;
Código XML:
Ver original
  1. <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. --><definitions targetNamespace="http://ws/" name="AlmacenService"><types><xsd:schema><xsd:import namespace="http://xml.netbeans.org/schema/esquema" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=1"/></xsd:schema><xsd:schema><xsd:import namespace="http://xml.netbeans.org/schema/comun" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=2"/></xsd:schema><xsd:schema><xsd:import namespace="http://ws/" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=3"/></xsd:schema></types><message name="getStock"><part name="parameters" element="tns:getStock"/></message><message name="getStockResponse"><part name="parameters" element="tns:getStockResponse"/></message><message name="getArticulo"><part name="parameters" element="tns:getArticulo"/></message><message name="getArticuloResponse"><part name="parameters" element="tns:getArticuloResponse"/></message><portType name="Almacen"><operation name="getStock"><input wsam:Action="http://ws/Almacen/getStockRequest" message="tns:getStock"/><output wsam:Action="http://ws/Almacen/getStockResponse" message="tns:getStockResponse"/></operation><operation name="getArticulo"><input wsam:Action="http://ws/Almacen/getArticuloRequest" message="tns:getArticulo"/><output wsam:Action="http://ws/Almacen/getArticuloResponse" message="tns:getArticuloResponse"/></operation></portType><binding name="AlmacenPortBinding" type="tns:Almacen"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="getStock"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation><operation name="getArticulo"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="AlmacenService"><port name="AlmacenPort" binding="tns:AlmacenPortBinding"><soap:address location="http://100.1.1.1:9090/WebConnector/AlmacenService"/></port></service></definitions>
  #11 (permalink)  
Antiguo 21/06/2012, 10:31
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Servicios web

Código XML:
Ver original
  1. <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. -->
  2. <definitions targetNamespace="http://ws/" name="AlmacenService">
  3.     <types>
  4.         <xsd:schema>
  5.             <xsd:import namespace="http://xml.netbeans.org/schema/esquema" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=1"/>
  6.             </xsd:schema>
  7.             <xsd:schema>
  8.             <xsd:import namespace="http://xml.netbeans.org/schema/comun" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=2"/>
  9.             </xsd:schema>
  10.             <xsd:schema>
  11.             <xsd:import namespace="http://ws/" schemaLocation="http://100.1.1.1:9090/WebConnector/AlmacenService?xsd=3"/>
  12.             </xsd:schema>
  13.     </types>
  14.         <message name="getStock">
  15.             <part name="parameters" element="tns:getStock"/>
  16.         </message>
  17.         <message name="getStockResponse">
  18.             <part name="parameters" element="tns:getStockResponse"/>
  19.         </message>
  20.         <message name="getArticulo">
  21.             <part name="parameters" element="tns:getArticulo"/>
  22.         </message>
  23.         <message name="getArticuloResponse">
  24.             <part name="parameters" element="tns:getArticuloResponse"/>
  25.         </message>
  26.     <portType name="Almacen">
  27.         <operation name="getStock">
  28.             <input wsam:Action="http://ws/Almacen/getStockRequest" message="tns:getStock"/>
  29.             <output wsam:Action="http://ws/Almacen/getStockResponse" message="tns:getStockResponse"/>
  30.         </operation>
  31.         <operation name="getArticulo">
  32.             <input wsam:Action="http://ws/Almacen/getArticuloRequest" message="tns:getArticulo"/>
  33.             <output wsam:Action="http://ws/Almacen/getArticuloResponse" message="tns:getArticuloResponse"/>
  34.         </operation>
  35.     </portType>
  36.     <binding name="AlmacenPortBinding" type="tns:Almacen">
  37.         <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  38.         <operation name="getStock"><soap:operation soapAction=""/>
  39.             <input>
  40.                 <soap:body use="literal"/>
  41.             </input>
  42.             <output>
  43.                 <soap:body use="literal"/>
  44.             </output>
  45.         </operation>
  46.         <operation name="getArticulo"><soap:operation soapAction=""/>
  47.             <input>
  48.                 <soap:body use="literal"/>
  49.             </input>
  50.             <output>
  51.                 <soap:body use="literal"/>
  52.             </output>
  53.         </operation>
  54.     </binding>
  55.     <service name="AlmacenService">
  56.         <port name="AlmacenPort" binding="tns:AlmacenPortBinding">
  57.             <soap:address location="http://100.1.1.1:9090/WebConnector/AlmacenService"/>
  58.         </port>
  59.     </service>
  60. </definitions>

La próxima vez al menos dale los saltos de linea e indent correspondientes...

La mala noticia es que no esta referenciado en la estructura.

Si no me equivoco, deberia de decir algo similar a:

Código XML:
Ver original
  1. <complexType name="getMarca">
  2.     <sequence>
  3.         <element name="usuario" type="string"></element>
  4.         <element name="password" type="string"></element>
  5.         <element name="marca" type="string"></element>
  6.     </sequence>
  7. </complexType>

Tienes que ponerte en contanto con la persona que provee el Web Service y solicitarle algún tipo de documentación de llamadas.

Disculpa por no poder hacer mas...
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!

Etiquetas: webservice
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 23:54.