Laravel no tiene soporte nativo para interactuar con servicios SOAP, ya que está más orientado a REST. Sin embargo, puedes utilizar PHP SoapClient (incluido en PHP) o paquetes externos para realizar la conexión y consumir servicios SOAP desde tu aplicación en Laravel. A continuación te mostraré cómo hacerlo usando ambos métodos.
SoapClient
Antes de comenzar, asegúrate de que la extensión SOAP de PHP esté habilitada. Puedes verificarlo ejecutando:
php -m | grep soap
Si no está habilitada, edita el archivo php.ini
para habilitarla, descomentando la línea:
extension=soap
SoapClient
en Laravel
Puedes usar la clase SoapClient de PHP para conectarte a un servicio SOAP desde Laravel. Aquí te muestro cómo hacerlo en un controlador.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SoapController extends Controller
{
public function consumirServicio()
{
try {
// URL del WSDL del servicio SOAP
$wsdl = 'http://example.com/servicio?wsdl';
// Crear una instancia de SoapClient
$client = new \SoapClient($wsdl, [
'trace' => true, // Permite rastrear la solicitud/respuesta
'exceptions' => true, // Lanza excepciones en caso de error
]);
// Llamar a un método del servicio SOAP
$params = ['param1' => 'valor1', 'param2' => 'valor2'];
$response = $client->nombreMetodo($params);
// Mostrar la respuesta
return response()->json($response);
} catch (\SoapFault $e) {
// Manejo de excepciones
return response()->json(['error' => $e->getMessage()], 500);
}
}
}
\SoapClient
: La clase de PHP que se conecta al servicio SOAP.
$wsdl
: La URL del archivo WSDL que describe el servicio SOAP.
nombreMetodo($params)
es una llamada a un método expuesto por el servicio SOAP.
SoapFault
.
Para probar esta conexión, crea una ruta en tu archivo web.php
que apunte al controlador:
Route::get('/consumir-soap', [SoapController::class, 'consumirServicio']);
Ahora puedes acceder a la URL /consumir-soap
en tu navegador para consumir el servicio SOAP.
Para facilitar el uso de servicios SOAP en Laravel, también puedes usar un paquete externo como Artisaninweb/SoapWrapper, que proporciona una interfaz más amigable.
Instala el paquete Artisaninweb SoapWrapper usando Composer:
composer require artisaninweb/soapwrapper
En tu controlador, puedes configurar y utilizar el servicio SOAP.
<?php
namespace App\Http\Controllers;
use SoapWrapper;
use Illuminate\Http\Request;
class SoapController extends Controller
{
public function consumirServicio()
{
// Registrar el servicio SOAP
SoapWrapper::add(function ($service) {
$service
->name('miServicioSOAP')
->wsdl('http://example.com/servicio?wsdl')
->trace(true)
->options([
'login' => 'tuUsuario',
'password' => 'tuContraseña',
]);
});
// Llamar a un método del servicio SOAP
$response = SoapWrapper::call('miServicioSOAP.nombreMetodo', [
'param1' => 'valor1',
'param2' => 'valor2'
]);
// Mostrar la respuesta
return response()->json($response);
}
}
Igual que antes, agrega una ruta para acceder al método del controlador:
Route::get('/consumir-soap', [SoapController::class, 'consumirServicio']);
Este paquete proporciona una interfaz más amigable y encapsula el uso del SoapClient nativo, facilitando la gestión de múltiples servicios SOAP, autenticación y configuración adicional.
Puedes conectar fácilmente Laravel con un servicio SOAP utilizando tanto el SoapClient nativo de PHP como paquetes externos como Artisaninweb/SoapWrapper. La opción que elijas dependerá de la complejidad de tu integración y la comodidad que busques al interactuar con el servicio.
Jorge García
Fullstack developer