No sé si alguien del foro haya trabajado más fondo con nuSOAP como herramienta para generar webservices con php. Desafortunadamente existe muy poca información sobre este rubro.
Yo me encuentro con la problemática de querer utilizar ciertas clases que ya tengo modeladas porque forman parte de un sistema de consulta. En base a ello me di a la tarea de generar una clase que abstrayera toda la funcionalidad que deseo posea el webservice. Posteriormente cree el archivo que sería en si el webservice, aquel donde se utilizan los objetos de nuSOAP y pensaba únicamente instanciar la clase que había yo creado.
Sin embargo, el resultado fue un error que acontinuacion muestro:
Warning: Cannot modify header information - headers already sent by (output started at /usr/www/htdocs/proceda/clas/cConexion.php:57) in /usr/www/htdocs/proceda/ws/lib/nusoap.php on line 3281
Este es mi código:
Código PHP:
<?php
require_once("lib/nusoap.php");
require_once("../clas/cWsGuardadoPedimento.php");
$ns="http://unixdev.reco/proceda/ws/";
$server = new Soap_Server();
$server->configureWSDL('wsGuardadoPedimento',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->register('procesarArchivo',
array('sArch' => 'xsd:string','sFecha' =>'xsd:string'),
array('return' => 'xsd:string'),
$ns);
function procesarArchivo($sArch,$sFecha){
$oGuardPed = new cWsGuardadoPedimento($sArch,$sFecha);
$sRes=$oGuardPed->procesar();
return new soapval('return','xsd:string',$sRes);
}
$server->service($HTTP_RAW_POST_DATA);
?>
La unica forma en la que logré darle la vuelta fue a través de un programa que corre en linea de comando cuya salida es capturada en el script donde se realiza el webservice.
Algo asi como:
wsMiWebService.php -> scMiWebService.php -> cWsMiWebService.php
Donde :
wsMiWebService.php : Contiene el llamado a la libreria nuSOAP y el llamado al resultado de la ejecucion del programa en linea de comando.
Su código es:
Código PHP:
<?php
require_once("lib/nusoap.php");
$ns="http://dominio.com/directorio/ws/";
$server = new Soap_Server();
$server->configureWSDL('wsMiWebService',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->register('procesarArchivo',
array('sArch' => 'xsd:string','sFecha' =>'xsd:string'),
array('return' => 'xsd:string'),
$ns);
function procesarArchivo($sArch,$sFecha){
$sRes=shell_exec("php -f /ruta/al/archivo/directorio/ws/scMiWebService.php $sArch '$sFecha'");
return new soapval('return','xsd:string',$sRes);
}
$server->service($HTTP_RAW_POST_DATA);
?>
cWsMiWebService.php : Contiene la descripción de la clasze con toda la funcionalidad del webservice
Como verán esto es darle muchas vueltas al punto, me gustaría saber si alguno de ustedes ya ha conseguido algo asi sin utilizar un archivo intermediario.
Espero comentarios de la comunidad y me gustaría lanzar de antemano la propuesta de poder eealizar en conjunto un tutorial en español para realizar webservices en PHP 5.
Saludos