PHP - leer un web services

   
Vista:

leer un web services

Publicado por Martin (9 intervenciones) el 01/07/2015 15:16:29
Le escribo porque realmente me atasque en trabajo, me pidieron que lea un web services de php y he intentado hacerlo de distintos metodos, hasta con la libreria nusoap pero no lo logro.
Me podrian decir/orientar/ayudar como leer este web services?
http://186.0.185.157/hcd/DpDigesto.aspx?wsdl

Seria una estructura de árbol.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

leer un web services

Publicado por Gonzalo (338 intervenciones) el 02/07/2015 16:25:43
no he trabajado mucho con servicios, pero lo que te puedo decir es que la respuesta llega como "pagina web", la unica diferencia es que una paagina web llega como

<html>
<encabezado>
<cuerpo de la pagina>
</html>

y xml llega como

<encabezado>
<datos>
<estructura>
</datos>

o sea que basicamente es lo mismo, y en ambos casos todo llega como solo ascii.

asi que mi recomendacion seria

como primer paso guarda la respuesta del servico en un archivo como Xml, y para leerlo yo te recomendaria que empesaras con DOM, ya dominando el dom pudieras pasar a algo mas complejo como SOAP, esto si no quieres usar la clase nusoap (yo no la uso).

si aprendes a armar y transmitir un xml sencillo con DOM entonces vas a entender como leerlo desde archivo.

suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

leer un web services

Publicado por Vainas (254 intervenciones) el 02/07/2015 19:34:34
Buenas:

Es un poco largo de explicar en un post, pero voy a intentarlo:

Digamos en lineas generales que es enviar y recibir xml's con informacion por el protocolo http. El tema es que dentro de la url que te han enviado te dice como acceder a las funciones que tiene el servicio web y que parametros tienes que pasarles. Al final se trata de eso, es llamar a un servidor y decirle ejecutame esta funcion con estos parametros... y el desvuelve el resultado de la ejecución.

No considero que deberías trabajar el xml en crudo.... debes usar librerias como nullsoap o la que ya viene implementado en php (no sabría ahora mismo decirte apartir de que version viene implementado).

Aqui tienes un emplo basico de como inicializar y como llamar a una funcion del web service (puede tener mas de una):

