Ya
hace un tiempo realice un
artículo sobre servicios web con PHP (utilizando NuSOAP), el
mismo se puede acceder en WebServices
con PHP usando NuSOAP, el mismo
ya ha quedado un poco obsoleto debido a que el servidor que alojaba el
webservice ya no lo contiene más. Por tal motivo y debido a
que uno de los inconvenientes principales cuando uno se esta iniciando
en el tema de los webservices con PHP, principalmente con NuSOAP, es
encontrar como realizar el módulo servidor. En este primer
post, decidí subir un ejemplo sencillo de
comunicación entre un módulo servidor que provee
expone una función, y un módulo cliente que las
consume.
Introducción al ejemplo
No voy a exponer demasiados detalles con respecto a que son los WebServices, para ello pueden acceder al enlace que mencione anteriormente (WebServices con PHP usando NuSOAP). Solamente me limitare a explicar un poco el funcionamiento del mismoPara el ejemplo, estoy utilizando la siguiente estructura de directorios
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhROEtcXsukju0Q6zi15Mi4pvnd1P8g_l6r8FkBlT5Ytn4emC-XwjC6-5o378wR2uD-gWcQ2fVavVD2f91kT5qJ-H_3cqmuoHSlzYr31q025dkcJjtSvrtJQbx4JTdPCZ9O62YB/s128/estructuraDirectoriosNusoap.jpg)
Siendo, nusoap_server_ej1.php el servidor de nustro WebService con NuSOAP, y nusoap_client_ej1.php el cliente.
Requerimientos
Los requerimientos para poner en funcionamiento el ejemplo son simplemente NuSOAP y tener algún servidor de sitios web (como puede ser Apache) corriendo PHP. Para todos aquellos que actualmente no tienen un servidor corriendo, pueden descargar XAMPP que es un servidor apache con PHP (también trae otras funcionalidades, pero estas 2 son las que importan para nuestro ejemplo) que solo se descarga, se descomprime, y con solo ejecutar un archivo, se inicia el servidor Apache con PHP en nuestra computadora, sin necesidad de mayores dolores de cabeza (Funciona tanto para Windows, como para OS-X).Módulo servidor
El servidor de este ejemplo es muy sencillo, tan sencillo como el siguiente código:<?php
// Incorporar la biblioteca nusoap al script, incluyendo nusoap.php (ver imagen de estructura de archivos) require_once('nusoap/lib/nusoap.php'); // Modificar la siguiente linea con la direccion en la cual se aloja este script $miURL = 'http://pruebas.orlandobrea.com.ar/nusoap_ej1'; $server = new soap_server(); $server->configureWSDL('ws_orlando', $miURL); $server->wsdl->schemaTargetNamespace=$miURL; /* * Ejemplo 1: getRespuesta es una funcion sencilla que recibe un parametro y retorna el mismo * con un string anexado */ $server->register('getRespuesta', // Nombre de la funcion array('parametro' => 'xsd:string'), // Parametros de entrada array('return' => 'xsd:string'), // Parametros de salida $miURL); function getRespuesta($parametro){ return new soapval('return', 'xsd:string', 'soy servidor y devuelvo: '.$parametro); } // Las siguientes 2 lineas las aporto Ariel Navarrete. Gracias Ariel if ( !isset( $HTTP_RAW_POST_DATA ) ) $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' ); $server->service($HTTP_RAW_POST_DATA); ?>El ejemplo es bastante sencillo, simplemente registra una función que recibe un parámetro y devuelve dicho parámetro con un texto adelante ("soy el servidor y devuelvo: ". El parámetro de entrada a la función es del tipo String, y la función también retorna un String.
Anteriormente mencione que no iba a detallar demasiado en código, ya que como pueden ver el mismo esta comentado, y creo que es bastante entendible.
Como podemos ver en el ejemplo, la complejidad mayor en crear el módulo servidor para un webservice, es crear la estructura de datos del mismo y sus tipos (ver $server->register() en el ejemplo). Si bien el ejemplo es muy sencillo, podemos ver que tanto los datos que el webservice recibe, como los que retorna, deben ser especificados en los tipos de datos predefinidos en XML para crear un Schema (xsd:string, xsd:int, etc.). En los próximos ejemplos que vaya subiendo de webservices con NuSOAP se podrá ver más en detalle algunos tipos de datos, y también como crear estructuras complejas (retornar objetos, o listas). Por el momento solo estamos recibiendo un String (xsd:string y retornamos otro entero (xsd:string).
En el ejemplo se puede ver que la función a la cual el webservice llama para atender la petición, en este caso getRespuesta, debe codificar la respuesta en el tipo de datos esperado. En este caso definimos que la función retornaría un xsd:string, por lo que debemos crear un soapval con el tipo de datos esperado.
¿Como se enlazan los datos recibidos por el servidor con nuestra función?
Cuando definimos los parámetros, tanto de entrada, como de respuesta, a los mismos le asignamos un nombre. Por ejemplo al parámetro de entrada le asignamos el nombre "parametro" (si, no es muy original, pero sirve para entender el ejemplo). Y el parámetro de salida, o retorno, lo llamamos "return". Entonces lo que hará NuSOAP es enlazar el parámetro de entrada a la función getRespuesta cuyo nombre es "parametro", con el valor que tome el "parametro" definido en el webservice. Voy a mostrár graficamente el enlace, para que sea más sencilla su visualización:![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrxHezKNLbtySUdi_nLiHf0CAnqXFa-kf16NpeV8p2E7WKZGUrBojuJc6YaFXXYpKBzmmKSF82jbzNKF2y2FgvTMPJ7jqvlSSFpDuqT4Jk0fXOr7yBTLfWe_m9TwhDoalHMVe/s128/enlaceParametrosWS-Funcion.jpg)
¿Que pasa si mi función NO recibe parámetros?
Simplemente modificariamos el código de:$server->register('getRespuesta', // Nombre de la funcion array('parametro' => 'xsd:string'), // Parametros de entrada array('return' => 'xsd:string'), // Parametros de salida $miURL);al siguiente código:
$server->register('getRespuesta', // Nombre de la funcion array(), // Parametros de entrada array('return' => 'xsd:string'), // Parametros de salida $miURL);y obviamente a la función que hacemo referencia (getRespuesta) no debería recibir parámetros, por lo que pasaría de:
function getRespuesta($parametro){a:
function getRespuesta(){
El cliente
Para este ejemplo que estoy mostrando, el cliente tiene un poco más de código que el servidor, para ejemplos un poco más complejos, el servidor comienza a ser un poco más largo, y el cliente mantiene apróximadamente la misma longitud. ¿Por que pasa esto? sencillo, a medida que el ejemplo se hace más complejo, se necesitán funciones más complejas en el servidor y principalmente, definir que los datos que vamos a utilizar también son más complejos. Pero eso lo dejaremos para futuros ejemplos que vaya subiendo al blog. Ahora nos concentraremos en el cliente, cuyo código es el siguiente:<?php // Incluimos la biblioteca de NuSOAP (la misma que hemos incluido en el servidor, ver la ruta que le especificamos) require_once('nusoap/lib/nusoap.php'); // Crear un cliente apuntando al script del servidor (Creado con WSDL) - // Las proximas 3 lineas son de configuracion, y debemos asignarlas a nuestros parametros $serverURL = 'http://pruebas.orlandobrea.com.ar'; $serverScript = 'nusoap_server_ej1.php'; $metodoALlamar = 'getRespuesta'; // Crear un cliente de NuSOAP para el WebService $cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl'); // Se pudo conectar? $error = $cliente->getError(); if ($error) { echo '<pre style="color: red">' . $error . '</pre>'; echo '<p style="color:red;'>htmlspecialchars($cliente->getDebug(), ENT_QUOTES).'</p>'; die(); } // 1. Llamar a la funcion getRespuesta del servidor $result = $cliente->call( "$metodoALlamar", // Funcion a llamar array('parametro' => 'Orlando'), // Parametros pasados a la funcion "uri:$serverURL/$serverScript", // namespace "uri:$serverURL/$serverScript/$metodoALlamar" // SOAPAction ); // Verificacion que los parametros estan ok, y si lo estan. mostrar rta. if ($cliente->fault) { echo '<b>Error: '; print_r($result); echo '</b>'; } else { $error = $cliente->getError(); if ($error) { echo '<b style="color: red">Error: ' . $error . '</b>'; } else { echo 'Respuesta: '.$result; } } ?>Primero voy a hacer un breve resumen de cuales son los pasos que se realizan.
- Incluír la biblioteca de NuSOAP de PHP.
- Defino las variables de configuración (lo hice de esta forma para que les sea más sencillo el definir los parámetros para sus propios servicios web).
- Creo el objeto NuSOAP Cliente (nusoap_client).
- Verifico que la conexión se haya podido realizar.
- Llamó al servicio web del servidor (función getRespuesta definida en las variables de configuración).
- Verifico que la llamada haya sido exitosa, en caso de ser exitosa muestro la respuesta del servidor, y en caso de error, muestro el mensaje de error.
En el cliente no hago un procesamiento de la información recibida desde el servidor de WebServices (NuSOAP server) sino que la muestro directamente por pantalla, cuando estemos trabajando realmente con dicha información debemos realizar un procesamiento de la información recibida antes de utilizarla (el procesamiento puede ser desde algo tan sencillo como mostrar la información en un sitio especifico del website, hasta generar tablas o campos de edición). Las posibilidades de procesamiento son infinitas, y dependen de para que estemos utilizando el WebService, y la información otorgada por el mismo.
Verificación de los scripts
Para comprobar que nuestros scripts estan funcionando, lo que primero recomiendo es primero acceder al script del servidor (http://<direccion de nuestro server>/nusoap_server_ej1.php) desde nuestro navegador, el cual nos debe mostrar una pantalla similar a la siguiente si todo esta correcto (en caso contrario mostrará un típico error PHP por pantalla):![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30XHr5YZFIStpd2Ox5NunpvVTdxLtu-CYR_Y3RJoKYOr9uhN0TWEyA4LGt-yBA-R8ygwyvUPFin9E0WwPeb8qBPjaTfvaMOvt3MNuHpoY5HfaBI9-sFDMtvM4x4wkgfNfCI2j/s128/navegador_server.jpg)
Y si hacemos click sobre el nombre la la función que hemos publicado en nuestro servidor de WebService, nos mostrará algo similar a esto:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCdLfv0LYMnnKO8w9PFsuahV9uYRtvViNu-ZQmWsgDJuj5KGz57Fqk-JcOz_pgtv2RqQNQ9szU4AZO1jcw7FvZ1wa8UhqLcoERZdQvRv0mc5T4bChYblLPHeWVUwD80anRROBS/s128/nevegador_server_getRespuesta.jpg)
Cuando hemos verificado que el servidor esta funcionando, ahora realizaremos la prueba del cliente (http://<direccion de nuestro server>/nusoap_client_ej1.php), y nos mostrará una página similar a la siguiente:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA022bQHrwpi0r2k_0p-Z86WlqFRAucfNcbJT8jWh-N600LNCo_wdrwTFqmyy5A0idVbl9TcJH59r9ct3P3fI-0F6neKeCiOFClBHdnOD0ZGXo29rvn7ONr2s5cjZNTKQowV7j/s128/ejemplo_cliente.jpg)
35 comentarios:
Muchas gracias por estas excelentes expliaciones, tanto este artículo como el otro. Estuve probándo este último y me daba un error (no había leído tu comentario acerca de que el servicio web meteorológico había caído...)
Ps.: Pablo desde España.
Muchas gracias Pablo por tus comentarios. Si el servicio web meteorológico se encuentra fuera de servicio desde hace un tiempo. Por eso decidí hacer un cliene y servidor propios, para que no queden obsoletos los ejemplos. También publique la segunda parte del artículo:
http://www.orlandobrea.com.ar/2009/09/webservices-con-nusoap-en-php-ejemplo-2.html que también te puede interesar. Ya tengo desarrollada la tercera parte, pero aún no la he publicado. Nuevamente gracias.
buenos dias Orlando la verdad esta excelente tu tutorial. ahora bien tengo una pregunta como podria yo hacer para pasar un archivo.. es decir tengo un archivo en el servidor y desde el cliente le paso el nombre del archivo y se lo retorno bueno saludos
mi nombre es dixon raffe mi correo es
dixon1002@gmail.com
Titon, muchas gracias. Aproveche tu inquietud para publicar un nuevo post en mi blog
http://www.orlandobrea.com.ar/2009/12/como-transferir-archivos-con-nusoap.html
Ahí podes ver un pequeño ejemplo de como hacer dicha transferencia de archivos. Espero te sea de utilidad. Saludos.
Orlando es muy bueno tu blog con estas explicaciones. Quise implementar tus ejemplos pero me sale este error: Error: wsdl error: HTTP ERROR: Unsupported HTTP response status 404 Not Found (soapclient->response has contents of the response).
Tienes alguna idea que puedo estar seteando mal? saludos y gracias de antemano
Hola. Me alegra que te haya gustado el blog y las explicaciones.
Con respecto al error "Error: wsdl error: HTTP ERROR: Unsupported HTTP response status 404 Not Found"
Parece que el cliente no esta encontrando el servidor. Por favor verifica la siguiente linea en el cliente:
"$serverURL = 'http://pruebas.orlandobrea.com.ar';"
si la has modificado para que apunte a tu servidor (quizás algo como $serverURL = 'http://127.0.0.1';"
Te pido que me avises si el inconveniente se planteaba ahí, sino seguimos investigando.
Saludos.
Orlando
Orlando gracias por contestar. Si bien yo tenía bien apuntado el $serverURL, parece que no funciona con el certificado SSL que tengo instalado, porque cuando lo probé en otro de mis sitios normales, andubo de maravillas. Gracias por tus aportes.
Aprovecho para preguntarte si sería posible que nos dejes un ejemplo donde se pueda devolver varios registros de una misma consulta. Por ejemplo: el cliente llama con $result = $client->call("MetodoWebService",
array('Pais' => 'Argentina')
y el ws nos devuelve todas las ciudades que tenga ese país.
Estuve varios días tratando de resolverlo a partir de tus ejemplos pero no he podido ya que los mismos devuelven un array simple.
Espero me puedas ayudar con esto, desde ya gracias totales
Diego
Hola Diego.
Que bueno que hayas podido solucionar el problema que se te presentaba (a veces los certificados, traen dolores de cabeza).
Me podrías detallar como sería la respuesta que estas esperando del servidor de WebService? Es decir, el cliente envía array("Pais" => "Argentina") y el servidor responde...
Si me pudieras dar un ejemplo de como esperas la respuesta del servidor, hago un ejemplo con esos datos.
Saludos
Ok, voy a intentar explicar mi problema más en detalle.
Suponte que del lado del cliente yo necesite varios resultados de una misma consulta, como el ejemplo que te indicaba en mi anterior post.
El cliente envía una consulta con un filtro como puede ser "Argentina", y el wserver lo procesa para devolver (suponte) nombre, poblacion y altura (de cada ciudad de Argentina.
En tus ejemplos pude lograr mostrar solo los datos de una sola ciudad porque devuelve un array simple, pero no lo he logrado de varias ciudades al mismo tiempo.
Espero haber sido un poco más claro... y como dice el maestro Ceratti... Gracias totales. Diego
Hola Diego,
voy a intentar realizar un post con el ejemplo que me pasaste, solamente dame algunos días para poder hacerlo y subirlo.
Saludos.
Bárbaro Orlando, sigo probando cosas pero sin buenos resultados. Espero no complicarte. Abrazos de Buenos Aires
Excelente ejemplo, claro y conciso. Solo tuve un pequeño problema con la sentencia require_once('nusoap/lib/nusoap.php');, la cual tuve que recomponer de la siguiente forma: require_once('lib/nusoap.php');
F E L I C I T A C I O N E S!
Estima Humberto,
Muchas gracias por tu comentario. Voy a chequear la linea que me informas (yo tengo la libreria nusoap en nusoap/lib, pero creo que no lo aclare). Mas tarde lo chequeo y corrijo la informacion.
Muchas gracias
Hola! Gracias por el aporte. No tengo idea de que es WebServices, iba a hacer un curso pero se cayó, así que me puse a buscar para aprender algo por mi cuenta.
Saludo!
Tony
oye olrando cuando intento corro el archivo del servidor me mansa este mensaje Notice: Undefined variable: HTTP_RAW_POST_DATA in C:\wamp\www\webserver\servidor.php on line 23
y en el cliente este Error: wsdl error: XML error parsing WSDL from http://localhost/webserver/servidor.php?wsdl on line 2: Invalid document end
Bueno gracias
Hola. Aún no he tenido tiempo de probar una solución para esto, pero en la web encontre la siguiente.
Antes de utilizar la variable, pegar el siguiente código:
if ( !isset( $HTTP_RAW_POST_DATA ) )
$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
El crédito es para una persona llamada "RAJ GOHIL".
Te pido que por favor lo pruebes, y en caso que no funcione, realizare yo mismo algunas pruebas.
Saludos
E
Hola Orlando. Primero. Que bueno que hay gente como tu que se toma el tiempo de escribir estos tutoriales. Gracias.
Bueno, ojala me puedas ayudar pero, el ejemplo del cliente no me funciono :( (creo que soy el único). No sé si tenga un error en las direcciones pero no funciona. El server si funciona perfectamente, pero el cliente no.
Yo tengo mis archivos aqui: http://localhost/danielgarrido.com/nusoap/. En esta carpeta tengo tanto las librerias como los ejemplos que tu has dado.
Entonces, supongo que las direcciones quedarian algo como esto:
En server:
$miURL = 'http://localhost/danielgarrido.com/nusoap';
En Cliente:
$serverURL = 'http://localhost/danielgarrido.com/nusoap';
$serverScript = 'nusoap_server_ej1.php';
$metodoALlamar = 'getRespuesta';
Ah! el error que me da el cliente es que se queda en blanco la pantalla leyendo infinitamente. En la barra de estado del FireFox se queda en "Esperando a localhost...". Obviamente esta como en un ciclo infinito.
Bueno Orlando, espero me puedas ayudar ya que estoy urgido con esto.
Muchas gracias!!
Hola Daniel,
Si tu sitio web esta en http://danielgarrido.com (como sospecho), el inconveniente esta en que en la URL que apunta al servidor la siguente linea:
$serverURL = 'http://localhost/danielgarrido.com/nusoap';
deberia ser
$serverURL = 'http://danielgarrido.com/nusoap';
es decir, sin el localhost (para que no apunte a la computadora local, sino a la que esta publicada en internet).
Te pido que me informes si con esa modificación funciona el ejemplo.
Gracias por tus comentarios
Orlando. Muy agradecido por tomarte tu tiempo en responder.
Claro, tiene "localhost" porque quisiera que funcionara localmente.
Sabes que cuando publico el server en danielgarrido.com y corro el cliente en mi compu, apuntando al server de internet, funciona perfectamente. Pero cuando apunto al server local, no.
Lo bueno es que tengo la manera de probar el ws, pero hacerlo local es como lo ideal antes de publicar.
Muchas gracias de nuevo Orlando.
Sin ver realmente como esta todo, solo se me ocurren dos alternativas:
1. Que http://localhost/danielgarrido.com no este en la carpeta que se espera. Que sería dentro de htdocs (o el document root del servidor web) / danielgarrido.com (una carpeta llamada "danielgarrido.com" dentro del document root.
2. También puedes probar reemplazar localhost por 127.0.0.1
En caso que este apuntando correctamente, y al reemplazar localhost por 127.0.0.1 igualmente sigas teniendo este inconveniente, me puedes enviar un zip con el ejemplo a orlando.brea at gmail.com para que lo pueda ver.
Saludos.
Buenas noches.
En primer lugar, quería darle la enorabuena tanto por el artículo como por los ejemplos. Son muy ilustrativos y sirven de gran ayuda. De echo a mi me funciona todo el ejemplo perfectamente.
En segundo lugar, comentar que bueno, soy un programador amateur de php y debido a unas necesidades laborables tengo que montar un webservices para compartir datos con otra compañía y me gustaría hacerlo en php ya que he comprobado que funciona perfectamente.
Mi duda es la siguiente:
Dicha compañía me ha enviado un monton de archivos wsdl y xsd y sinceramente no se por donde empezar ya que según ellos me han mandado la estructura del web services pero soy incapaz de verlo.
Ya que he observado que usted controla bastante del tema, sería tan amable de orientarme sobre que tengo que hacer con esos archivos para montar los distintos web services?
Iba a poner mi correo para que me contestase pero he pensado que sería mejor exponerlo por aquí por si a otra persona le pudiese ser de ayuda también
Se lo agradezo de ante mano.
Desde España, un saludo cordial.
Estimado Dref, muchas gracias por tus comentarios. Te recomiendo para comenzar leer el siguiente tutorial que realice ya hace algunos años en el cual, en los primeros capítulos, trata por arriba la estructura de los webservices y como se realizán las definiciones de los mismos:
http://www.desarrolloweb.com/manuales/61/
En el archivo wsdl ya tienes toda la información que necesitas para conectarte y utilizar el webservice, ya que en el wsdl esta toda la definición de los puntos de accesos/métodos y los tipos de datos que debes utilizar para enviar y recibir datos de los mismos. Los datos pueden estar un poco complejos de seguir, pero con paciencia puedes detectar cada uno de ellos.
No conozco aplicaciones gratuitas que te permitan ver facilmente el contenido del wsdl para acelerarte este proceso. Igualmente, estoy seguro que con un poquito de dedicación podrás comprender como operar con el mismo.
Espero haberte servido de ayuda, y que nos comentes como te ha ido con el wsdl.
Saludos
Hola Orlando!
Se que este comentario va a un post que ya es muy viejo, pero ya que nunca te contestaron acerca de la solución que aportaste para el asunto del error: "HTTP_RAW_POST_DATA", solo quiero informar que funciona perfectamente, es solo cuestion de colocar el codigo que señalaste justo antes de la linea: "$server->service($HTTP_RAW_POST_DATA);"
Puede ser muy util para los que todavia tienen ese problema...
Saludos!
Bernal R.
Costa Rica
Ah, y se me olvidaba comentar... Excelentes tutoriales!!! Felicitaciones!
Sigue así, que estos nos ayudan mucho!!!
Saludos,
Bernal R.
Muchas gracias Bernal por el feedback y mil gracias por los comentarios. Es un placer hacer algo que a los demas le sea de utilidad.
Saludos.
Excelente Articulo, a la fecha aun funciona sin ningun problema, mis felicitaciones, solo falta corregir que:
"$server->service($HTTP_RAW_POST_DATA);"
Debe quedar:
if ( !isset( $HTTP_RAW_POST_DATA ) )
$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
$server->service($HTTP_RAW_POST_DATA);
Y si alguien quere agregarle mas parametros de entrada, seria:
en cliente.php
result = $cliente->call(
"$metodoALlamar", // Funcion a llamar
array('num1' => $x, 'num2' => $y), // Parametros pasados a la funcion, en este caso 2
y en servicio.php
$server->register('Suma', // Nombre de la funcion
array('num1' => 'xsd:string', 'num2' => 'xsd:string'), // Parametros de entrada, en este caso 2
...
function Suma($num1, $num2)
//y la funcion debe tener los parametros a utilizar
Obviamente tiene algunos nombres cambiados debido a que la modifique, pero es la idea para que trabajen :)
Muchas Gracias estimado,
Atte, Ariel
Muchas gracias Ariel por tus comentarios y aportes. Más tarde modifico el ejemplo tal cual tu lo comentas.
Buenas Orlando excelente ejemplo llevandome de eso realize este web service pero no se nesesito que cuando se llene el formulario me responde segun los parametro que le pase pero me sale error podria darme una mano o decirme que tal lo ves Saludos
* @url http://www.joom4u.com
*/
defined( '_JEXEC' ) or die( 'Restricted access' );
$document =& JFactory::getDocument();
$document->addStyleSheet(JURI::base().'components/com_j4uform/css/style.css');
//$document->addScript(JURI::base().'components/com_j4uform/js/gen_validatorv5.js');
$task = JRequest::getVar( 'task', '' );
switch ($task) {
case 'certify':
certify();
break;
case 'certify2':
certify2();
break;
default:
certify();
break;
}
function getconfig($varname) {
$db =& JFactory::getDBO();
$query = "SELECT value FROM #__j4uform WHERE varname = '".$varname."'";
$db->setQuery( $query );
return $db->loadResult();
}
function sendHTMLemail($HTML,$from,$to,$subject)
{
$subject='=?UTF-8?B?'.base64_encode($subject).'?=';
$headers = "From: $from\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$boundary = uniqid("HTMLEMAIL");
$headers .= "Content-Type: multipart/alternative;".
"boundary = $boundary\r\n\r\n";
$headers .= "This is a MIME encoded message.\r\n\r\n";
$headers .= "--$boundary\r\n".
"Content-Type: text/plain; charset=UTF-8\r\n".
"Content-Transfer-Encoding: base64\r\n\r\n";
$headers .= chunk_split(base64_encode(strip_tags($HTML)));
$headers .= "--$boundary\r\n".
"Content-Type: text/html; charset=UTF-8\r\n".
"Content-Transfer-Encoding: base64\r\n\r\n";
$headers .= chunk_split(base64_encode($HTML));
mail($to,$subject,"",$headers);
}
/**
QUE HACE ESTO ??!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?
me puede dar tu correo o escribeme aqui dislanet@gmail.com. porque no me acepta el code completo te lo agradeceria Saludos
Sé que es muy tarde pero bueno... Muy buenas Orlando. En primer lugar felicitarte por estos tutoriales de NuSoap, son excelentes.
Bueno, te cuento mi problema. Accedo al servidor perfectamente, pero cuando ejecuto el cliente me devuelve este error: Error: wsdl error: Getting http://x.x.x.x/pruebas/ServidorWeb/Ejemplo_1/server_ej1.php?wsdl - HTTP ERROR: HTTP authentication failed
Sabes qué puede ser? Gracias amigo!
hola, felicitaciones y gracias por toda esta informacion.
resulta que hago todo lo que explicas en el tutorial pero al reemplazar en el archivo cliente la url por localhost me arroja este error "Error: wsdl error: Bad path to WSDL file localhost/nusoap_server_ej1.php?wsdl".
a que se debe ese error. cuando pruebo independiente al archivo servidor funciona perfecto, saludos y gracias por tu ayuda
AMIGO UNA CONSULTA NO SE MEDO CALRO ESTE CODIGO
"$server->service($HTTP_RAW_POST_DATA);"
LO PONGO EN LE SERVIDOR O CLIENTE
Hola, soy principiante en WS, necesito conectarme a uno en aspx desde Drupal, no he dado con ningún módulo que me funcione y quiero hacerlo en php puro. Me sirve la librería nusoap para esto?
Orlando muy bueno tu trabajo aquí, Saludos
Disculpen pero no he tenido tiempo para responder sus consultas. Seguramente varios ya han resuelto los temas. Intentare hacer un resumen para responder a todos.
El $server->service($HTTP_RAW_POST_DATA); va en el server.
El error "HTTP ERROR: HTTP authentication failed" posiblemente sea porque la conexion se esta haciendo a un server apache que necesit autenticacion para poder acceder a la pagina (para esto recomiendo mirar el archivo httpd.conf y .htaccess)
La interaccion php-aspx no siempre es muy buena. Si bien webservices iba a ser la plataforma de interconexion entre cualquier plataforma, a cualquier otra, no termino siendo tan asi. Existen ciertos problemas entre webservices en diferentes lenguajes (no con todos pasa esto). Si bien hace un tiempo que no hago pruebas, antes los clientes php, no funcionaban muy bien con los servidores .net. Quizas hoy ya este solucionado, pero no te puedo dar seguridad que esto sea asi).
Se que los que me postean problemas que se les presentan cuando estan trabajando con webservices esperan una respuesta, pero como ustedes sabran, el blog lo mantengo de forma "amateur", es decir, no tengo ingresos por el mismo, y por lo tanto, le puedo dedicar el tiempo que me sobra (que es muy poco), y por lo tanto los tiempos de respuesta pueden ser muy largos. Se que lo sabran entender, ya que sus tiempos tambien son muy valiosos (y saben que no pueden destinar mas tiempo del que tienen, y no le pueden sacar tiempo a otras actividades que).
Muchas gracias por su comprension.
Publicar un comentario