ccc

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

No hay comentarios:

Publicar un comentario