Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Crear un archivo WSDL a partir de un Web Services hecho en PHP

Estas en el tema de Crear un archivo WSDL a partir de un Web Services hecho en PHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenos tardes, Pues mas o menos lo que pongo en el titulo. He hecho un Services Web con SOAP de php. Éste Web Services necesito ...
  #1 (permalink)  
Antiguo 01/12/2005, 05:53
Usuario no validado
 
Fecha de Ingreso: febrero-2004
Mensajes: 32
Antigüedad: 20 años, 2 meses
Puntos: 0
Crear un archivo WSDL a partir de un Web Services hecho en PHP

Buenos tardes,

Pues mas o menos lo que pongo en el titulo.
He hecho un Services Web con SOAP de php. Éste Web Services necesito que lo llamen desde una aplicación hecha en DELPHI, pero para conseguirlo necesito poner en el servidor un archivo WSDL, que sino entiendo mal, es un archivo de especificación, es decir, dónde pone las funciones que tengo en mi Services WEB, y la tipologia de datos utilizada en cada funcion.

Como puede generar este archivo WSDL, a partir del Services Web hecho en PHP.

Un saludo,
Muchas gracias por la molestias prestadas.
  #2 (permalink)  
Antiguo 01/12/2005, 11:31
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Pues mira este pequeño codigo que crea un servicio web que llamaremos servicioweb.php:

