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
| |||
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 |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Claro que he desarrollado algo pero no lo presente porque quiero desarrollar conocimiento desde cero.
Iniciado por maycolalvarez ¿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. Si algo aqui esta el codigo. PHP ws.php Cita: PHP cliente.php<?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); ?> Cita: PHP index.php<?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>'; } } ?> 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> |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Hola GatorV si muestra el siguiente error: Cita: Gracias Error: XML error parsing SOAP payload on line 2: Invalid document end |
| ||||
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. |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Ya lo borre y sigue saliendo el mismo error.Gracias |
| ||||
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. |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Este es el XML que mostro: Cita: Gracias 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> |
| ||||
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. |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: 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 |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Modifique los codigo y siguen apareciendo los siguientes errores: Cita: ademas algunas veces sale el error o supongo que los anteriores se deben a este: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 Cita: Aqui estan los codigo: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 ws.php Código PHP: Código PHP: Código PHP: |
| ||||
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. |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Al hacer
Iniciado por GatorV 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. Código PHP: Código PHP: Código PHP: Código PHP: Gracias |
| ||||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Lo raro es esto:
Código:
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: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
Código PHP:
Ver original Saludos. |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Al correrlo sin la correcion salen los siguientes errores:
Iniciado por GatorV Lo raro es esto:
Código:
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: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
Código PHP:
Ver original Saludos. Cita: por lo que entiendo que en la funcion obtenerProducto no estra ingresando el parametro por esto: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 Cita: ya que ne la consulta no muestra el parametro que uno ingresa..... titulo, descripcion, precio from producto where id_producto=\n... 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: Código PHP: Código PHP: |
| ||||
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 |
| |||
Respuesta: Web service php para obtencion de datos de la base de datos postgresql Cita: Gracias GatorV ese era el error, aqui esta el codigo de los phps
Iniciado por GatorV El register tengo entendido que tiene que ser igual:
Código PHP:
Ver original ws.php Código PHP: Código PHP: Código PHP: 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 |
| |||
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: |