You are on page 1of 3

CREAR UN WEBSERVICE BSICO CON PHP Y SOAP

SOAP es un protocolo de intercambio para servicios web basado en XML Para facilitarnos la
vida e!e"areos !or descar#ar NuSOAP$ %ue nos proveer de diversas clases para trabajar
con este protocolo&
O'$ con NuSOAP instalado toca crear un servidor SOAP en nuestra a!licaci(n& Para el e)e!lo
creareos un servidor$ lo llaareos producto.php$ %ue si reci*e una !etici(n donde se le !ida una
lista de li*ros devuelva tres t+tulos ,es un e)e!lo *-sico$ !iensa %ue en la realiad !odr+as acceder a
una *ase de datos . dar uc/as -s funcionalidades0&
<?php
require_once "nusoap.php";

function getProd($categoria) {
if ($categoria == "libros") {
return oin("!"! arra"(
"#l se$or de los anillos"!
"%os l&'ites de la (undaci)n"!
"*he +ails ,a""));
-
else {
return ".o ha" productos de esta categoria";
-
-

$ser/er = ne0 soap_ser/er();
$ser/er12register("getProd");
$ser/er12ser/ice($3**P_+4,_P56*_74*4);
?2
O'$ a/ora necesitas un cliente$ %ue llaareos cliente.php& En el constructor$ el cliente reci*ir- el
url del servidor . !ara acceder al 1todo %ue nos devuelve los li*ros recurrireos al 1todo call()$ al
cual le !asareos el no*re del 1todo del servidor al %ue %uereos acceder . los parmetros en
forma de array& Ade-s$ ta*i1n controlareos %ue no /a.a errores en la counicaci(n&
<?php
require_once "nusoap.php";
$cliente = ne0 nusoap_client("http899localhost9producto.php");

$error = $cliente12get#rror();
if ($error) {
echo "<h:2;onstructor error<9h:2<pre2" . $error . "<9pre2";
-

$result = $cliente12call("getProd"! arra"("categoria" =2 "libros"));

if ($cliente12fault) {
echo "<h:2(ault<9h:2<pre2";
print_r($result);
echo "<9pre2";
-
else {
$error = $cliente12get#rror();
if ($error) {
echo "<h:2#rror<9h:2<pre2" . $error . "<9pre2";
-
else {
echo "<h:2%ibros<9h:2<pre2";
echo $result;
echo "<9pre2";
-
-
?2
Con esto .a tienes una idea my bsica del funcionamiento de un webservice SOAP
construdo con P!P& Pero claro$ nos falta un arc/ivo WS23 !ara tener un 4e*service decente&
Aun%ue dic/o arc/ivo !uede ser escrito a ano$ NuSOAP puede "enerarlo por ti !as-ndole
ciertos !ar-etros$ !or lo %ue lo ideal ser+a #enerarlo en el servidor& As+ %ue odi5ca
tu producto.php !ara %ue %uede tal %ue as+6
<?php
require_once "nusoap.php";

function getProd($categoria) {
if ($categoria == "libros") {
return oin("!"! arra"(
"#l se$or de los anillos"!
"%os l&'ites de la (undaci)n"!
"*he +ails ,a""));
-
else {
return ".o ha" productos de esta categoria";
-
-

$ser/er = ne0 soap_ser/er();
$ser/er12configure,67%("producto"! "urn8producto");

$ser/er12register("getProd"!
arra"("categoria" =2 "<sd8string")!
arra"("return" =2 "<sd8string")!
"urn8producto"!
"urn8producto=getProd"!
"rpc"!
"encoded"!
".os da una lista de productos de cada categor&a");

$ser/er12ser/ice($3**P_+4,_P56*_74*4);
?2
Coo ves$ el ca*io en es cuando llaaos a re#ister$ .a %ue en ve" de !asarle$ coo antes$ el
1todo en cuesti(n$ le a7adios ta*i1n varios ar#uentos !ara #enerar el WS236El primer
array nos !erite de5nir el ar"umento de entrada y su tipo de datos
El se#undo de5ne la funci#n de retorno y su tipo de datos
urn:producto es la de$nici#n del namespace
urn:producto#getProd es donde de$nimos la acci#n SOAP
3ue#o viene el tipo de llamada$%ue !uede ser rpc$ coo en el e)e!lo$ odocument
8ras esto de$nimos el valor del atribute use$ %ue !uede ser encodedo literal
9inalente viene una descripci#n de %u& 'ace el m&todo al %ue llaaos
A/ora *asta con %ue en el nave#ador accedas a producto.php?wsdl . ver-s el WS23 #enerado& Ya
!uedes co!iarlo . a7adirlo a tu directorio 4e* ,crea un arc/ivo . ll-alo$ !or e)e!lo$ libros.wsdl0&
Para %ue el cliente lo utilice de*es odi5car el c(di#o$ . en el constructor$ en ve" del url le !asas el
no*re del arc/ivo$ de fora %ue %uede coo en el e)e!lo6
1
$client = ne0 nusoap_client("libros.0sdl"! true);
A/ora s+$ .a tienes ontado un pe%ue(o servicio web& El e)e!lo es si!l(n$ !ero !iensa en todas
las funcionalidades %ue !odr+as incor!orarle&

You might also like