Hola recien llego de mi trabajo y me anime a escribir acerca de este tema tan interesante y de moda; Para crear Servicios Web en PHP 5 usaremos las clases de NuSOAP:

1.- Para que funcione el ejemplo descárgate las clases de NuSOAP versión 0.7.3 puedes hacerlo desde la pagina http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap.

3.- Luego ejecutas en tu MySQL 5.0 el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Luego crea una pagina PHP (en este ejemplo la pagina se llama servicioweb.php) y codificas lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
require_once('lib-nusoap/nusoap.php');
 
$server = new soap_server;
 
$ns="http://192.168.1.5/aplicativo"; // espacio de nombres; Sitio donde estará alojado el web service
$server->configurewsdl('MiWebService'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;
 
/************ REGISTRANDO EL ARRAY A DEVOLVER(array de productos) **************/
$server->wsdl->addComplexType(
	'ArregloProductos', 			// Nombre
	'complexType', 					// Tipo de Clase
	'array', 						// Tipo de PHP
	'', 							// definición del tipo secuencia(all|sequence|choice)
	'SOAP-ENC:Array', 				// Restricted Base
	array(),
	array(
		array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Productos[]') // Atributos
	),
	'tns:Productos'
);
 
/************ REGISTRANDO LA ESTRUCTURA DE DATOS PRODUCTOS **************/
$server->wsdl->addComplexType('Productos', 'complexType', 'struct', 'all', '',
    array(
		'ProductoID'=> array('name' => 'ProductoID','type' => 'xsd:int'),
		'Nombre'    => array('name' => 'Nombre',    'type' => 'xsd:string'),
		'Precio'    => array('name' => 'Precio',    'type' => 'xsd:string')
    )
);
 
/*METODO DEL WEB SERVICE*/
function ListarProductos($estado){
	if($estado!=''){
		$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
		$db_result = $db->connect ("localhost", "root", "","db_productos");
		$sql=sprintf("call usp_ListarProductos('%s');",$estado); //intentando filtrar el SQL Injection
		$result = $db->query($sql);
		if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra
		$db->close();
		$i=0;
		if($result->num_rows>0){
			while($row = mysqli_fetch_assoc($result)){
				$toc[$i]['ProductoID'] = $row["producto_id"];
				$toc[$i]['Nombre'] = $row["nombre"];
				$toc[$i]['Precio'] = $row["precio"];
				$i++;
			}
			$result->free; //liberando memoria
			return $toc;
		}
	}
	return '';
}
 
/************ REGISTRANDO EL METODO **************/
$server->register(
	'ListarProductos',   						// Nombre del Método
    array('estado' => 'xsd:string' ),           // Parámetros de Entrada
    array('return' => 'tns:ArregloProductos')   //Datos de Salida
);
 
 
/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : implode("\r\n", file('php://input'));
$server->service($input);
exit;
?>

Y al ejecutar en el navegador te debe mostrar algo así:

crear_un_servicio_web_en_php5_utilizando_nusoap

Si deseas puedes descargar el ejemplo completo desde aquí.

También te recomiendo que leas Consumir un Servicio Web en PHP utilizando NuSoap

Suerte Tigre !!