Foros del Web » Programando para Internet » PHP »

Problema con return web service PHP NuSOAP

Estas en el tema de Problema con return web service PHP NuSOAP en el foro de PHP en Foros del Web. Hola a todos, he revisado un montón de temas que hay sobre este tema pero no consigo dar con la solución. He creado un web ...
  #1 (permalink)  
Antiguo 07/02/2013, 12:18
 
Fecha de Ingreso: febrero-2013
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Problema con return web service PHP NuSOAP

Hola a todos, he revisado un montón de temas que hay sobre este tema pero no consigo dar con la solución.

He creado un web service en php para realizar una inserción de datos en una tabla, este paso lo hace correctamente, pero no logro recibir respuesta, es decir el return parece llegarme como vacío. Os dejo todo el código para ver si véis algo que se me esté pasando.

Código en servidor:

Código PHP:
//llamar a la librería
    
require_once ('lib/nusoap.php');
    
//crear server
    
$server = new soap_server;
    
// initialize WSDL support
    
$server->configureWSDL'addNewPromowsdl' 'urn:addNewPromowsdl' );
    
// place schema at namespace with prefix tns
    
$server->wsdl->schemaTargetNamespace 'urn:addNewPromowsdl';
        
    
$server->wsdl->addComplexType(
        
'MySoapObject'
        
'complexType',
        
'struct',
        
'all',
        
'',
        array(
            
'Nombre' => array('name'=>'Nombre','type'=>'xsd:string'),
            
'Apellidos' => array('name'=>'Apellidos','type'=>'xsd:string'),
            
'Telefono' => array('name'=>'Telefono','type'=>'xsd:string'),
            
'Email' => array('name'=>'Email','type'=>'xsd:string'),
            
'Producto' => array('name'=>'Producto','type'=>'xsd:string')
        )
    );
    
    
$server->wsdl->addComplexType(
        
'MySoapObjectArray',
        
'complexType',
        
'array',
        
'',
        
'SOAP-ENC:Array',
        array(),
        array(array(
'ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:MySoapObject[]')),
        
'tns:MySoapObject'
    
);
    
    function 
ProcessMySoapObject($mySoapObjects) {
    
$mso $mySoapObjects[3];
    
$mso['Name'] = "|||";
    return 
$mso;
    }
    
    
$server->register(
        
'addNewPromo',
        array(
'soapObjects'=>'tns:MySoapObjectArray'),
        array(
'return'=>'tns:MySoapObject'),
        
'addNewPromowsdl',
        
'urn:addNewPromowsdl',
        
'rpc',
        
'encoded',
        
'Inserta datos');
    
    function 
addNewPromo($nombre,$apellidos,$telefono,$email,$producto){
        
$myError false;
        
$myErrorText "";
        
$con mysql_connect("localhost","server1t_wserv","W-123-serv"); //Datos del servidor de base de datos usuario y clave
        
if (!$con) {
            
$myError true;
            
$myErrorText 'Could not connect: ' mysql_error();
            return new 
soap_fault($myErrorText);
        }
        if (
$myError==false)
        {
            
mysql_select_db("server1t_wserv"$con); //Nombre de la base de datos
        
            
$sql="INSERT INTO promos (Nombre, Apellidos, Telefono, Email, Producto) 
            VALUES ('$nombre','$apellidos','$telefono','$email','$producto')"
;
            if (!
mysql_query($sql,$con)) {
                
$myError true;
                
$myErrorText mysql_error();
                return new 
soap_fault($myErrorText);
            }
        }
        
mysql_close($con);
           
$result = array('nombre'=>$nombre,'apellidos'=>$apellidos);
          return 
$result;
    }
    
        
// create HTTP listener
    
$server->service($HTTP_RAW_POST_DATA);
    exit(); 
Código en cliente:

Código PHP:
require_once ('lib/nusoap.php');

$param = array( 'nombre' => 'prueba''apellidos' => 'apellido','telefono' => '0349676767','email' => '[email protected]','producto'=>'cosa');

$client = new nusoap_client('http://server1taumaco.com/WS-nusoap/servicio.php');

$response $client->call('addNewPromo',$param);

if(
$client->fault)
{
    echo 
"FAULT: <p>Code: (".$client->faultcode.")</p>";
    echo 
"String: ".$client->faultstring;
}
else
{
    echo 
$response;
    echo 
"Nombre: ".$response['nombre'];
    echo 
"<br>";
    echo 
"Apellidos: ".$response['apellidos'];

Os dejo también la url de prueba.

http://server1taumaco.com/WS-nusoap/insertaPromo.php

Gracias de antemano por la ayuda.



Un saludo.

Última edición por mariogzdz; 07/02/2013 a las 12:23
  #2 (permalink)  
Antiguo 07/02/2013, 13:36
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Problema con return web service PHP NuSOAP

En tu webservice defines que vas a devolver una estructura MySoapObject con nombre, apellidos, telefono etc, pero sólo regresas
$result = array('nombre'=>$nombre,'apellidos'=>$apellidos);

Si bien este pueda no ser el problema, te recomiendo dos cosas:
1. Comprobar que la función del webservice opera correctamente sin imprimir mensajes de error, ya que éstos deforman el xml de respuesta y el cliente no los va a poder entender /parsear.

2. Analiza lo que envías y lo que recibes, y coloca a nusoap en modo depuración:
$client->debug();





echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
  #3 (permalink)  
Antiguo 08/02/2013, 07:44
 
Fecha de Ingreso: febrero-2013
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con return web service PHP NuSOAP

Gracias ocp001a,

He logrado solucionar el problema con añadiendo el código que comentabas, el debug no mostraba errores, pero al ver el request y respuesta me di cuenta de que los datos del array de request estaban puestos con minúsculas mientras que el objeto MySoapObject estaban con mayúsculas. Lo cambié y ya realiza la devolución.

Muchas gracias por todo.
  #4 (permalink)  
Antiguo 08/05/2013, 20:25
 
Fecha de Ingreso: noviembre-2006
Mensajes: 9
Antigüedad: 18 años
Puntos: 0
Respuesta: Problema con return web service PHP NuSOAP

estimado amigo con tu ejemplo la pagina me sigue saliendo en blancoo el cliente.php

estoy trabajando con XAMPP ultima version php5 apache y Nusoap Kit Tool..

he probado de todo pero , solo logro generar bien el server.php con su wdsl.. pero cuando lo quiero consumir sale en blanco.. podrias por favor arreglarlo o decirme si es codigo o las configuraciones del php que no dejan mostrar .. te lo agradeceria. gracias
  #5 (permalink)  
Antiguo 09/05/2013, 01:55
 
Fecha de Ingreso: febrero-2013
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con return web service PHP NuSOAP

Hola Merksaly, te paso el código limpio y que actualmente estoy utilizando:

Primero creamos el servicio web con su función, en este caso de inserción en base de datos.
Código PHP:
Ver original
  1. <?php  
  2.     //llamar a la libreria
  3.     require_once ('lib/nusoap.php');
  4.     //crear server
  5.     $server = new soap_server;
  6.     // initialize WSDL con nombre de la funcion
  7.     $server->configureWSDL( 'addNewPromowsdl' , 'urn:addNewPromowsdl' );
  8.    
  9.     $server->wsdl->schemaTargetNamespace = 'urn:addNewPromowsdl';
  10.        
  11.     $server->wsdl->addComplexType(
  12.         'MySoapObject',
  13.         'complexType',
  14.         'struct',
  15.         'all',
  16.         '',
  17.         array(
  18.             'Codigo' => array('name'=>'Codigo','type'=>'xsd:string') //Declaracion de datos que vamos a devolver
  19.         )
  20.     );
  21.    
  22.     $server->wsdl->addComplexType(
  23.         'ObjectPromo',
  24.         'complexType',
  25.         'struct',
  26.         'all',
  27.         '',
  28.         array(
  29.             'param1' => array('name'=>'param1','type'=>'xsd:string'),
  30.             'param2' => array('name'=>'param2','type'=>'xsd:string'),
  31.                 .
  32.                 .
  33.                 .
  34.                 'paramN' => array('name'=>'paramN','type'=>'xsd:string')
  35.             )
  36.        
  37.     );
  38.    
  39.    
  40.     $server->register(
  41.         'addNewPromo',
  42.         array(
  43.             'param1' => 'xsd:string',
  44.             'param2' => 'xsd:string',
  45.                 .
  46.                 .
  47.         .
  48.                 'paramN' => 'xsd:string'
  49.             ),
  50.         array('return'=>'tns:MySoapObject'),
  51.         'addNewPromowsdl',
  52.         'urn:addNewPromowsdl',
  53.         'rpc',
  54.         'encoded',
  55.         'Inserta datos');
  56.        
  57.     //Metodo de insercion de datos
  58.     function addNewPromo($param1, $param2, ..., $paramN)
  59.     {
  60.         $myError = false;
  61.         $myErrorText = "";
  62.         $con = mysql_connect("servidor","Usuario","clave"); //Datos del servidor de base de datos usuario y clave
  63.         if (!$con) {
  64.             $result = array('Codigo'=>"-1"); //Si falla la conexión devuelve -1
  65.             return $result;
  66.         }
  67.         if ($myError==false)
  68.         {
  69.             mysql_select_db("base de datos", $con); //Nombre de la base de datos
  70.             //Funcion de inserci贸n de datos en la tabla.
  71.             $sql="INSERT INTO tabla (
  72.                     param1,
  73.                     param2,
  74.                     .
  75.                     .
  76.                     .
  77.                     paramN
  78.                     )
  79.  
  80.             VALUES ('$idPromo',
  81.                     '$param1',
  82.                     '$param2',
  83.                     .
  84.                     .
  85.                     .
  86.                     '$paramN')";
  87.             if (!mysql_query($sql,$con)) {
  88.                 $result = array('Codigo'=>"-2"); //Si falla devuelve -2
  89.                 return $result;
  90.             }
  91.         }
  92.         mysql_close($con);
  93.         $result = array('Codigo'=>"1"); //Si es correcto devuelve 1
  94.         return $result;
  95.     }
  96.    
  97.         // create HTTP listener
  98.     $server->service($HTTP_RAW_POST_DATA);
  99.     exit();
  100. ?>

Lo siguiente que creamos es el php que consumirá dicho servicio, viene con las indicaciones de ocp001a para depurar errores.

Código PHP:
Ver original
  1. <?php    
  2. require_once ('lib/nusoap.php');
  3.  
  4.  
  5. $param = array( 'Param1' => 'valor',
  6.         'Param2' => 'valor',
  7.         .
  8.         .
  9.         .
  10.         'ParamN' => 'valor'
  11. );
  12.  
  13. $client = new nusoap_client('ruta/servicio.php');//Ruta donde se encuentra nuestro servicio para consumirlo
  14.  
  15. $response = $client->call('addNewPromo',$param);
  16.  
  17. //Codigo para debugear y ver la respuesta y posibles errores, comentar cuando se comprueba que está correcto el servicio y la llamada
  18. $err = $client->getError();
  19. if ($err) {
  20.     echo '<p><b>Constructor error: ' . $err . '</b></p>';
  21. }
  22. echo '<h2>Request</h2>';
  23. echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
  24. echo '<h2>Response</h2>';
  25. echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
  26. echo htmlspecialchars($client->response, ENT_QUOTES) . '</b></p>';
  27. echo '<p><b>Debug: <br>';
  28. echo htmlspecialchars($client->debug_str, ENT_QUOTES) .'</b></p>';
  29. //Comentar hasta aquí
  30.  
  31. if($client->fault)
  32. {
  33.     echo "FAULT: <p>Code: (".$client->faultcode.")</p>";
  34.     echo "String: ".$client->faultstring;
  35. }
  36. else
  37. {
  38.     //var_dump ($response);
  39.     echo "Codigo: ".$response['Codigo'];
  40. }
  41.          
  42. ?>

Este servicio web está realizado en PHP y para ser consumido desde PHP, para consumirlo desde .NET cambia la segunda parte.

Etiquetas: myslq, nusoap, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.