<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Dokeos Latinoamérica &#187; soap</title>
	<atom:link href="http://dokeoslatinoamerica.wordpress.com/tag/soap/feed/" rel="self" type="application/rss+xml" />
	<link>http://dokeoslatinoamerica.wordpress.com</link>
	<description>Reportes de actividad, tips y consideraciones</description>
	<lastBuildDate>Tue, 15 Dec 2009 21:13:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='dokeoslatinoamerica.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/067f4f68c6dd2fd8b9447fc660b4fa12?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Dokeos Latinoamérica &#187; soap</title>
		<link>http://dokeoslatinoamerica.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dokeoslatinoamerica.wordpress.com/osd.xml" title="Dokeos Latinoamérica" />
		<item>
		<title>Retornar arrays con NuSOAP</title>
		<link>http://dokeoslatinoamerica.wordpress.com/2009/03/22/retornar-arrays-con-nusoap/</link>
		<comments>http://dokeoslatinoamerica.wordpress.com/2009/03/22/retornar-arrays-con-nusoap/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 17:59:31 +0000</pubDate>
		<dc:creator>ywarnier</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[técnico]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[XML-RPC]]></category>

		<guid isPermaLink="false">http://dokeoslatinoamerica.wordpress.com/?p=540</guid>
		<description><![CDATA[Christian escribió un artículo hace unos días sobre la manera de usar NuSOAP para crear un servicio web. El artículo describe en detalles el procedimiento. No obstante, probar de retornar un arreglo es un trabajo bastante complejo en NuSOAP, o por lo menos esta mal documentado. Una excelente referencia (en Inglés) sobre el tema se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dokeoslatinoamerica.wordpress.com&blog=3963915&post=540&subd=dokeoslatinoamerica&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Christian escribió un artículo hace unos días sobre <a href="http://dokeoslatinoamerica.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/">la manera de usar NuSOAP para crear un servicio web</a>. El artículo describe en detalles el procedimiento. No obstante, probar de retornar un arreglo es un trabajo bastante complejo en NuSOAP, o por lo menos esta mal documentado. Una excelente referencia (en Inglés) sobre el tema se puede encontrar en el blog de <a href="http://www.lyingonthecovers.net/?p=39">Lyingonthecovers</a>, pero el artículo faltaba (he puesto un comentario ahí) una noción importante que es que NuSOAP debe tener un &#8216;return&#8217; =&gt; &#8216;xsd:Array&#8217; en su método register() para retornar el formato correcto.</p>
<p>En este artículo, revisaremos como retornar arreglos.</p>
<h2>Retornar arreglos simples</h2>
<p>Primero, imaginamos, como en el artículo en Inglés de Lyingonthecovers, que queremos hacer un servicio web que retorna, en el caso de Dokeos, detalles sobre un curso.</p>
<p>La función que se encargar de recojer la información se llamará getCourseDetails(), tomará solo un parámetro  tipo string en entrada (para parametros complejos, ver <a href="http://dokeoslatinoamerica.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/">el ejemplo de Christian</a>) y retornará un arreglo del tipo siguiente:</p>
<blockquote><p>Array(</p>
<p style="padding-left:30px;">['code'] =&gt; &#8216;ABC&#8217;,</p>
<p style="padding-left:30px;">['title'] =&gt; &#8216;English alphabet&#8217;,</p>
<p style="padding-left:30px;">['url'] =&gt; &#8216;http://www.example.com/ABC&#8217;,</p>
<p style="padding-left:30px;">['teacher'] =&gt; &#8216;Yannick Warnier&#8217;,</p>
<p style="padding-left:30px;">['language'] =&gt; &#8216;english&#8217;</p>
<p>)</p></blockquote>
<p>Hemos definido nuestras necesidades, ahora vamos más adelante y registramos el servicio mismo y sus tipos de datos:</p>
<blockquote><p>$server = new soap_server();</p>
<p>$server-&gt;configureWSDL(&#8216;WSCourse&#8217;, &#8216;urn:WSCourse&#8217;);</p>
<p>// definimos el tipo complejo (arreglo asociativo, =&#8217;struct&#8217;) de detalles de curso</p>
<p>$server-&gt;wsdl-&gt;addComplexType(<br />
&#8216;courseDetails&#8217;,<br />
&#8216;complexType&#8217;,<br />
&#8217;struct&#8217;,<br />
&#8216;all&#8217;,<br />
&#8221;,<br />
array(<br />
&#8216;name&#8217;=&gt;&#8217;code&#8217;  , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;title&#8217;  , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;url&#8217;    , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;teacher&#8217;, &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;language&#8217;,'type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
)<br />
);</p></blockquote>
<p>Por favor apunten que declaramos un tipo, pero no hay ninguna relación, al nivél de esta declaración, entre el tipo y un método. Este tipo podrá ser reutilizado para otros métodos también.</p>
<blockquote><p>// Registramos el método y su parámetro de entrada<br />
$server-&gt;register(&#8216;getCourseDetails&#8217;,           // nombre método<br />
array(&#8216;username&#8217; =&gt; &#8216;xsd:string&#8217;),            //  parametros entrantes al servicio<br />
array(&#8216;return&#8217; =&gt; &#8216;tns:courseDetails&#8217;),     // valor(es) retornado(s)<br />
&#8216;urn:WSCourse&#8217;,                                            // namespace (espacio de nombre)<br />
&#8216;urn:WSCourse#getCourseDetails&#8217;,         // acción SOAP<br />
&#8216;rpc&#8217;,                                                                 // estílo<br />
&#8216;encoded&#8217;,                                                       // tipo de uso<br />
&#8216;This service returns a list of courses&#8217;    // documentación<br />
);</p></blockquote>
<p>En este caso, usamos directamente un &#8217;struct&#8217; como valor de retorno. Usamos el marcador &#8216;tns:&#8217; (probablemente Type NameSpace o algo así) para decir que es un tipo complejo definido por otro lado, y definimos que tipo exactamente queremos usar.</p>
<p>Esto es lo que debería ocurir y, para este caso (no verificado), tal vez funcionaría. <em>Si no funciona</em>, <em>prueben remplazar tns:courseDetails por xsd:Array</em>, simplemente (vemos más abajo casos probados).</p>
<p>En el caso un poco más complejo en que tenga que devolver un arreglo de estos courseDetails, como hago?</p>
<h2>Arreglos de arreglos</h2>
<p>Una estructura a dos niveles no se puede definir en solo una definición de ComplexType. En sí, se tiene que definir cada nivel como un ComplexType:</p>
<blockquote><p>$server-&gt;wsdl-&gt;addComplexType(<br />
&#8216;courseDetails&#8217;,<br />
&#8216;complexType&#8217;,<br />
&#8217;struct&#8217;,<br />
&#8216;all&#8217;,<br />
&#8221;,<br />
array(<br />
&#8216;name&#8217;=&gt;&#8217;code&#8217;  , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;title&#8217;  , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;url&#8217;    , &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;teacher&#8217;, &#8216;type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
&#8216;name&#8217;=&gt;&#8217;language&#8217;,'type&#8217;=&gt;&#8217;xsd:string&#8217;,<br />
)<br />
);</p></blockquote>
<p>Nada cambia para esta primera parte. Ahora definimos el arreglo que va a contener estos structs:</p>
<blockquote><p>$server-&gt;wsdl-&gt;addComplexType(<br />
&#8216;courseList&#8217;,<br />
&#8216;complexType&#8217;,<br />
&#8216;array&#8217;,<br />
&#8221;,<br />
&#8216;SOAP-ENC:Array&#8217;,<br />
array(),<br />
array(<br />
array(&#8216;ref&#8217;=&gt;&#8217;SOAP:ENC:arrayType&#8217;,<br />
&#8216;wsdl:arrayType&#8217;=&gt;&#8217;tns:courseDetails[]&#8216;)<br />
),<br />
&#8216;tns:courseDetails&#8217;<br />
);</p></blockquote>
<p>Bueno, hay mucho que todavía no hemos detallado ahí, pero no es directamente el objetivo de este artículo. Una cosa es importante: esto es la forma de declarar un arreglo (no asociativo, es decir con indices numéricos unicamente) del ComplexType <em>courseDetails</em>.</p>
<p>Una vez que tenemos esto listo, la lógica nos haría pensar que simplemente debería registrar este tipo complejo en mi servicio web:</p>
<blockquote><p>// Registramos el método y su parámetro de entrada<br />
$server-&gt;register(&#8216;getCourseDetails&#8217;,           // nombre método<br />
array(&#8216;username&#8217; =&gt; &#8216;xsd:string&#8217;),            //  parametros entrantes al servicio<br />
array(&#8216;return&#8217; =&gt; &#8216;tns:courseList&#8217;),          // valor(es) retornado(s)<br />
&#8216;urn:WSCourse&#8217;,                                            // namespace (espacio de nombre)<br />
&#8216;urn:WSCourse#getCourseDetails&#8217;,         // acción SOAP<br />
&#8216;rpc&#8217;,                                                                 // estílo<br />
&#8216;encoded&#8217;,                                                       // tipo de uso<br />
&#8216;This service returns a list of courses&#8217;    // documentación<br />
);</p></blockquote>
<p>&#8230; y ahí es donde perdimos horas buscando. En realidad, parece que hay algo malo ahí, en la forma en que NuSOAP (a lo menos versión de Agosto de 2008) retorna este valor, que es incorrecto. Resulta que el cliente SOAP de PHP5 no entiende el valor retornado. Ni para este arreglo de structs, ni para el struct mismo.</p>
<h2>Abandonar la definición de tipos complejos</h2>
<p>La solución es de abandonar la idea de definir el tipo de valor retornado, y simplemente usar <strong>xsd:Array</strong> como valor de retorno:</p>
<blockquote><p>// Registramos el método y su parámetro de entrada<br />
$server-&gt;register(&#8216;getCourseDetails&#8217;,           // nombre método<br />
array(&#8216;username&#8217; =&gt; &#8216;xsd:string&#8217;),            //  parametros entrantes al servicio<br />
array(&#8216;return&#8217; =&gt; &#8216;xsd:Array&#8217;),          // valor(es) retornado(s)<br />
&#8216;urn:WSCourse&#8217;,                                            // namespace (espacio de nombre)<br />
&#8216;urn:WSCourse#getCourseDetails&#8217;,         // acción SOAP<br />
&#8216;rpc&#8217;,                                                                 // estílo<br />
&#8216;encoded&#8217;,                                                       // tipo de uso<br />
&#8216;This service returns a list of courses&#8217;    // documentación<br />
);</p></blockquote>
<p>No hay lógica ahí, es cierto, pero a lo menos espero que les ayudarán. Me estoy comunicando con los desarrolladores de NuSOAP para averiguar el tema.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dokeoslatinoamerica.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dokeoslatinoamerica.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dokeoslatinoamerica.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dokeoslatinoamerica.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dokeoslatinoamerica.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dokeoslatinoamerica.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dokeoslatinoamerica.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dokeoslatinoamerica.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dokeoslatinoamerica.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dokeoslatinoamerica.wordpress.com/540/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dokeoslatinoamerica.wordpress.com&blog=3963915&post=540&subd=dokeoslatinoamerica&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dokeoslatinoamerica.wordpress.com/2009/03/22/retornar-arrays-con-nusoap/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4087b5f4b4733f0ca6015be5f79d4ad8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ywarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Servicios web con PHP utilizando la herramienta NuSoap</title>
		<link>http://dokeoslatinoamerica.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/</link>
		<comments>http://dokeoslatinoamerica.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 23:52:04 +0000</pubDate>
		<dc:creator>cfasanando</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://dokeoslatinoamerica.wordpress.com/?p=471</guid>
		<description><![CDATA[El presente artículo esta dirigido a las personas que ya poseen conocimientos sobre Internet y programación y quieren comenzar a conocer el mundo de los web services (servicios web).
Antes de comenzar con lo que es NuSoap creo que es conveniente realizar una introducción a lo que son los Servicios Web, y para esto debemos comenzar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dokeoslatinoamerica.wordpress.com&blog=3963915&post=471&subd=dokeoslatinoamerica&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>El presente artículo esta dirigido a las personas que ya poseen conocimientos sobre Internet y programación y quieren comenzar a conocer el mundo de los web services (servicios web).</p>
<p>Antes de comenzar con lo que es NuSoap creo que es conveniente realizar una introducción a lo que son los Servicios Web, y para esto debemos comenzar con la definición de Web Service.</p>
<p><strong>Web Service</strong>: es un sistema software diseñado para soportar la interoperabilidad máquina &#8211; máquina a través de una red. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL, que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.<br />
Entonces podríamos decir que un Web Service es una comunicación por medio de mensajes SOAP  entre diferentes equipos a través de una red.</p>
<p><strong>SOAP</strong> &#8211; <strong>Simple Object Access Protocol</strong></p>
<p>Es un protocolo de comunicación, el cual permite la comunicación entre aplicaciones a través de mensajes por medio de Internet. Es independiente de la plataforma, y del lenguaje. Esta basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho, pero esto lo veremos más adelante cuando veamos un ejemplo de un mensaje SOAP.</p>
<p><strong>WSDL &#8211; Web Services Description Language</strong></p>
<p>Es un protocolo basado en XML que describe los accesos al Web Service. Podriamos decir que es el manual de operación del web service, porque nos indica cuales son las interfaces que provee el Servicio web y los tipos de datos necesarios para la utilización del mismo.</p>
<p><strong>¿Que es NuSOAP?</strong><br />
NuSOAP es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Esta compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP esta basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1<br />
No  es el único soporte para Web Services en PHP, existen otros, pero es uno de los que están en una fase de desarrollo mucho más avanzada. Sin ir más lejos, PHP a partir de su versión 5 comienza a dar soporte para SOAP, pero aun esta en fase experimental.</p>
<p>La instalación es bastante sencilla, solo basta ir a la pagina en sourceforge de NuSOAP <a href="http://sourceforge.net/projects/nusoap/">http://sourceforge.net/projects/nusoap/</a> y bajar el archivo comprimido (es un .zip).</p>
<p>Lo descomprimimos en un directorio de nuestro servidor web (como puede ser /lib que es el directorio por default), y listo, ya podemos hacer uso de NuSOAP.</p>
<p><strong>Ejemplo de servicios web utilizando nusoap</strong></p>
<p>Les mostrare la forma de usar nusoap para aplicaciones de servicios web usando wsdl.</p>
<p>ejemplo : nusoap usando wsdl</p>
<p><span style="text-decoration:underline;">(Como proveedor del servicio web)</span></p>
<p><strong>1.- Incluimos la libreria nusoap dentro de nuestro archivo </strong></p>
<p><em>require_once(&#8216;lib/nusoap.php&#8217;);</em></p>
<p><strong>2.- Creamos la instancia al servidor</strong></p>
<p><em>$server = new soap_server();</em></p>
<p><strong>3.- Inicializamos el soporte WSDL</strong></p>
<p><em>$server-&gt;configureWSDL(&#8216;hellowsdl2&#8242;, &#8216;urn:hellowsdl2&#8242;);</em></p>
<p><strong>4.- Registramos la estructura de datos usado por el servicio</strong></p>
<p><em>// Parametros de entrada<br />
$server-&gt;wsdl-&gt;addComplexType(<br />
&#8216;Person&#8217;,<br />
&#8216;complexType&#8217;,<br />
&#8217;struct&#8217;,<br />
&#8216;all&#8217;,<br />
&#8221;,<br />
array(<br />
&#8216;firstname&#8217; =&gt; array(&#8216;name&#8217; =&gt; &#8216;firstname&#8217;, &#8216;type&#8217; =&gt; &#8216;xsd:string&#8217;),<br />
&#8216;age&#8217; =&gt; array(&#8216;name&#8217; =&gt; &#8216;age&#8217;, &#8216;type&#8217; =&gt; &#8216;xsd:int&#8217;),<br />
&#8216;gender&#8217; =&gt; array(&#8216;name&#8217; =&gt; &#8216;gender&#8217;, &#8216;type&#8217; =&gt; &#8216;xsd:string&#8217;)<br />
)<br />
);<br />
// Parametros de salida<br />
$server-&gt;wsdl-&gt;addComplexType(<br />
&#8216;SweepstakesGreeting&#8217;,<br />
&#8216;complexType&#8217;,<br />
&#8217;struct&#8217;,<br />
&#8216;all&#8217;,<br />
&#8221;,<br />
array(<br />
&#8216;greeting&#8217; =&gt; array(&#8216;name&#8217; =&gt; &#8216;greeting&#8217;, &#8216;type&#8217; =&gt; &#8216;xsd:string&#8217;),<br />
&#8216;winner&#8217; =&gt; array(&#8216;name&#8217; =&gt; &#8216;winner&#8217;, &#8216;type&#8217; =&gt; &#8216;xsd:boolean&#8217;)<br />
)<br />
);</em></p>
<p><strong>5.- Registramos el metodo a exponer</strong></p>
<p><em>$server-&gt;register(&#8216;hello&#8217;,                // method name<br />
array(&#8216;person&#8217; =&gt; &#8216;tns:Person&#8217;),        // input parameters<br />
array(&#8216;return&#8217; =&gt; &#8216;tns:SweepstakesGreeting&#8217;),    // output parameters<br />
&#8216;urn:hellowsdl2&#8242;,                // namespace<br />
&#8216;urn:hellowsdl2#hello&#8217;,                // soapaction<br />
&#8216;rpc&#8217;,                        // style<br />
&#8216;encoded&#8217;,                    // use<br />
&#8216;Greet a person entering the sweepstakes&#8217;    // documentation<br />
);<br />
</em><br />
<strong>6.- Definimos el metodo como una función PHP</strong></p>
<p><em>function hello($person) {<br />
global $server;</em></p>
<p><em>$greeting = &#8216;Hello, &#8216; . $person['firstname'] .<br />
&#8216;. It is nice to meet a &#8216; . $person['age'] .<br />
&#8216; year old &#8216; . $person['gender'] . &#8216;.&#8217;;</em></p>
<p><em>if (isset($_SERVER['REMOTE_USER'])) {<br />
$greeting .= &#8216;  How do you know &#8216; . $_SERVER['REMOTE_USER'] . &#8216;?&#8217;;<br />
}</em></p>
<p><em>$winner = $person['firstname'] == &#8216;Scott&#8217;;</em></p>
<p><em>return array(<br />
&#8216;greeting&#8217; =&gt; $greeting,<br />
&#8216;winner&#8217; =&gt; $winner<br />
);<br />
}</em></p>
<p><strong>7.- Usamos el pedido para invocar el servicio</strong></p>
<p><em>$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : &#8221;;<br />
$server-&gt;service($HTTP_RAW_POST_DATA);</em></p>
<p>(Como cliente, consumidor del servicio web)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><strong>1.- Incluimos la libreria nusoap dentro de nuestro archivo </strong></p>
<p><em>require_once(&#8216;lib/nusoap.php&#8217;);</em></p>
<p><strong>2.- Creamos la instancia como cliente </strong><br />
<em>$client = new soapclient(&#8216;http://localhost/phphack/hellowsdl2.php?wsdl&#8217;, true); </em></p>
<p><strong>3.- Chekeamos para un posible error</strong></p>
<p><em>$err = $client-&gt;getError();<br />
if ($err) {<br />
// Display the error<br />
echo &#8216;&lt;h2&gt;Constructor error&lt;/h2&gt;&lt;pre&gt;&#8217; . $err . &#8216;&lt;/pre&gt;&#8217;;<br />
// At this point, you know the call that follows will fail<br />
}<br />
</em><br />
<strong>4.- Llamamos al metodo soap</strong></p>
<p><em>$person = array(&#8216;firstname&#8217; =&gt; &#8216;Willi&#8217;, &#8216;age&#8217; =&gt; 22, &#8216;gender&#8217; =&gt; &#8216;male&#8217;);<br />
$result = $client-&gt;call(&#8216;hello&#8217;, array(&#8216;person&#8217; =&gt; $person)); </em></p>
<p><strong>5.- Chekeamos para una falla al momento de llamar al metodo </strong><br />
<em>if ($client-&gt;fault) {<br />
echo &#8216;&lt;h2&gt;Fault&lt;/h2&gt;&lt;pre&gt;&#8217;;<br />
print_r($result);<br />
echo &#8216;&lt;/pre&gt;&#8217;;<br />
} else {<br />
// Check for errors<br />
$err = $client-&gt;getError();<br />
if ($err) {<br />
// Display the error<br />
echo &#8216;&lt;h2&gt;Error&lt;/h2&gt;&lt;pre&gt;&#8217; . $err . &#8216;&lt;/pre&gt;&#8217;;<br />
} else {<br />
// Display the result<br />
echo &#8216;&lt;h2&gt;Result&lt;/h2&gt;&lt;pre&gt;&#8217;;<br />
print_r($result);<br />
echo &#8216;&lt;/pre&gt;&#8217;;<br />
}<br />
}</em></p>
<p><strong>6.- Una vez que todo este bien obtenemos la información deseada del servicio a travez del metodo que hemos invocado<br />
se pude ver los pedidos y respuestas de esta manera: </strong></p>
<p><em>echo &#8216;&lt;h2&gt;Request&lt;/h2&gt;&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217; . htmlspecialchars($client-&gt;request, ENT_QUOTES) . &#8216;&lt;/pre&gt;&#8217;;<br />
echo &#8216;&lt;h2&gt;Response&lt;/h2&gt;&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217; . htmlspecialchars($client-&gt;response, ENT_QUOTES) . &#8216;&lt;/pre&gt;&#8217;;<br />
// Display the debug messages<br />
echo &#8216;&lt;h2&gt;Debug&lt;/h2&gt;&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217; . htmlspecialchars($client-&gt;debug_str, ENT_QUOTES) . &#8216;&lt;/pre&gt;&#8217;;</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dokeoslatinoamerica.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dokeoslatinoamerica.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dokeoslatinoamerica.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dokeoslatinoamerica.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dokeoslatinoamerica.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dokeoslatinoamerica.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dokeoslatinoamerica.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dokeoslatinoamerica.wordpress.com/471/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dokeoslatinoamerica.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dokeoslatinoamerica.wordpress.com/471/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dokeoslatinoamerica.wordpress.com&blog=3963915&post=471&subd=dokeoslatinoamerica&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dokeoslatinoamerica.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7061e9baf0994870dac058c9b7edc517?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cfasanando</media:title>
		</media:content>
	</item>
	</channel>
</rss>