Hola a todos, mi problema es el siguiente, he implementado un WS con NuSoap pero
la entrada debe ser de tipo xml, alguien me puede indicar como debo hacerla pues la que tengo actualmente es de tipo xsd:string y cuando tratan de consumir el WS desde otro programa obtienen el siguiente error :
El cliente encontró un tipo de contenido de respuesta de ' text/html, pero se esperaba 'text/xml'.
Error de la solicitud con el mensaje de error:
--
Warning: simplexml_load_string() ecpects parameter 1 to be string,
array given in.....
Fatal error: Call to a member function xpath() on non-object in .....
--
dejo aqui el codigo del WS y el consumidor que he hecho (que funciona pero con la entrada tipo string). agradeceria muchisimo cualquier ayuda o idea que puedan darme, muchas gracias de antemano.
ws server:
Código PHP:
<?php
require_once 'lib/nusoap.php';
$ns = "http://www.namespace.com/";
$server = new soap_server();
$server->configureWSDL('SociosRegistrados',$ns);
$server->wsdl->schemaTargetNamespace = $ns;
$server->register('WmSocioRegistradoInsertar',array('xmlstr' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
$server->register('WmSocioRegistradoActualizar',array('xmlstr' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
function conectar(){
$host = urldecode("host");
$conexion = mysql_connect($host, "user", "pass");
mysql_select_db("database",$conexion);
return $conexion;
}
function WmSocioRegistradoInsertar($xmlstr){
$xml = simplexml_load_string($xmlstr);
$error = 0;
$totalInsertados = 0;
if ($xml->xpath('//usuario')){
foreach ($xml->usuario as $cliente){
$sUsuarioWS = trim($cliente->sUsuarioWS);
$sPassWS = trim($cliente->sPassWS);
$sUsername = trim($cliente->sUsername);
$sPassword = trim($cliente->sPassword);
$sNombre = trim($cliente->sNombre);
$sLicencia = trim($cliente->sLicencia);
$sSexo = trim($cliente->sSexo);
$dFechaNac = trim($cliente->dFechaNac);
$sMovil = trim($cliente->sMovil);
$sEmail= trim($cliente->sEmail);
$iSocioRegistradoTipoPermiso = trim((int)$cliente->iSocioRegistradoTipoPermiso);
if (($sUsername != "")
&& ($sPassword != "")
&& ($sNombre != "")
&& ($sLicencia != "")
&& ($sSexo != "" )
&& ($dFechaNac != "")
&& ($sMovil != "")
&& ($sEmail != "" )
&& ($iSocioRegistradoTipoPermiso != "")
&& ($iSocioRegistradoTipoPermiso != 0)
&& (is_numeric($iSocioRegistradoTipoPermiso))){
if (!encontrando($sUsername)){
if(insertando($sUsuarioWS,$sPassWS,$sUsername,$sPassword,$sNombre,$sLicencia,$sSexo,$dFechaNac,$sMovil,$sEmail,$iSocioRegistradoTipoPermiso))
$totalInsertados++;
}
}else{
$error = 1;
}
}
if ($error == 1){
$salida = "Ha dejado campos obligatorios vacíos ó con errores!<br />";
$salida .= "Se han insertado (".$totalInsertados.") registros.";
}else{
$salida = "Se han insertado (".$totalInsertados.") registros.";
}
}else {
$salida = htmlentities("No se ha encontrado el contenedor <usuario>...</usuario> en su entrada!");
}
return new soapval('return', 'xsd:string', $salida);
}
function insertando($sUsuarioWS,$sPassWS,$sUsername,$sPassword,$sNombre,$sLicencia,$sSexo,$dFechaNac,$sMovil,$sEmail,$iSocioRegistradoTipoPermiso){
$conn = conectar();
$created = time();
$sql = "insert into users (uid, name, pass, mail,created) values ('', '$sUsername' , '$sPassword', '$sEmail','$created')";
$datarow = mysql_query($sql, $conn) or die(mysql_error());
//inserto en backup
$sql_backup = "insert into golf_backup (id, sUsuarioWS, sPassWS, sUsername, sPassword, sNombre, sLicencia, sSexo, dFechaNac, sMovil, sEmail, iSocioRegistradoTipoPermiso) values ('','$sUsuarioWS', '$sPassWS', '$sUsername', 'escorpionpass', '$sNombre', '$sLicencia', '$sSexo', '$dFechaNac', '$sMovil', '$sEmail', '$iSocioRegistradoTipoPermiso')";
$datarow_backup = mysql_query($sql_backup, $conn) or die(mysql_error());
if($datarow){
return true;
}else return false;
}
function borrando($userN){
$conn = conectar();
$sql = "delete from users where name = '".$userN."'";
$datarow = mysql_query($sql, $conn) or die(mysql_error());
//borro en backup
$sql1 = "delete from golf_backup where sUsername = '".$userN."'";
$datarow1 = mysql_query($sql1, $conn) or die(mysql_error());
if(($datarow)&&($datarow1)){
return true;
}else return false;
}
function actualizando($sUsuarioWS,$sPassWS,$sUsernameOriginal,$sUsername,$sPassword,$sNombre,$sLicencia,$sSexo,$dFechaNac,$sMovil,$sEmail,$iSocioRegistradoTipoPermiso){
$conn = conectar();
$sql = "update users set name = '".$sUsername."' , pass = '".$sPassword."', mail= '".$sEmail."' where name='".$sUsernameOriginal."'";
$datarow = mysql_query($sql, $conn) or die(mysql_error());
//actualizo en backup
$sql_backup = "update golf_backup set sUsuarioWS = '".$sUsuarioWS."', sPassWS = '".$sPassWS."', sUsername = '".$sUsername."', sPassword = '".$sPassword."', sNombre = '".$sNombre."', sLicencia = '".$sLicencia."', sSexo = '".$sSexo."', dFechaNac = '".$dFechaNac."', sMovil = '".$sMovil."', sEmail = '".$sEmail."', iSocioRegistradoTipoPermiso = '".$iSocioRegistradoTipoPermiso."' where sUsername = '".$sUsernameOriginal."'";
$datarow_backup = mysql_query($sql_backup, $conn) or die(mysql_error());
if($datarow){
return true;
}else return false;
}
function encontrando($userN){
$conn = conectar();
$sql = "select * from users where name ='$userN'";
$datarow = mysql_query($sql, $conn) or die(mysql_error());
$numrow = mysql_num_rows($datarow);
if ($numrow> 0) {
return true;
}else
return false;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
cliente :
Código PHP:
<?php
require_once 'lib/nusoap.php';
$wsdl = "http://localhost/ws/local_sociosregistrados.php?wsdl";
$cliente = new nusoap_client($wsdl, 'wsdl');
//llamada al metodo que procesa XML
$xmlstr = <<<XML
<?xml version='1.0'?>
<usuarios>
<usuario>
<sUsuarioWS>
user1ws
</sUsuarioWS>
<sPassWS>
user1Passws
</sPassWS>
<sUsername>
username
</sUsername>
<sUsernameOriginal>
username
</sUsernameOriginal>
<sPassword>
passssss1
</sPassword>
<sNombre>
username username
</sNombre>
<sLicencia>
2p32214
</sLicencia>
<sSexo>
Masculino
</sSexo>
<dFechaNac>
1982-12-01
</dFechaNac>
<sMovil>
98569852
</sMovil>
<sEmail>
username @servidor.com
</sEmail>
<iSocioRegistradoTipoPermiso>
2
</iSocioRegistradoTipoPermiso>
</usuario>
</usuarios>
XML;
$params = array('xmlstr' => $xmlstr);
$response = $cliente->call('WmSocioRegistradoActualizar', $params);
print_r($response);
?>