Volver a la página principal
miércoles 18 septiembre 2024
221

Cómo conectar a un servicio SOAP desde Laravel

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.

1. Conexión a un servicio SOAP usando PHP SoapClient

Paso 1: Verifica que PHP tenga habilitada la extensión SOAP

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

Paso 2: Utilizar 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.

Ejemplo de código:

<?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);
        }
    }
}

Explicación del código:

  • \SoapClient: La clase de PHP que se conecta al servicio SOAP.
  • $wsdl: La URL del archivo WSDL que describe el servicio SOAP.
  • El método nombreMetodo($params) es una llamada a un método expuesto por el servicio SOAP.
  • En caso de errores, se lanza una excepción SoapFault.

Paso 3: Ruta en Laravel

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.

2. Conexión a un servicio SOAP usando un paquete externo (SoapClient de Artisaninweb)

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.

Paso 1: Instalar el paquete

Instala el paquete Artisaninweb SoapWrapper usando Composer:

composer require artisaninweb/soapwrapper

Paso 2: Configurar el servicio SOAP en Laravel

En tu controlador, puedes configurar y utilizar el servicio SOAP.

Ejemplo de código:

<?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);
    }
}

Paso 3: Añadir la ruta

Igual que antes, agrega una ruta para acceder al método del controlador:

Route::get('/consumir-soap', [SoapController::class, 'consumirServicio']);

Ventajas de usar Artisaninweb/SoapWrapper

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.

Conclusión

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.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer