Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/05/2013, 01:55
mariogzdz
 
Fecha de Ingreso: febrero-2013
Mensajes: 4
Antigüedad: 11 años, 2 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.