Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/09/2012, 15:55
uchihah
 
Fecha de Ingreso: enero-2010
Ubicación: Barcelona, España
Mensajes: 57
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Forzar response tipo XML en WS nusoap

Ya lo he resuelto, despues de mucho pelo perdido aki les dejo el codigo por si a alguien le hace falta, el tema es que cuando trabajamos con SOAP necesitamos registrar los namespace para poder acceder a los elementos asi ke el codigo me quedo de la siguiente forma:
Código PHP:
Ver original
  1. function WmSocioRegistradoInsertar($xmlstr){    
  2.     $error = 0;
  3.     $totalInsertados = 0;
  4.     $xml = @simplexml_load_string($xmlstr);
  5.     $xml->registerXPathNamespace('ns', 'http://www.namespace.com/');    
  6.     if($xml->xpath('//ns:oWmSocioRegistradoInsertarIn')){
  7.         foreach ($xml->children('http://schemas.xmlsoap.org/soap/envelope/')->children('http://www.namespace.com/')->WmSocioRegistradoInsertar->oWmSocioRegistradoInsertarIn as $cliente){        
  8.             $sUsuarioWS = trim($cliente->sUsuarioWS);
  9.             $sPassWS = trim($cliente->sPassWS);      
  10.             $sUsername = trim($cliente->sUsername);
  11.             $sPassword = trim($cliente->sPassword);
  12.             $sNombre = trim($cliente->sNombre);
  13.             $sLicencia = trim($cliente->sLicencia);
  14.             $sSexo = trim($cliente->sSexo);
  15.             $dFechaNac = trim($cliente->dFechaNac);
  16.             $sMovil = trim($cliente->sMovil);
  17.             $sEmail= trim($cliente->sEmail);
  18.             $iSocioRegistradoTipoPermiso = trim((int)$cliente->iSocioRegistradoTipoPermiso);      
  19.             if (($sUsername != "")
  20.                 && ($iSocioRegistradoTipoPermiso != "")
  21.                 && ($iSocioRegistradoTipoPermiso != 0)
  22.                 && (is_numeric($iSocioRegistradoTipoPermiso))){    
  23.                     if (!encontrando($sUsername)){
  24.                         if(insertando($sUsuarioWS,$sPassWS,$sUsername,$sPassword,$sNombre,$sLicencia,$sSexo,$dFechaNac,$sMovil,$sEmail,$iSocioRegistradoTipoPermiso))
  25.                            $totalInsertados++;                                            
  26.                     }
  27.                 }else{
  28.                     $error = 1;
  29.                 }
  30.                
  31.         }            
  32.     }else{
  33.         $error = 2;        
  34.     }
  35.     if ($error == 1){
  36.         $error_msj = "Ha dejado campos obligatorios vac&iacute;os &oacute; con errores!<br />";
  37.         $salida .= "Se han insertado (".$totalInsertados.") registros.";
  38.     }elseif($error == 2){
  39.         $error_msj = html_entity_decode("No se ha encontrado el contenedor <oWmSocioRegistradoInsertarIn></oWmSocioRegistradoInsertarIn> en su entrada");
  40.         $salida = "Se han insertado (".$totalInsertados.") registros.";
  41.     }else{
  42.         $salida = "Se han insertado (".$totalInsertados.") registros.";
  43.     }
  44.     $contenido = '<?xml version="1.0" encoding="UTF-8"?>';
  45.     $contenido .= '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
  46.     $contenido .= '<soap:Body><WmSocioRegistradoInsertarResponse xmlns="http://www.namespace.com/">';
  47.     $contenido .= '<WmSocioRegistradoInsertarResult>';
  48.     $contenido .= '<oError>';
  49.     $contenido .= '<iError>1</iError><sMensaje></sMensaje>';
  50.     $contenido .= '</oError>';
  51.     $contenido .= '<oResp>';
  52.     if($error == 0){
  53.         $contenido .= '<iResp>1</iResp><sMensaje>Correcto</sMensaje>';    
  54.     }else{
  55.         $contenido .= '<iResp>1</iResp><sMensaje>'.$error_msj.'</sMensaje>';            
  56.     }    
  57.     $contenido .= '</oResp>';
  58.     $contenido .= '</WmSocioRegistradoInsertarResult>';
  59.     $contenido .= '</WmSocioRegistradoInsertarResponse>';
  60.     $contenido .= '</soap:Body></soap:Envelope>';    
  61.     return new soapval('return', 'xsd:string', $contenido);
  62. }
un saludo