Código:
<?
require_once("nusoap.php");
$ns="http://localhost/nusoap";
$server = new soap_server();
$server->configureWSDL('CanadaTaxCalculator',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->register('CalculateOntarioTax',array('amount' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
function CalculateOntarioTax($amount){
$taxcalc=$amount*.15;
return new soapval('return','string',$taxcalc);
}
$server->service($HTTP_RAW_POST_DATA);
?>
ahora para llamar al archivo wsdl solo tienes que entrar a tu navegador y escribir :

http://www.tuhost.com/servicioweb.php?wsdl

este url es el que tienes que pasarle como ruta del archivo wsdl. Si quieres mas informacion te doy este link :

http://www.xml.com/pub/a/ws/2004/03/24/phpws.html
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #3 (permalink)  
Antiguo 06/12/2005, 19:20
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 20 años, 6 meses
Puntos: 0
Problema con el WebService ??

Hola que tal, ates que nada un saludo.
Te comento, que yo apenas estoy metiendome en este asunto de los WebServices. Y cheque la página que mencionas sin embargo estoy algo contrariado en el aspecto de que al probar mi cliente SOAP solo me regresa el texto Array.

Aqui coloco mis códigos:


//Este es el codigo del server SOAP:
Código PHP:
<?
// Web Service de Ejemplo
require_once("nusoap/nusoap.php");
$ns="http://localhost/Agriver/nusoap";
$server = new soap_server();
$server->configureWSDL('CanadaTaxCalculator',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->register('CalculateOntarioTax', array('amount' => 'xsd:string'), array('return' => 'xsd:string'),$ns);

function 
CalculateOntarioTax($amount){
    
$taxcalc=$amount*.15;
    return new 
soapval('return','string',$taxcalc);
}

$server->service($HTTP_RAW_POST_DATA);
?>
Y este el del cliente:

Código PHP:
<?php
require_once("nusoap/nusoap.php");
$wsdl="http://localhost/Agriver/ws_example.php?wsdl";
$client=new soapclient($wsdl'wsdl'); 
$param=array('amount'=>'15.00',); 
echo 
$client->call('CalculateOntarioTax'$param);
?>

Sin embargo el último echo, me imprime "Array"

Que onda? Porque aparece esto ?

De antemano gracias por la explicación

Saludos desde Veracruz, México
  #4 (permalink)  
Antiguo 09/12/2005, 03:12
Usuario no validado
 
Fecha de Ingreso: febrero-2004
Mensajes: 32
Antigüedad: 20 años, 2 meses
Puntos: 0
Buenas, ante todo perdon por la tardanza en la contestación pero he que he estado de puente y no he podido.

Primero, muchas gracias stone_neo, porque mirando el codigo que me enseñaste, y las url, he podido hacer que mi Web Sercice se creare el WSDL.

Para ray_rockus, en principio sino me equivoco, al devolver
Código:
return new soapval('return','string',$taxcalc);
te devuelve un array.
Prueba de hacer:

Código:
$response = $client->call('CalculateOntarioTax', $param); 
echo "<pre>";
print_r($response);
echo "</pre>";
Y verás que contiene el array.

Tambien a la hora de devolver el valor puedes hacer esto:
Código:
return $taxcalc;
Así conseguiras que te devuelva el resultado directamente.

Pruebalo y comentas.
Un saludo.
  #5 (permalink)  
Antiguo 27/12/2005, 03:03
Usuario no validado
 
Fecha de Ingreso: febrero-2004
Mensajes: 32
Antigüedad: 20 años, 2 meses
Puntos: 0
Buenas otra vez.
Como comenté en mensajes anteriores conseguí hacer el Web service. Pero viendo el xml y tabajando con él, he descubierto que hay un error al generar el archivo wsdl.

Yo hago lo siguiente:
$server->configureWSDL('insertSMS',$ns);
$server->configureWSDL('countCredit',$ns);
$server->wsdl->schemaTargetNamespace=$ns;

/* Register the imporSMS function for publication. */
$server->register('insertSMS',array('login' => 'xsd:string','pass'),array('return' => 'xsd:string'),$ns);
$server->register('countCredit',array('login' => 'xsd:string', 'pass' => 'xsd:string'),array('return' => 'xsd:int'),$ns);


El archivo wsdl generado está correcto, pero falta algo en la parte final de dicho documento. Me pone lo siguiente:
<service name="countCredit">
- <port name="countCreditPort" binding="tns:countCreditBinding">
<soap:address location="http://www.by-sms.com/wsdl/messageSOAPServer3.php" />
</port>
</service>


Y me falta que ponga despues:
<service name="insertSMS">
- <port name="countCreditPort" binding="tns:countCreditBinding">
<soap:address location="http://www.by-sms.com/wsdl/messageSOAPServer3.php" />
</port>
</service>


Para que esten los 2 web service.
En cambio solo me pone uno el service countCredit

A que puede ser debido?

Un saludo
  #6 (permalink)  
Antiguo 12/04/2006, 02:02
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
he copiado el codigo que teneis puesto y me salta siempre el siguiente error

Fatal error: Cannot redeclare class soapclient in C:\Archivos de programa\xampp\htdocs\ligaforo\lib\nusoap.php on line 7240

Código PHP:
<? 
require_once('/lib/nusoap.php');
$ns="http://localhost/ligaforo";
$server = new soap_server();
$server->configureWSDL('LigaForeros',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->register('liga',array('codigo' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
function 
liga($codigo){
$taxcalc=$codigo*.15;
return new 
soapval('return','string',$taxcalc);
}
$server->service($HTTP_RAW_POST_DATA);
?>
Problema arreglado , al utilizar php5 parece ser que lleva ya integrado el soapcliente con lo cual lo unico que tiens que hacer es editar el nusoap y donde ponga soapclient poner soapclient2 tanto en el constructor y las invocaciones en vez de poner new soapclient poner soapcliente2
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros

Última edición por Legolas_Bilbao; 12/04/2006 a las 02:32
  #7 (permalink)  
Antiguo 12/04/2006, 04:31
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
como puedo devolver un array??? por ejemplo de nombres?
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #8 (permalink)  
Antiguo 10/11/2006, 22:13
 
Fecha de Ingreso: noviembre-2006
Mensajes: 10
Antigüedad: 17 años, 5 meses
Puntos: 0
Yo no puedo publicar un wsdl

Cita:
Iniciado por Chispi Ver Mensaje

Yo hago lo siguiente:
[FONT="Arial"][SIZE="2"]$server->configureWSDL('insertSMS',$ns);
$server->configureWSDL('countCredit',$ns);
$server->wsdl->schemaTargetNamespace=$ns;

Chispi, por que configuras el serverWSDL con los nombres de las funciones? Yo en ese lugar tengo puesto otro nombre, casualmente coincide con el archivo, y en Windows XP con Apache y PHP4 funciona perfecto.
Cuando copio el archivo y lo traigo a Linux, que tengo un Apache 2 y PHP5, puedo visualizar los Web services en el Firefox cuando pongo /localhost/reservas.php. Ahora, cuando escribo /localhost/reservas.php?wsdl, no aparece nada, mientras que en windows me abre justamente el XML, y obviamente no funciona el cliente de ese web service. Alguien sabe por que puede estar pasando esto?
  #9 (permalink)  
Antiguo 21/11/2006, 11:26
 
Fecha de Ingreso: abril-2005
Mensajes: 49
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por ray_rockus Ver Mensaje
Hola que tal, ates que nada un saludo.
Te comento, que yo apenas estoy metiendome en este asunto de los WebServices. Y cheque la página que mencionas sin embargo estoy algo contrariado en el aspecto de que al probar mi cliente SOAP solo me regresa el texto Array.
Tuve el mismo problema, y cuando hice var_dump del arreglo me mostraba esto:

array(4) { ["faultcode"]=> string(6) "Server" ["faultactor"]=> string(0) "" ["faultstring"]=> string(26) "unable to serialize result" ["detail"]=> string(0) "" }

Era un error en el código del servidor.

Donde dice:
return new soapval('return','string',$taxcalc);

debe decir:
return new soapval('return','xsd:string',$taxcalc);

Saludos.

Última edición por GabiAPF; 21/11/2006 a las 11:46
  #10 (permalink)  
Antiguo 16/08/2007, 10:05
 
Fecha de Ingreso: agosto-2007
Mensajes: 2
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Crear un archivo WSDL a partir de un Web Services hecho en PHP

Hola amigos, saben estoy metiendome a realizar webservices con eclipse, base dato sql server y unirlo con php, ahora bien, al realizar el wsdl con eclipse, no se como hacer para que me retorne un array para el caso en que el Query me retorne varias filas y campos.
Como puedo hacerlo?

Gracias!!
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:32.