1
2
3
4
5
6
7
8
9
$client = new SoapClient("http://example.com/webservices?wsdl");
params = array(
  "id" => 100,
  "name" => "John",
  "description" => "Barrel of Oil",
  "amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
var_dump($response);

Se puede ver claramente que creas un objeto que maneja el web service primero, despues creas el conjunto de parametros que vas a enviar al metodo o funcion, y luego llamas a la funcion con los parametros la cual te desvuelve un $response, lo imprimes por pantalla para ya comprobar si lo que se ha enviado ha sido un array, un entero... lo que sea.


Aqui lo dificil de ver muchas veces es, "vale, pero donde veo que funciones hay y que parametros les tengo que pasar!!"... dos cosas:

1. O te lo dice el que ha creado el servicio web. Algún documento por ejemplo o web.
2. Puedes hacer uso de herramientas en internet para ver como sacar estos datos: buscas en google "test webservice online" y tendras herramientas como http://wsdlbrowser.com/ en donde metes la url de tu servicio web y a la derecha te sale los metodos que posee y creo que tambien te dice que parametros se le pueden pasar (ahora no estoy seguro del todo).

Preguntame si no te aclaras con esto. Estoy pendiente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

leer un web services

Publicado por Gonzalo (338 intervenciones) el 02/07/2015 20:08:38
lo mismo pero con dom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// inicia Servicio.php
 
$Dom = new DOMDocument( "1.0", "ISO-8859-15" );//se crea el documento con la version y el iso, esto es standard para todos pero lo puedes ajustar si asi lo necesitas
 
$Cliente = $Dom->createElement( "Cliente",""); // creamos el elemento cliente
$Id = $Dom->createElement( "Id",100); //creamos el elemento Id
$Nombre = $Dom->createElement( "Name","John");// creamos el elemento nombre
$Description=$Dom->createElement( "Description","Barrel of Oil"); //creamos el elemento Description
$Amount=$Dom->createElement( "Amount",500); //creamos el elemento Amount
 
$Dom->appendChild($Cliente); // Cliente se anexa a Dom como hijo
 
$Cliente->appendChild($Id); // Id se anexa a Cliente como hijo
$Cliente->appendChild($Nombre); //Nombre se anexa a cliente como Hijo
$Cliente->appendChild($Description); // Description se anexa a cliente como hijo
$Cliente->appendChild($Amount); // amount se anexa a cliente como hijo
 
echo $Dom->saveXML();
 
//termina Servicio.php

lo llamas como http://tu.sitio.web.com/servicios/Servicio.php

resulta:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-15"?>
<Cliente>
  <Id>100</Id>
  <Nombre>John</Nombre>
  <Description>Barrel of Oil</Description>
  <Amount>500</Amount>
</Cliente>

en el exploreer solo vas a ver

100johnBarrel of Oil500

pero si pides ver el codigo fuente ahi se va a ver mas claramente.

suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

leer un web services

Publicado por Jose (1 intervención) el 01/10/2015 10:12:08
Hola:

Sé que no es mi consulta la principal en este hilo, pero trata de lo mismo y a lo mejor puede servirle a alguien más.

Estoy intentando consumir datos de un webservice y, buscando info, he encontrado tu respuesta.

Utilizando la herramienta que comentas ( http://wsdlbrowser.com/soapclient?wsdl_url=http%3A%2F%2Fen.macbeancoffeeworld.exact.com%2Fservices%2FExact.Entity.Resource.svc%3FsingleWsdl ) me da el mismo error que si intento atacar el servicio con

1
2
<?php $result = new SoapClient();
var_dump($result); ?>

¿Qué es lo que pasa con este webservice?¿Puede estar "capado" para determinadas IP´s?

Agradezco mucho un poco de luz en el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

leer un web services

Publicado por Martin (9 intervenciones) el 02/07/2015 21:17:30
Muchas gracias Gonzalo y Vainas.

Le comento como lo hice en primea instancia.

Comberti el resultado en un array con una funcion que encontre en la web...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$servicio="http://186.0.185.157/hcd/DpDigesto.aspx?wsdl";
$client = new SoapClient($servicio);
$result = $client->Execute(0);
 
$result = obj2array($result);
 
function obj2array($obj) {
  $out = array();
  foreach ($obj as $key => $val) {
    switch(true) {
        case is_object($val):
         $out[$key] = obj2array($val);
         break;
      case is_array($val):
         $out[$key] = obj2array($val);
         break;
      default:
        $out[$key] = $val;
    }
  }
  return $out;
}

Y de ahi comence a usar count() para saber cuanto elementos tenia el array y luego con un for lo mostraba.

Se que es muy basico lomio, no soy experto!... pero me funciona... ojala lo hubiese sabido tomar en otro formato como xml, por ahi es mas facil de navegar que un array...

Una cosa rara me pasa, los array que tienen 1 solo objeto, el count() me devuelve el numero 9, raro?

Saludos! Y MUCHAS GRACIAS A TODOS!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

leer un web services

Publicado por Vainas (254 intervenciones) el 02/07/2015 22:50:27
Buenas de nuevo:

Mete esto dentro de un documento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$servicio="http://186.0.185.157/hcd/DpDigesto.aspx?wsdl";
$client = new SoapClient($servicio);
$result = $client->Execute(0);
 
$result = obj2array($result);
 
function obj2array($obj) {
  $out = array();
  foreach ($obj as $key => $val) {
    switch(true) {
        case is_object($val):
         $out[$key] = obj2array($val);
         break;
      case is_array($val):
         $out[$key] = obj2array($val);
         break;
      default:
        $out[$key] = $val;
    }
  }
  return $out;
}
print_r($result);(
?>
</pre>

Solo le he agregado print_r y he metido el resultado dentro de una etiqueta html para poder verlo bien.

Lo de que te salga 9 sera por que dentro de cada array hay 9 elementos:

[Name] =>
[Link] =>
[LinkTarget] =>
[Expanded] =>
[DynamicLoad] =>
[Icon] =>
[IconWhenSelected] =>
[Nodes] =>

No es dificil y tampoco hay que ser un experto. Animo que ya lo tienes!!

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar