ccc

Mostrando entradas con la etiqueta Web Services SOAP. Mostrar todas las entradas
Mostrando entradas con la etiqueta Web Services SOAP. Mostrar todas las entradas

Web Service SOAP: nusoap con fichero wsdl

Lo primero generar automáticamente el fichero wsdl en el fichero servidor con el siguiente código:

www.dominio1.com/SOAP/product_list.php
<?php
require_once "lib/nusoap.php";

function get_peliculas($decada) {
    if ($decada == "1930") {
        return join(",", array(
            "Lo que el viento se llevó",
            "Vive como quieras",
            "Sucedió una noche"));
    }
    if ($decada == "1940") {
        return join(",", array(
            "Rebeca",
            "Qué verde era mi valle",
            "La señora Miniver"));
    }
}

function get_msj_hola($nombre) {
    return "Hola ".$nombre;
}

$server = new soap_server();
    $server->configureWSDL("pelicula", "urn:pelicula");
    
    $server->register("get_peliculas",
        array("decada" => "xsd:string"),
        array("return" => "xsd:string"),
        "urn:pelicula",
        "urn:pelicula#get_peliculas",
        "rpc",
        "encoded",
        "descripción de lo que hace este método");
      
    $server->register("get_msj_hola",
        array("nombre" => "xsd:string"),
        array("return" => "xsd:string"),
        "urn:pelicula",
        "urn:pelicula#get_msj_hola",
        "rpc",
        "encoded",
        "descripción de lo que hace este método");
    
    $server->service($HTTP_RAW_POST_DATA);?>

Para obtener el código del fichero wsdl será:
http://www.dominio1.com/SOAP/product_list.php?wsdl
Copiamos y pegamos ese código y creamos un fichero peliculas.wsdl que copiaremos en el dominio del cliente.

En el dominio del cliente el código ahora será:
www.midominio2.com/SOAP/products_list_cliente.php
<?php
require_once "lib/nusoap.php";
$client = new nusoap_client("peliculas.wsdl", true);

$error = $client->getError();
if ($error) {
    echo "<h2>Ha habido errores:</h2><pre>" . $error . "</pre>";
}
$msj_saludo = $client->call("get_msj_hola", array("nombre" =>"Pepe Luis"));

if ($client->fault) {
    echo "<h2>Fallo en el SOAP</h2><pre>";
    print_r($msj_saludo);
    echo "</pre>";
}
else {
    $error = $client->getError();
    if ($error) {
        echo "<h2>Error al llamar al método del SOAP</h2><pre>" . $error . "</pre>";
    }
    else {
        echo "<h1>".$msj_saludo."</h1>";
        echo "<h2>Películas</h2><pre>";
        $list_peliculas = $client->call("get_peliculas", array("decada" => "1940"));
        // antes de imprimirlo habria que chequear que no haya errores como en la otra llamada
        echo $list_peliculas;
        echo "</pre>";
    }
}
?>

Web Service SOAP: Ejemplo con nusoap

Descargar la librería de NuSoap (se va a usar tanto en el servidor como en el cliente):
http://sourceforge.net/projects/nusoap/

En www.dominio1.com/SOAP/
Creamos el fichero product_list.php
<?php
require_once "lib/nusoap.php";

function get_peliculas($decada) {
    if ($decada == "1930") {
        return join(",", array(
            "Lo que el viento se llevó",
            "Vive como quieras",
            "Sucedió una noche"));
    }
    if ($decada == "1940") {
        return join(",", array(
            "Rebeca",
            "Qué verde era mi valle",
            "La señora Miniver"));
    }
}

$server = new soap_server();
$server->register("get_peliculas");
$server->service($HTTP_RAW_POST_DATA);
?>

En www.dominio2.com/SOAP
Creamos el fichero product_list_clientes.php:
<?php
require_once "lib/nusoap.php";
$client = new nusoap_client("http://www.dominio1.com/SOAP/product_list.php");

$error = $client->getError();
if ($error) {
    echo "<h2>Ha habido errores:</h2><pre>" . $error . "</pre>";
}

$result = $client->call("get_peliculas", array("decada" => "1940"));

if ($client->fault) {
    echo "<h2>Fallo en el SOAP</h2><pre>";
    print_r($result);
    echo "</pre>";
}
else {
    $error = $client->getError();
    if ($error) {
        echo "<h2>Error al llamar al método del SOAP</h2><pre>" . $error . "</pre>";
    }
    else {
        echo "<h2>Películas</h2><pre>";
        echo $result;
        echo "</pre>";
    }
}
?>

Para ejecutarlo:
http://www.dominio2.com/SOAP/product_list_cliente.php

Web Service SOAP Ejemplo Simple

EJEMPLO SIMPLE

En www.midominio1.com/SOAP
creo el fichero serversimple.php

<?php
function suma($a,$b){
  return $a+$b;
}

$server = new SoapServer(null, array('uri'=>""));//Sin WSDL -> uri es obligatorio
$server->addFunction("suma");
$server->handle();
?>

En www.midominio2.com/SOAP
creo el fichero testsimple.php
<?php
$url = "http://www.midominio1.com/SOAP/serversimple.php";
//Creamos un cliente para llamar a esa URL. Es obligatorio establecer el parámetro 'uri' al no tener WSDL el servidor!
$cliente = new SoapClient(null,array('location'=>$url,'uri'=>""));
//Llamamos a la operación suma (tenemos que saber nosotros que existe)
$suma = $cliente->suma(31,5);
print("La suma es ".$suma);
?>

Para ejecutarlo:
www.midominio2.com/SOAP/testsimple.php