Foros del Web » Programando para Internet » PHP »

Web service php para obtencion de datos de la base de datos postgresql

Estas en el tema de Web service php para obtencion de datos de la base de datos postgresql en el foro de PHP en Foros del Web. Hola Quiero saber como crear y consumir un web service creado en php con la libreria nusoap para la obtencion de datos de la base ...
  #1 (permalink)  
Antiguo 16/04/2012, 16:33
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Pregunta Web service php para obtencion de datos de la base de datos postgresql

Hola

Quiero saber como crear y consumir un web service creado en php con la libreria nusoap para la obtencion de datos de la base de datos postgresql. Agradeceria un ejemplo claro.

Gracias de antemano.

Codialmente,
Julian Romero
  #2 (permalink)  
Antiguo 16/04/2012, 17:28
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

¿y tienes algo hecho, intentaste hacer algo, buscaste documentación?, aquí en el foro se incentiva a los usuarios que se esfuerzan, no simplemente le damos el código u ejemplos a la medida, si tiene un problema o duda concreto posteelo, en la web puede hallar suficiente documentación para hacer lo que quiere.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 16/04/2012, 18:26
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por maycolalvarez Ver Mensaje
¿y tienes algo hecho, intentaste hacer algo, buscaste documentación?, aquí en el foro se incentiva a los usuarios que se esfuerzan, no simplemente le damos el código u ejemplos a la medida, si tiene un problema o duda concreto posteelo, en la web puede hallar suficiente documentación para hacer lo que quiere.
Claro que he desarrollado algo pero no lo presente porque quiero desarrollar conocimiento desde cero.

Si algo aqui esta el codigo.

PHP ws.php

