Cómo consumir un WebService SOAP con PHP

Inicio / Cómo hacer para... / Cómo consumir un WebService SOAP con PHP

Qué son los WebServices

Los WebServices son un mecanismo muy útil para integrar aplicaciones a través del protocolo HTTP, y de ese modo, aprovechar las capacidades de terceros dentro de nuestras propias aplicaciones.

Un ejemplo muy común es de las pasarelas de pago, como ser PayPal o MercadoPago.

Se basan siempre en la existencia de dos procesos:

  • El cliente (Consumidor)
  • El servidor (Productor)

A nivel técnico existen dos operaciones que pueden realizarse a través de WebServices:

  1. Consumirlos
  2. Exponerlos

Uno de los protocolos que pueden utilizar los WebServices es SOAP (Otro muy común es REST).

Consumirlos usando PHP es bastante simple, para ello se utiliza la clase SoapClient.

Ejemplo de consulta de localización basado en IP

Para este ejemplo usaremos el WebService de cdyne.com para obtener información geográfica en base a la IP buscada.

<?php

$url = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl";

try {
 $client = new SoapClient($url, [ "trace" => 1 ] );
 $result = $client->ResolveIP( [ "ipAddress" => $argv[1], "licenseKey" => "0" ] );

 print_r($result);
} catch ( SoapFault $e ) {
 echo $e->getMessage();
}


echo PHP_EOL;

En este caso, este script debería ser corrido desde CLI.

Por ejemplo, si lo guardás como “ws.php”, al ejecutar php ws.php 210.45.151.101 obtendrás la salida:

stdClass Object
(
 [ResolveIPResult] => stdClass Object
 (
 [City] => Huainan
 [StateProvince] => 01
 [Country] => China
 [Organization] => 
 [Latitude] => 32.6264
 [Longitude] => 116.9969
 [AreaCode] => 0
 [TimeZone] => 
 [HasDaylightSavings] => 
 [Certainty] => 90
 [RegionName] => 
 [CountryCode] => CN
 )
)

Como podrás observar, la respuesta del método ResolveIP es un objeto de tipo StdClass.

StdClass es una clase genérica de PHP (Algo medio raro y, casi diría que un abuso de la naturaleza interpretada del lenguaje). Esta clase no tiene métodos ni propiedades definidas, pero sirve como una especie de contenedor al que se le puede asignar arbitrariamente todo lo que uno quiera (En rigor de verdad, esto puede hacerse con cualquier clase de PHP, sólo que es preferible no hacerlo).

Básicamente, al construir el cliente a partir de la definición de un WSDL están disponibles todos los servicios expuestos como métodos propios (como si estuviesen accesibles en forma local, a pesar de que la verdadera llamada es remota).

Es interesante notar esto, si ves la línea $result = $client->ResolveIP( [ "ipAddress" => $argv[1], "licenseKey" => "0" ] ); podrás notar que se está invocando al método ResolveIP sobre un objeto de clase SoapClient.

La clase SoapClient es una clase estándar de PHP, mientras que el método ResolveIP sólo tiene sentido dentro de este WebService. Si te estás preguntando cómo puede una clase estándar reconocer métodos desconocidos te diría que deberías darle una mirada al tema de los métodos mágicos de PHP (O tomar el curso de PHP Orientado a Objetos).

Como te imaginarás, si existe la clase SoapClient… debe existir la clase SoapServer (Tema de otro post).

En el curso de PHP WebServices estudiamos este tema en mayor profundidad, mientras tanto, si te quedó alguna duda podés dejarla en un comentario.

mchojrin

Director Académico y Docente at Leeway Academy
Hola! Soy Mauro Chojrin, estudié la Lic. en Ciencias de la Computación en la Universidad de Buenos Aires.

Me desempeño como docente de programación desde el año 1997.

Pasé por diferentes instituciones (Escuela Técnica ORT, Digital House, EducacionIT, ITMaster, Escuela DaVinci entre otros).

Actualmente coordino los cursos dictados en Leeway Academy y desarrollo sistemas usando PHP y framework Symfony

5 comentarios

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: