configureWSDL("cidit_service", PAG); //--------- funciones auxiliares function limpiaClave($clave){ return intval(str_ireplace(array("ad", "al", "do"), array("","",""), $clave)); } //-------- complex type //Create a complex types $server->wsdl->addComplexType('UsuarioComplex', 'complexType', 'struct', 'all','', array( 'usuario_nombre' => array('name' => 'usuario_nombre','type' => 'xsd:string'), 'usuario_apellidos' => array('name' => 'usuario_apellidos','type' => 'xsd:string'), 'usuario_clave' => array('name' => 'usuario_clave','type' => 'xsd:string'), 'usuario_id' => array('name' => 'usuario_id','type' => 'xsd:integer'), 'usuario_esProfesor' => array('name' => 'usuario_esProfesor','type' => 'xsd:boolean'), 'usuario_esAdministrativo' => array('name' => 'usuario_esAdministrativo','type' => 'xsd:boolean') ) ); $server->wsdl->addComplexType('UsuariosList', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array( array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:UsuarioComplex[]') ), 'tns:UsuarioComplex' ); $server->wsdl->addComplexType('ClaveList', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array( array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'xsd:integer[]') ), 'xsd:integer[]' ); //-------- funciones del webservice function valida_user($user = "", $pass = ""){ global $pdo; try { if($user == 'ad012478' && $pass == "cidit2020"){ $error = false; }else{ $client = new nusoap_client('http://200.13.89.2/validacion.php?wsdl', 'wsdl'); $error = $client->getError(); $resultMessage = ""; if (!$error) { $result = $client->call("valida_user", array($user, $pass)); if ($client->fault) { $error = true; $resultMessage = "Error al validar usuario"; } else { $error = $client->getError(); if (!$error && !$result) { $error = true; $resultMessage = "El usuario/contraseña es incorrecto"; } } } } if(!$error){//Credenciales correctas //Busca si existe en BD $usr_db = limpiaClave($user); $stmt = $pdo->prepare('Select * from fs_validaclaveulsa_all(:clave) AS "Usuario_id"'); $stmt->bindParam(":clave", $usr_db); if(!$stmt->execute()){ $error = true; $resultMessage = "Error al validar usuario en la base de datos"; }else{ $usr_rs = $stmt->fetch();//Devuelve sólo 1 resultado $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion $stmt = $pdo->prepare('Select * from fs_usuario(:id)'); $stmt->bindParam(":id", $usr_rs["Usuario_id"]); if(!$stmt->execute()){ $error = true; $resultMessage = "Error al obtener la información del usuario en la base de datos"; }else{ $rs = $stmt->fetch();//Devuelve sólo 1 resultado $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion return array( 'error' => false, 'resultMessage' => "OK", 'usuario_nombre' => $rs["Usuario_nombre"], 'usuario_apellidos' => $rs["Usuario_apellidos"], 'usuario_clave' => $usr_db, 'usuario_id' => $usr_rs["Usuario_id"], "usuario_esProfesor" => $rs["es_Profesor"], 'usuario_esAdministrativo' => $rs["es_Administrativo"], 'usuario_esAlumno' => !($rs["es_Administrativo"] || $rs["es_Profesor"]) ); } } } }catch(PDOException $e) { $resultMessage = "Error en la conexión a la base de datos"; } return array( 'error' => true, 'resultMessage' => $resultMessage, 'usuario_nombre' => "", 'usuario_apellidos' => "", 'usuario_clave' => "", 'usuario_id' => -1, "usuario_esProfesor" => false, 'usuario_esAdministrativo' => false ); } function busca_user($token, $claveArr){ global $pdo; if($token == SECURITY){ try { //Busca si existe en BD $resultUsr = array(); foreach($claveArr as $clave){ $stmt = $pdo->prepare('Select * from fs_usuariobusca(1, NULL, :clave, NULL, 1, 0, NULL)'); $stmt->bindParam(":clave", $clave); if(!$stmt->execute()){ $error = true; $resultMessage = "Error al obtener clave ".$clave." en la base de datos"; }else{ $usr_rs = $stmt->fetchAll();//Devuelve todo para validar clave completa $stmt->closeCursor(); // cierra conexion de resultado $stmt = null; // cierra conexion foreach($usr_rs as $rs){ if(intval($rs["Usuario_claveULSA"]) == intval($clave) && intval($clave) != 0){ $resultUsr[]= array( 'usuario_nombre' => $rs["Usuario_nombre"], 'usuario_apellidos' => $rs["Usuario_apellidos"], 'usuario_clave' => intval($clave), 'usuario_id' => $rs["Usuario_id"], "usuario_esProfesor" => $rs["es_Profesor"], 'usuario_esAdministrativo' => $rs["es_Administrativo"] ); } } } }//foreach return array('error' => false, 'resultMessage' => "OK", 'usuarios_array' => $resultUsr ); }catch(PDOException $e) { $resultMessage = "Error en la conexión a la base de datos"; } } return array( 'error' => true, 'resultMessage' => $resultMessage, 'usuarios_array' => array() ); } // *** Parametros de salida ***** $server->register("valida_user", array("usr" => "xsd:string", "pass" => "xsd:string"),//recibe array('error' => 'xsd:boolean', 'resultMessage'=>'xsd:string', 'usuario_nombre' => 'xsd:string', 'usuario_apellidos' => 'xsd:string', 'usuario_clave' => 'xsd:string', 'usuario_id' => 'xsd:integer', 'usuario_esProfesor' => 'xsd:boolean', 'usuario_esAdministrativo' => 'xsd:boolean' ),//regresa PAG, PAG."#valida_user", "rpc", "encoded", "Recibe usuario y contraseña, valida cuenta de windows y regresa información básica del usuario"); $server->register("busca_user", array("token"=>"xsd:string", "claveArr" => "tns:ClaveList"),//recibe array('error' => 'xsd:boolean', 'resultMessage'=>'xsd:string', 'usuarios_array' => 'tns:UsuariosList'),//regresa PAG, PAG."#busca_user", "rpc", "encoded", "Recibe arreglo de claves ULSA, regresa información básica de los usuarios en el arreglo usuarios_array"); @$server->service(file_get_contents("php://input")); ?>