Estoy trasteando el NuSOAP. Mi objetivo es realizar un "prototipo" de autentificación cliente-servidor. Se trata de un código bastante básico. El problema que tengo es que en mi servidor, por diferentes motivos que no vienen al caso, no puedo utilizar variables $_SERVER para realizar la autentificación en la parte del servidor.
Me preguntaba si alguien habia tocado NuSoap y habia realizado algo similar y si hay una alternativa para hacerlo sin variables $_SERVER.
Os copio el código a ver si alguien me puede echar una mano :)
server.php
Código PHP:
<?php
require_once('lib/nusoap.php');
$username = "user";
$password = "password";
$miURL = 'http://www.moveit.es';
$server = new soap_server();
$server->configureWSDL('ws_idgl', $miURL);
$server->wsdl->schemaTargetNamespace = $miURL;
$server->register('funcionPrueba', // Nombre de la funcion
array(), // Parametros de entrada
array('return' => 'xsd:string'), // Parametros de salida
$miURL);
function funcionPrueba() {
global $username;
global $password;
$respuestaDefecto = "Hola Pedro ! :D";
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
if (($_SERVER['PHP_AUTH_USER'] == $username) && ($_SERVER['PHP_AUTH_PW'] == $password)) {
return new soapval('return', 'xsd:string', $respuestaDefecto);
}
}
return new soapval('return', 'xsd:string', "No autorizado");
}
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents('php://input');
$server->service($HTTP_RAW_POST_DATA);
?>
Código PHP:
<?php
require_once('lib/nusoap.php');
// Crear un cliente apuntando al script del servidor (Creado con WSDL) -
// Las proximas 3 lineas son de configuracion, y debemos asignarlas a nuestros parametros
$serverURL = 'http://www.moveit.es';
$serverScript = 'server.php';
$metodoALlamar = 'funcionPrueba';
$username = "user";
$password = "password";
$authtype = "basic";
// Crear un cliente de NuSOAP para el WebService
$cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl');
$cliente->setCredentials($username, $password, $authtype);
// Se pudo conectar?
$error = $cliente->getError();
if ($error) {
echo '<pre style="color: red">' . $error . '</pre>';
echo '<p style="color:red;' > htmlspecialchars($cliente->getDebug(), ENT_QUOTES) . '</p>';
die();
}
$result = $cliente->call(
"$metodoALlamar", // Funcion a llamar
array(), // Parametros pasados a la funcion
"uri:$serverURL/$serverScript", // namespace
"uri:$serverURL/$serverScript/$metodoALlamar" // SOAPAction
);
// Verificacion que los parametros estan ok, y si lo estan. mostrar respuesta
if ($cliente->fault) {
echo '<b>Error: ';
print_r($result);
echo '</b>';
} else {
$error = $cliente->getError();
if ($error) {
echo '<b style="color: red">Error: ' . $error . '</b>';
} else {
echo 'Respuesta: ' . $result;
}
}
?>
Saludos y gracias :)