Cita:
<?php
require_once('lib/nusoap.php');
$server = new soap_server();
$miURL='http://localhost:9090/Prueba';
$server->configureWSDL('obtenerProducto', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;
$server->wsdl->addComplexType('producto','complexType','struct', 'all','',
array(
'idProducto' => array('name' => 'idProducto', 'type' => 'xsd:int'),
'titulo' => array('name' => 'titulo', 'type' => 'xsd:string'),
'descripcion' => array('name' => 'descripcion', 'type' => 'xsd:string' ),
'precio' => array('name' => 'precio', 'type' => 'xsd:int' ),
));

$server->register('obtenerProducto',
array('idProducto' => 'xsd:int'),
array('return'=>'tns:producto'),
$miURL);

function obtenerProducto($id){
$con=pg_connect("host=localhost dbname=prueba user=admin password=123" ) or die("Error en la conexion a la base de datos");
$sql = "select idProducto, titulo, descripcion, precio from producto where idProducto = $id ;";
$busqueda=pg_query($con,$sql) ;
if(pg_num_rows($busqueda)!=0){
while( $row = pg_fetch_object ( $busqueda)) {
$respuesta=array('idProducto' => $row->idProducto,
'titulo' => $row->titulo,
'descripcion' => $row->descripcion,
'precio' => $row->precio);
}
}
return new soapval('return', 'tns:producto', $respuesta);


}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
PHP cliente.php

Cita:
<?php
require_once('lib/nusoap.php');
$l_oClient = new nusoap_client('http://localhost:9090/Prueba/ws.php?wsdl','wsdl');
$err = $l_oClient->getError();
if ($err) {
// Display the error
echo '<p><b>Constructor error: ' . $err . '</b></p>';
// At this point, you know the call that follows will fail
}
$metodoALlamar = 'obtenerProducto';
$error = $l_oClient->getError();
if ($error) {
echo '<pre style="color: red">' . $error . '</pre>';
echo '<p style="color:red;'>htmlspecialchars($l_oClient->getDebug(), ENT_QUOTES).'</p>';
die();
}

$parametro = $_POST['idProducto'];


$l_stResult = $l_oClient->call(
$metodoALlamar,
array('id' => $parametro),
"uri:http://localhost:9090/Prueba/ws.php",
"uri:http://localhost:9090/Prueba/ws.php/$metodoALlamar");

// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($l_oClient->fault) {
echo '<b>Error: ';
print_r($l_stResult);
echo '</b>';
} else {
$error = $l_oClient->getError();
if ($error) {
echo '<b style="color: red">Error: ' . $error . '</b>';
} else {
print '<h1>Producto :</h1>'
. '<br>Id Producto: ' . $l_stResult['idProducto']
. '<br>Titulo : ' . $l_stResult['titulo']
. '<br>Descripcion ' . $l_stResult['descripcion']
. '<br>Precio ' . $l_stResult['precio'];


echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($_oClient->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($_oClient->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($_oClient->debug_str, ENT_QUOTES) . '</pre>';

}
}

?>
PHP index.php

Cita:
<html>
<head>
<title>Prueba</title>
<Script languaje="javascript">
function validarFormulario(formulario){
error=false
if(!error&&formulario.idProducto.value==""){
alert('El UserId es obligatorio')
formulario.userid.focus()
error=true
}
return !error
}
</script>
</head>
<body>
<center>
<form name="confirmarpar" action="cliente.php" method="POST">
<table>
<tr>
<td>UserID</td>
<td><input type="text" name="idProducto" size="20" maxlength="20"/></td>

</tr>
<tr>
<td><input type="submit" name="enviar" value="Enviar" onClick="return validarFormulario(confirmarpar)"/></td>
<td><input type="reset" name="borrar" value="Borrar"/></td>
</tr>
</table>

</form>
</center>
</body>

</html>
  #4 (permalink)  
Antiguo 16/04/2012, 18:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

¿Te muestra algún error?
  #5 (permalink)  
Antiguo 16/04/2012, 18:44
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
¿Te muestra algún error?
Hola GatorV si muestra el siguiente error:

Cita:
Error: XML error parsing SOAP payload on line 2: Invalid document end
Gracias
  #6 (permalink)  
Antiguo 16/04/2012, 18:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Elimina el ?> final de tu script ws.php ya que no es necesario, puede que estés enviando caracteres que no son necesarios.

Saludos.
  #7 (permalink)  
Antiguo 16/04/2012, 20:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
Elimina el ?> final de tu script ws.php ya que no es necesario, puede que estés enviando caracteres que no son necesarios.

Saludos.
Ya lo borre y sigue saliendo el mismo error.

Gracias
  #8 (permalink)  
Antiguo 16/04/2012, 21:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Prueba cargar la URL: http://localhost:9090/Prueba/ws.php?wsdl y verifica sí el XML generado es correcto o no.

Saludos.
  #9 (permalink)  
Antiguo 16/04/2012, 21:46
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
Prueba cargar la URL: [url]http://localhost:9090/Prueba/ws.php?wsdl[/url] y verifica sí el XML generado es correcto o no.

Saludos.
Este es el XML que mostro:

Cita:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://localhost:9090/Prueba" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://localhost:9090/Prueba">
<types>
<xsd:schema targetNamespace="http://localhost:9090/Prueba">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
<xsd:complexType name="producto">
<xsd:all>
<xsd:element name="idProducto" type="xsd:int"/>
<xsd:element name="titulo" type="xsd:string"/>
<xsd:element name="descripcion" type="xsd:string"/>
<xsd:element name="precio" type="xsd:int"/>
</xsd:all>
</xsd:complexType>
</xsd:schema>
</types>
<message name="obtenerProductoRequest">
<part name="idProducto" type="xsd:int"/>
</message>
<message name="obtenerProductoResponse">
<part name="return" type="tns:producto"/>
</message>
<portType name="obtenerProductoPortType">
<operation name="obtenerProducto">
<input message="tns:obtenerProductoRequest"/>
<output message="tns:obtenerProductoResponse"/>
</operation>
</portType>
<binding name="obtenerProductoBinding" type="tns:obtenerProductoPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="obtenerProducto">
<soap:operation soapAction="http://localhost/Prueba/ws.php/obtenerProducto" style="rpc"/>
<input>
<soap:body use="encoded" namespace="http://localhost:9090/Prueba" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="http://localhost:9090/Prueba" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="obtenerProducto">
<port name="obtenerProductoPort" binding="tns:obtenerProductoBinding">
<soap:address location="http://localhost:9090/Prueba/ws.php"/>
</port>
</service>
</definitions>
Gracias
  #10 (permalink)  
Antiguo 16/04/2012, 22:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

El XML se ve bien pero es complicado ver que parte falla, te recomiendo uses una herramienta como SoapUI para verificar que todo esta correcto en tu web service y ya luego te puedas mover a la parte del cliente.

Saludos.
  #11 (permalink)  
Antiguo 16/04/2012, 23:57
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
El XML se ve bien pero es complicado ver que parte falla, te recomiendo uses una herramienta como [URL="http://www.soapui.org/"]SoapUI[/URL] para verificar que todo esta correcto en tu web service y ya luego te puedas mover a la parte del cliente.

Saludos.
Revise el log de error de apache y encontré que el error sucedía por el parámetro que ingresaba en la consulta sql y al hacerla apache esta devolvía error por ende la respuesta era null. Identifique que el error esta en el php cliente.php porque al hacer el $_POST['idProducto'] dice que no esta definido en index.php, estoy trabajando en resolverlo y después subo el código completo, cualquier ayuda con el problema agradecería tu ayuda.

Gracias
  #12 (permalink)  
Antiguo 17/04/2012, 01:26
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
El XML se ve bien pero es complicado ver que parte falla, te recomiendo uses una herramienta como [URL="http://www.soapui.org/"]SoapUI[/URL] para verificar que todo esta correcto en tu web service y ya luego te puedas mover a la parte del cliente.

Saludos.
Modifique los codigo y siguen apareciendo los siguientes errores:
Cita:
PHP Warning: pg_query() [<a href='function.pg-query'>function.pg-query</a>]: Query failed: ERROR: error de sintaxis al final de la entrada\nLINE 1: ...titulo, descripcion, precio from producto where id_producto=\n ^ in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 6
PHP Warning: pg_num_rows() expects parameter 1 to be resource, boolean given in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 7
PHP Notice: Undefined variable: respuesta in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 15
ademas algunas veces sale el error o supongo que los anteriores se deben a este:

Cita:
PHP Notice: Undefined index: idproduc in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\cliente.php on line 4, referer: http://localhost:9090/Prueba/index.php
Aqui estan los codigo:

ws.php
Código PHP:
<?php
require_once('lib/nusoap.php');
function 
obtenerProducto($id){
    
$con=pg_connect("host=localhost dbname=prueba user=admin password=123" ) or die("Error en la conexion a la base de datos");
    
$sql="select id_producto, titulo, descripcion, precio from producto where id_producto=".$id."";
    
$busqueda=pg_query($con,$sql) ;    
    if(
pg_num_rows($busqueda)!=0){
        while( 
$row pg_fetch_object $busqueda)) {    
            
$respuesta=array('id_producto' => $row->id_producto,
            
'titulo' => $row->titulo,
            
'descripcion' => $row->descripcion,
            
'precio' => $row->precio);
        }
    }
    return new 
soapval('return''tns:producto'$respuesta);
}
$server = new soap_server();
$miURL='http://localhost:9090/Prueba';
$server->configureWSDL('obtenerProducto'$miURL);   
$server->wsdl->schemaTargetNamespace=$miURL;       
$server->wsdl->addComplexType('producto','complexType','struct','all','',
               array(
'id_producto' => array('name' => 'id_producto''type' => 'xsd:int'),
                     
'titulo' => array('name' => 'titulo''type' => 'xsd:string'),
                     
'descripcion' => array('name' => 'descripcion''type' => 'xsd:string' ),
                     
'precio' => array('name' => 'precio''type' => 'xsd:int' ),
                     ));                      
$server->register('obtenerProducto',
                  array(
'id_producto' => 'xsd:int'),
                  array(
'return'=>'tns:producto'),
                  
$miURL);                            

// Use the request to (try to) invoke the service
if (isset($HTTP_RAW_POST_DATA))
{
    
$input $HTTP_RAW_POST_DATA;
}
else
{
    
$input implode("\r\n"file('php://input'));
}
$server->service($input);
exit;
?>
cliente.php

Código PHP:
<?php  
ini_set
('soap.wsdl_cache_enabled''0'); 
require_once(
'lib/nusoap.php'); 
$parametro=$_POST['idproduc'];
echo 
$parametro;
$l_oClient = new soapclient('http://localhost:9090/Prueba/ws.php?wsdl','wsdl');
$err $l_oClient->getError();
if (
$err) {
    
// Display the error
    
echo '<p><b>Constructor error: ' $err '</b></p>';
    
// At this point, you know the call that follows will fail
}
$metodoALlamar 'obtenerProducto';   
$l_stResult $l_oClient->call(
                
$metodoALlamar,
                array(
'id' => $parametro),
                
"http://localhost:9090/Prueba",
                
"http://localhost:9090/Prueba/ws.php/$metodoALlamar");     
// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($l_oClient->fault) {
 echo 
'<b>Error: ';
 
print_r($l_stResult);
 echo 
'</b>';
} else {
 
$error $l_oClient->getError();
 if (
$error) {
 echo 
'<b style="color: red">Error: ' $error '</b>';
 } else {
 print 
'<h1>Producto :</h1>'
           
'<br>Id Producto: '  $l_stResult['id_producto']
           . 
'<br>Titulo : '   $l_stResult['titulo']
           . 
'<br>Descripcion ' $l_stResult['descripcion']
           . 
'<br>Precio ' $l_stResult['precio'];
echo 
'<h2>Request</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->requestENT_QUOTES) . '</pre>';
echo 
'<h2>Response</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->responseENT_QUOTES) . '</pre>';
echo 
'<h2>Debug</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->debug_strENT_QUOTES) . '</pre>';
 }
}   
?>
index.php
Código PHP:
<html>
    <
head>
        <
title>Prueba</title>
        <
Script languaje="javascript">
            function 
validarFormulario(formulario){
                
error=false
                
if(!error&&formulario.idproduc.value==""){
                    
alert('El UserId es obligatorio')
                    
formulario.idproduc.focus()
                    
error=true    
                
}
                return !
error
            
}
        
</script>
    </head>
    <body>
        <center>
        <form name="confirmarpar" action="cliente.php" method="POST">
            <table>
                <tr>
                    <td>UserID</td>
                    <td><input type="text" name="idproduc" size="20" maxlength="20"/></td>
    
                </tr>    
                <tr>
                    <td><input type="submit" name="enviar" value="Enviar"  onClick="return validarFormulario(confirmarpar)"/></td>
                    <td><input type="reset" name="borrar" value="Borrar"/></td>
                </tr>    
            </table>

        </form>
        </center>        
    </body>
    
</html> 
  #13 (permalink)  
Antiguo 17/04/2012, 09:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Pues tu formulario se ve bien, y sí parece que todos los errores suceden debido a que no estas enviando el parámetro, revisa bien tu formulario, debe de ser POST y debes de rescatar la variable correctamente, realiza un var_dump($_POST) en tu pagina cliente para que veas que datos están llegando.

Saludos.
  #14 (permalink)  
Antiguo 17/04/2012, 11:08
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
Pues tu formulario se ve bien, y sí parece que todos los errores suceden debido a que no estas enviando el parámetro, revisa bien tu formulario, debe de ser POST y debes de rescatar la variable correctamente, realiza un var_dump($_POST) en tu pagina cliente para que veas que datos están llegando.

Saludos.
Al hacer
Código PHP:
var_dump($_POST); 
El resultado es
Código PHP:
array(2) { ["idproduc"]=> string(1"1" ["enviar"]=> string(6"Enviar" 
Tambien hice
Código PHP:
var_dump($parametro); 
Y el resultado fue
Código PHP:
string(1"1" 
Por lo que supongo que error es en el cliente cuando se ingresa el parámetro a la función 'obtenerProducto', pero no se como solucionarlo.

Gracias
  #15 (permalink)  
Antiguo 17/04/2012, 11:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Lo raro es esto:
Código:
PHP Notice: Undefined index: idproduc in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\cliente.php on line 4, referer: http://localhost:9090/Prueba/index.php
Ya que te esta diciendo que no existe el indice idproduc así que seguramente cliente no envía el parámetro cuando pasa ese notice, agrega un chequeo de errores para evitar eso, ej:
Código PHP:
Ver original
  1. if (!isset($_POST['idproduc']) || empty($_POST['idproduc'])) {
  2.         die('Se necesita un parámetro');
  3. }

Saludos.
  #16 (permalink)  
Antiguo 17/04/2012, 11:55
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
Lo raro es esto:
Código:
PHP Notice: Undefined index: idproduc in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\cliente.php on line 4, referer: http://localhost:9090/Prueba/index.php
Ya que te esta diciendo que no existe el indice idproduc así que seguramente cliente no envía el parámetro cuando pasa ese notice, agrega un chequeo de errores para evitar eso, ej:
Código PHP:
Ver original
  1. if (!isset($_POST['idproduc']) || empty($_POST['idproduc'])) {
  2.         die('Se necesita un parámetro');
  3. }

Saludos.
Al correrlo sin la correcion salen los siguientes errores:

Cita:
PHP Warning: pg_query() [<a href='function.pg-query'>function.pg-query</a>]: Query failed: ERROR: error de sintaxis al final de la entrada\nLINE 1: ...titulo, descripcion, precio from producto where id_producto=\n ^ in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 6
PHP Warning: pg_num_rows() expects parameter 1 to be resource, boolean given in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 7
PHP Notice: Undefined variable: respuesta in C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\Prueba\\ws.php on line 15
por lo que entiendo que en la funcion obtenerProducto no estra ingresando el parametro por esto:

Cita:
.... titulo, descripcion, precio from producto where id_producto=\n...
ya que ne la consulta no muestra el parametro que uno ingresa.

Haciendo la correccion que me sugeriste no muestra el mensaje de 'falta parametro' lo que me hace pensar que el cliente si esta recibiendo el valor de idproduc y puede confirmar que el error esta cuando uno envia el parametro a la funcion por medio del cliente.

Código PHP:
$metodoALlamar 'obtenerProducto';   
$l_stResult $l_oClient->call(
                
$metodoALlamar,
                array(
'id' => $parametro),
                
"http://localhost:9090/Prueba",
                
"http://localhost:9090/Prueba/ws.php/$metodoALlamar"); 
o en la funcion de ws.php

Código PHP:
function obtenerProducto($id){
    
$con=pg_connect("host=localhost dbname=prueba user=admin password=123" ) or die("Error en la conexion a la base de datos");
    
$sql="select id_producto, titulo, descripcion, precio from producto where id_producto=".$id."";
    
$busqueda=pg_query($con,$sql) ;    
    if(
pg_num_rows($busqueda)!=0){
        while( 
$row pg_fetch_object $busqueda)) {    
            
$respuesta=array('id_producto' => $row->id_producto,
            
'titulo' => $row->titulo,
            
'descripcion' => $row->descripcion,
            
'precio' => $row->precio);
        }
    }
    return new 
soapval('return''tns:producto'$respuesta);

o en el register de ws.php

Código PHP:
$server->register('obtenerProducto',
                  array(
'id_producto' => 'xsd:string'),
                  array(
'return'=>'tns:producto'),
                  
$miURL); 
Gracias
  #17 (permalink)  
Antiguo 17/04/2012, 12:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

El register tengo entendido que tiene que ser igual:
Código PHP:
Ver original
  1. $server->register('obtenerProducto',
  2.                   array('id_producto' => 'xsd:string'),  // mal
  3.                   array('id' => 'xsd:string'), // bien
  4.                   array('return'=>'tns:producto'),
  5.                   $miURL);
  #18 (permalink)  
Antiguo 17/04/2012, 15:40
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Cita:
Iniciado por GatorV Ver Mensaje
El register tengo entendido que tiene que ser igual:
Código PHP:
Ver original
  1. $server->register('obtenerProducto',
  2.                   array('id_producto' => 'xsd:string'),  // mal
  3.                   array('id' => 'xsd:string'), // bien
  4.                   array('return'=>'tns:producto'),
  5.                   $miURL);
Gracias GatorV ese era el error, aqui esta el codigo de los phps

ws.php

Código PHP:
<?php
require_once('lib/nusoap.php');
function 
obtenerProducto($id){
    
$con=pg_connect("host=localhost dbname=prueba user=admin password=123" ) or die("Error en la conexion a la base de datos");
    
$sql="select id_producto, titulo, descripcion, precio from producto where id_producto=".$id."";
    
$busqueda=pg_query($con,$sql) ;    
    if(
pg_num_rows($busqueda)!=0){
        while( 
$row pg_fetch_object $busqueda)) {    
            
$respuesta=array('id_producto' => $row->id_producto,
            
'titulo' => $row->titulo,
            
'descripcion' => $row->descripcion,
            
'precio' => $row->precio);
        }
    }
    return new 
soapval('return''tns:producto'$respuesta);
}
$server = new soap_server();
$miURL='http://localhost:9090/Prueba';
$server->configureWSDL('obtenerProducto'$miURL);   
$server->wsdl->schemaTargetNamespace=$miURL;       
$server->wsdl->addComplexType('producto','complexType','struct','all','',
               array(
'id_producto' => array('name' => 'id_producto''type' => 'xsd:int'),
                     
'titulo' => array('name' => 'titulo''type' => 'xsd:string'),
                     
'descripcion' => array('name' => 'descripcion''type' => 'xsd:string' ),
                     
'precio' => array('name' => 'precio''type' => 'xsd:int' ),
                     ));                      
$server->register('obtenerProducto',
                  array(
'id' => 'xsd:int'),
                  array(
'return'=>'tns:producto'),
                  
$miURL);                            

// Use the request to (try to) invoke the service
if (isset($HTTP_RAW_POST_DATA))
{
    
$input $HTTP_RAW_POST_DATA;
}
else
{
    
$input implode("\r\n"file('php://input'));
}
$server->service($input);
exit;
?>
cliente.php

Código PHP:
<?php  
ini_set
('soap.wsdl_cache_enabled''0'); 
require_once(
'lib/nusoap.php'); 
$parametro=$_POST['idproduc'];
$l_oClient = new nusoap_client('http://localhost:9090/Prueba/ws.php?wsdl','wsdl');
$err $l_oClient->getError();
if (
$err) {
    
// Display the error
    
echo '<p><b>Constructor error: ' $err '</b></p>';
    
// At this point, you know the call that follows will fail
}
$metodoALlamar 'obtenerProducto';   
$l_stResult $l_oClient->call(
                
$metodoALlamar,
                array(
'id' => $parametro),
                
"http://localhost:9090/Prueba",
                
"http://localhost:9090/Prueba/ws.php/$metodoALlamar");     
// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($l_oClient->fault) {
 echo 
'<b>Error: ';
 
print_r($l_stResult);
 echo 
'</b>';
} else {
 
$error $l_oClient->getError();
 if (
$error) {
 echo 
'<b style="color: red">Error: ' $error '</b>';
 } else {
 print 
'<h1>Producto :</h1>'
           
'<br>Id Producto: '  $l_stResult['id_producto']
           . 
'<br>Titulo : '   $l_stResult['titulo']
           . 
'<br>Descripcion ' $l_stResult['descripcion']
           . 
'<br>Precio ' $l_stResult['precio'];
echo 
'<h2>Request</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->requestENT_QUOTES) . '</pre>';
echo 
'<h2>Response</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->responseENT_QUOTES) . '</pre>';
echo 
'<h2>Debug</h2>';
echo 
'<pre>' htmlspecialchars($l_oClient->debug_strENT_QUOTES) . '</pre>';
 }
}   
?>
index.php

Código PHP:
<html>
    <
head>
        <
title>Prueba</title>
        <
Script languaje="javascript">
            function 
validarFormulario(formulario){
                
error=false
                
if(!error&&formulario.idproduc.value==""){
                    
alert('El UserId es obligatorio')
                    
formulario.idproduc.focus()
                    
error=true    
                
}
                return !
error
            
}
        
</script>
    </head>
    <body>
        <center>
        <form name="confirmarpar" action="cliente.php" method="POST">
            <table>
                <tr>
                    <td>UserID</td>
                    <td><input type="text" name="idproduc" size="20" maxlength="20"/></td>
    
                </tr>    
                <tr>
                    <td><input type="submit" name="enviar" value="Enviar"  onClick="return validarFormulario(confirmarpar)"/></td>
                    <td><input type="reset" name="borrar" value="Borrar"/></td>
                </tr>    
            </table>

        </form>
        </center>        
    </body>
    
</html> 
Gracias.

Otra pregunta que tengo es como generar codigos QR en php y guardarlos, se que hay una libreria que se llama phpqrcode y hay una version completa que es la de qrlib.php y una reducida phpqrcode.php pero al desarrollar un ejemplo el comando "QRcode::png('Texto');" aparece con error de sintaxis, no he encontrado un ejemplo completo para probar esta libreria.


Gracias

Última edición por julianrb90; 17/04/2012 a las 15:52
  #19 (permalink)  
Antiguo 06/08/2012, 13:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 1
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Web service php para obtencion de datos de la base de datos postgresql

Buenas tardes, he estado tratando de implementar el ejemplo pero con una adaptacion a una db en postgresql y se me presenta (Error: Response not of type text/xml: text/html).

Codigo ejemplo

server.php:

require_once('nusoap.php');
function obtenerEstado($id){
$con=pg_connect("host=localhost dbname=prueba user=root password=123" ) or die("Error en la conexion a la base de datos");
$sql="select id, descripcion from estado where id='$id'";
$busqueda=pg_query($con,$sql) ;
if(pg_num_rows($busqueda)!=0){
while( $row = pg_fetch_object ( $busqueda)) {
$respuesta=array('id' => $row->id,
'descripcion' => $row->descripcion);
}
}
return new soapval('return', 'tns:estado', $respuesta);
}
$server = new soap_server();
$miURL='http://localhost/web_service';
$server->configureWSDL('obtenerEstado', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;
//$server->wsdl->addComplexType('estado','complexType','struct','a ll','',
$server->wsdl->addComplexType('estado','complexType','array','se quence','',
array('id' => array('name' => 'id', 'type' => 'xsd:int'),
'descripcion' => array('name' => 'descripcion', 'type' => 'xsd:string' )
));
$server->register('obtenerEstado',
array('id' => 'xsd:int'),
array('return'=>'tns:estado'),
$miURL);


// Use the request to (try to) invoke the service
if (isset($HTTP_RAW_POST_DATA))
{
$input = $HTTP_RAW_POST_DATA;
}
else
{
$input = implode("\r\n", file('php://input'));
}
$server->service($input);
exit;

?>


cliente.php:

ini_set('soap.wsdl_cache_enabled', '0');
require_once('nusoap.php');
$parametro=$_POST['id'];
$l_oClient = new nusoap_client('http://localhost/web_service/server.php?wsdl','wsdl');
$err = $l_oClient->getError();
if ($err) {
// Display the error
echo '<p><b>Constructor error: ' . $err . '</b></p>';
// At this point, you know the call that follows will fail
}
$metodo = 'obtenerEstado';
$l_stResult = $l_oClient->call(
$metodo,
array('id' => $parametro),
"http://localhost/web_service",
"http://localhost/web_service/server.php/$metodo");
// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($l_oClient->fault) {
echo '<b>Error: ';
print_r($l_stResult);
echo '</b>';
} else {
$error = $l_oClient->getError();
if ($error) {
echo '<b style="color: red">Error: ' . $error . '</b>';
} else {
print '<h1>Estado :</h1>'
. '<br>Id: ' . $l_stResult['id']
. '<br>Descripcion ' . $l_stResult['descripcion'];
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($l_oClient->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($l_oClient->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($l_oClient->debug_str, ENT_QUOTES) . '</pre>';
}
}
?>

index.php

<html>
<head>
<title>Prueba</title>
<Script languaje="javascript">
function validarFormulario(formulario){
error=false
if(!error&&formulario.idproduc.value==""){
alert('El UserId es obligatorio')
formulario.idproduc.focus()
error=true
}
return !error
}
</script>
</head>
<body>
<center>
<form name="confirmarpar" action="cliente.php" method="POST">
<table>
<tr>
<td>Estado id</td>
<td><input type="text" name="id" size="20" maxlength="20"/></td>

</tr>
<tr>
<td><input type="submit" name="enviar" value="Enviar" onClick="return validarFormulario(confirmarpar)"/></td>
<td><input type="reset" name="borrar" value="Borrar"/></td>
</tr>
</table>

</form>
</center>
</body>

</html>

Etiquetas: nusoap, postgresql, web-service
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:23.