Intelligenia Soluciones Informáticas

PHP5 y SOAP

sábado 28 de abril de 2007

El ya conocido protocolo SOAP llega de forma nativa a PHP en la versión 5.

Para el que no sepa qué es esto de SOAP, es a grandes rasgos, un protocolo que permite llamar a funciones que están en otra máquina, de forma que podamos pasarle los parámetros y nos pueda devolver la respuesta de forma transparente, la comunicación es en formato XML y se suele hacer sobre el protocolo HTTP. S quereis más información, podeis buscar términos como SOAP, UDDI, WDSL,...

La cuestión es que PHP5 lo soporta de forma nativa, con lo que consigue máxima transparecia al programador. Por ejemplo si tenemos funciones ya implementadas en php y queremos publicarlas como servicio web, sólo tenemos que crear una página php con las siguientes líneas:


$servidor = new SoapServer(null,array("uri"=>""));
$servidor->addFunction("mifuncion");
//podemos añadir cuantas funciones queramos
$servidor->handle();

Es así de sencillo y de simple para el programador. Hay que tener en cuenta que esto que he puesto sería la forma más rápida y sencilla de conseguirlo, pero en el constructor se le pueden configurar muchas cosas.

Crear un cliente SOAP es igual de sencillo:

$cliente = new SoapClient(null,array("location"=>"","uri"=>""));
$cliente->mifuncion();

Así de simple, una vez creado el cliente, simplemente lo tratamos como si fuese un objeto con todos los método que implementa el servidor, ya PHP5 se encarga de implementar el protocolo y de que todo sea lo más transparente posible para el usuario.

Fácil y simple, ¿verdad?

José Carlos Calvo

10 comentarios:

  1. ¿De qué me sonará a mí esto?
    ResponderSuprimir
  2. Fijate que tenes un error.
    No es ServerSoap sino SoapServer

    $servidor = new SoapServer(null,array("uri"=>""));
    $servidor->addFunction("getQuote");
    //podemos añadir cuantas funciones queramos
    $servidor->handle();

    Saludos
    ResponderSuprimir
  3. Gracias Pablo, efectivamente es al revés :)
    ResponderSuprimir
  4. Tampoco el cliente es correcto.

    Es SoapClient no ClientSoap
    ResponderSuprimir
  5. Me gustaría ver un ejemplo funcionando de SOAP en php5...

    Tengo php 5.0.4 y no soy capaz de hacerlo funcionar... :S alguien me echa un cable?
    ResponderSuprimir
  6. ¿Qué errores te da? Lo que he puesto en la entrada es un ejemplo real que funciona.

    Cuentanos qué tienes, y vemos como ayudarte :)

    Un saludo
    ResponderSuprimir
  7. Hola tengo el suguiente error Uncaught SoapFault exception: [SOAP-ENV:Client] No Deserializer found to deserialize a 'http://mucRegistra/RegistraManifiesto.xsd:ArrayOfmucRegistra_RemesaType2User' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'. [java.lang.IllegalArgumentException] in E:\web\soinpro\carga\g_webservices_cp2.php:149 Stack trace: #0 [internal function]: SoapClient->__call('wsmani', Array) #1 E:\web\soinpro\carga\g_webservices_cp2.php(149): SoapClient->wsmani(96191554, 8600068755, 'MIAGCSqGSIb3DQE...', '96191554;860006...', Object(pregRemesa), Object(pregManifiesto), Object(pregVehiculo), Object(pregConductor), Object(pregTercero)) #2 {main} thrown in E:\web\soinpro\carga\g_webservices_cp2.php on line 149 usando php 5 no se si alguno me puede hechar una manita
    ResponderSuprimir
  8. Hola, estoy nuevo en el tema de conexión a WebService..
    Alguien me puede colaborar con algun ejemplo o link material para leer y poderme conectar a un WebServices de la empresa ?

    Mil gracias
    ResponderSuprimir
  9. Buenos días ¿Te refieres a WebServices con PHP y SOAP?
    ResponderSuprimir
  10. De camino voy a modificar la entrada con los comentarios de cambios que se hicieron hace tiempo :)

    Gracias Pablo e ikarush
    ResponderSuprimir