SOAP (Simple Object Access Protocol) es un protocolo de comunicación basado en XML que permite el intercambio de mensajes entre aplicaciones a través de Internet. Es totalmente independiente de la plataforma y del lenguaje de programación, lo que lo convierte en la base fundamental para el desarrollo de los Web Services, facilitando la interoperabilidad entre diferentes sistemas.

Estructura de un mensaje SOAP
Un mensaje SOAP es, en esencia, un documento XML estructurado. Su anatomía principal se compone de los siguientes elementos:
- soap:Envelope: Elemento obligatorio que actúa como contenedor raíz del mensaje.
- soap:Header (Cabecera): Elemento opcional que contiene información específica, como la autenticación, sesiones o parámetros de control. Es donde se definen los tipos de datos utilizados en el documento.
- soap:Body (Cuerpo): Sección donde se incorpora toda la información necesaria para el nodo final, incluyendo llamadas a métodos y sus respuestas.
- soap:Fault: Elemento opcional, contenido dentro del cuerpo, donde se notifican los fallos o errores que se produzcan durante la ejecución.
Todo documento XML debe respetar la jerarquía de etiquetas, cerrando correctamente cada una de ellas tras su apertura.
WSDL: La descripción del servicio
Los archivos WSDL (Web Services Description Language) son documentos XML que proporcionan los metadatos necesarios para que un cliente interactúe correctamente con un servicio SOAP. Sus componentes clave incluyen:
- types: Describe los tipos de datos utilizados, basados en XML.
- interface: Define las operaciones disponibles y los mensajes de petición (request) y respuesta (response).
- binding: Especifica el protocolo y el formato de datos para una interfaz particular.

Implementación de SOAP en PHP
PHP cuenta con un motor nativo para manejar SOAP, aunque su implementación puede presentar desafíos complejos al trabajar con objetos o cabeceras (Header).
Gestión de Cabeceras (Header) y errores
Al consumir servicios web, a menudo es necesario enviar parámetros en el header y leer códigos de error desde la respuesta. Si el cliente SOAP de PHP nativo no permite procesar ciertas cabeceras de respuesta, una solución elegante es extender la clase original y utilizar las funciones DOM y XPATH de PHP para analizar el XML de respuesta manualmente.
Consideraciones técnicas importantes
- Caché WSDL: Si SOAP no encuentra funciones que claramente existen en el archivo WSDL, suele deberse a que PHP mantiene el archivo en caché durante un día.
- Content-Type: Algunos servicios (como los de Sabre) requieren estrictamente que el header sea text/xml.
- NuSOAP: Es un Toolkit popular para PHP que facilita el desarrollo de clientes y servidores, siendo una alternativa avanzada si se requiere mayor flexibilidad.
- Transferencia de objetos: Al transferir objetos complejos en PHP5, a menudo es necesario envolverlos en la clase SoapVar o implementar una interfaz común como SOAPable.