Como hacer llamadas a Servicios SOAP desde PHP

Los servicios SOAP (Simple Object Access Protocol), son ampliamente utilizados para cualquier tipo de integración con aplicaciones. Desde facturación hasta medios de pago de todo el mundo.

En estos servicios enviamos nuestros datos utilizando XML con la estructura requerida por el servidor y este generalmente nos devolverá también datos a través de XML.

Hay varias librerías disponibles para PHP que nos permitirán consumir servicios SOAP si por algún motivo no contamos con la clase oficial de SOAP de PHP activa en el servidor, este es el caso de NuSOAP por ejemplo.

En esta guía vamos a ver como consumir un servicio SOAP con la librería oficial de PHP de manera rápida y súper simple.

Para los ejemplos utilizaré este servicio gratuito de Who Is para obtener información sobre dominios y direcciones IP.

Datos necesarios para realizar la llamada SOAP

Antes que nada, para utilizar SOAP en PHP con la librería oficial, necesitaremos tener activo en nuestro entorno local/servidor la extensión de SOAP. Para verificar que tengamos activa esta extensión de PHP tendremos que revisar la siguiente línea de nuestro archivo php.ini

Si tenemos un símbolo ; al comienzo de esta línea en nuestro php.ini significa que la extensión está desactivada. En ese caso necesitaremos quitar el ; inicial y reiniciar nuestro servidor Apache o el que utilicemos en nuestro entorno local/servidor.

Una vez activa nuestra extensión SOAP de PHP debemos tener los datos necesarios para realizar el request que son nuestra URL del servicio SOAP, el método que queremos ejecutar de este servicio y la estructura de parámetros que enviaremos en nuestro Request.

En este caso de ejemplo nuestra URL del servicio es la siguiente: http://www.webservicex.net/whois.asmx?WSDL

En un caso ideal vamos a contar con la documentación necesaria que nos indicará los métodos y parámetros a ejecutar pero, si no es así, no será problema porque podemos ingresar a la URL del servicio desde el navegador y tomar los detalles desde la misma estructura que nos mostrará.

En este caso de prueba resulta que no tenemos documentación. Así que visitaremos la URL de nuestro servicio para obtener la información necesaria:

Llamadas SOAP php

En la imagen podemos observar y ubicar nuestro método (GetWhoIs) y el parámetro (HostName) necesario para ejecutarlo. Un servicio SOAP puede tener más de un método dependiendo de sus funcionalidades.

El código a ejecutar es el siguiente:

Paso a explicar:

Primero tenemos unas líneas de debug. Podemos activarlo o desactivarlo y nos va a mostrar o no los errores de PHP. Solo cambiamos TRUE o FALSE dependiendo del entorno en que estemos trabajando.

Luego tenemos esta línea:

Aquí es donde debemos reemplazar el valor actual por la URL de nuestro servicio SOAP.

Luego tenemos la variable $params, que es un array, de los parámetros que debemos enviar a nuestro servicio, aquí armamos la estructura de parámetros que determinamos en uno de los pasos anteriores.

En el caso de este ejemplo solo tenemos el parámetro HostName que es la IP o dominio a investigar en WhoIs, pero podríamos tener varios parámetros o incluso parámetros que también sean array del estilo:

Recordemos que a final de cuentas basándose en este array la clase de SOAP armará una estructura de árbol XML que tiene nodos padres nodos hijos e hijos de los hijos… Ya sabemos.

La última línea importante es la siguiente:

Aquí, una vez inicializado el objeto, vamos a tener que cambiar el método a ejecutar que en esta línea es “GetWhoIs” por el método de nuestro servicio que observamos anteriormente en la Documentación o en la misma URL.

¡Y listo! eso es todo, ahora en la variable $result vamos a tener la respuesta de nuestro request. En la última línea le hacemos un var_dump para ver el resultado y estructura que recibimos. En base a eso ya podemos darle el formato que se nos ocurra a la información.

Factores de rendimiento en entorno de producción

Como última observación, en cuanto a optimización y velocidad, podemos llegar a encontrarnos con inconvenientes dependiendo de para que estemos utilizando el servicio. A veces las ejecuciones del servicio SOAP son extremadamente lentas.

Puede que en una utilización normal donde solo queremos obtener algunos datos para enriquecer nuestra información sobre un dominio, como en el caso de ejemplo, no afecte en nada que la pagina tarde en cargar 1 o 1.5 segundos más, pero en el caso de un servicio SOAP que sea, por ejemplo, de auto completado de datos de un input, cada milésima de segundo cuenta.

En caso de que encontremos estos problemas vamos a tener que trabajar con las opciones de cache de las llamadas SOAP de la misma clase de PHP. En la variable de $options del código que hemos visto ya tenemos activadas las funciones de cache, pero hay más configuraciones en el php.ini que nos pueden servir.

Publicado el 13 noviembre, 2016 por Sonichaos en la/s categoría/s api, General, php