Utilizando NuSOAP en CodeIgniter

Publicado: 27/11/2009 en CodeIgniter, desarrollo, php, Programación
Etiquetas:, , ,

You can read the English version of this post in http://phpsblog.agustinvillalba.com/using-nusoap-in-codeigniter

Hoy quiero hablar de la inclusión de la librería PHP NuSOAP en el framework de desarrollo CodeIgniter, dado que hace unos días me vi en la necesidad de realizar esta integración. En este artículo me centraré en la integración de la librería para consumir servicios web ofrecidos por un sitio externo a nosotros.


1. ¿Qué es NuSOAP?

Pero antes echemos un vistazo a ojo de pájaro qué es y para qué sirve la librería NuSOAP. Esta utilísima librería con uso muy extendido en el desarrollo web es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Está 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 está basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1. Aunque no es el único, dado que existen más herramientas de este tipo, podría decirse que esta es de las mejores y por tanto, de las más utilizadas en el desarrollo web.

2. Integrando NuSOAP en CodeIgniter

Una vez que ya sabemos qué es NuSOAP, pasamos a integrarla en nuestro framework de desarrollo. Lo primero será descargarnos la librería, la descomprimimos y la incluimos en el directorio system/application/libraries de nuestro framework CodeIgniter. Con esto ya tenemos todo listo para poder pasar al siguiente paso: realizar la integración.

La forma más cómoda de integrar esta librería en CodeIgniter es creando nuestra propia “pseudo” librería de CodeIgniter la cual a su vez llama y permite el uso de la verdadera librería NuSOAP que nos hemos bajado previamente. Digo “pseudo” porque realmente lo único que haremos será una interfaz de comunicación entre los controladores de nuestra aplicación y la librería NuSOAP en sí misma. Pasamos a desarrollar nuestra propia librería CodeIgniter, para ello creamos un nuevo archivo llamado nuSoap_lib.php (o como ustedes quieran llamarlo, el nombre sólo depende de su imaginación) dentro del directorio /system/application/libraries, al mismo nivel que el directorio que contiene a la librería NuSOAP.
Dentro de nuSoap_lib.php introducimos el siguiente código:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class nuSoap_lib{
function Nusoap_lib(){
    require_once(str_replace("\\","/",APPPATH).'libraries/NuSOAP/lib/nusoap'.EXT); //Por si estamos ejecutando este script en un servidor Windows
}
}
?>
Con esto ya tenemos creada nuestra “pseudo” librería de NuSOAP, a partir de ahora ya podemos utilizarla desde nuestros controladores. Para ello hemos de introducir el siguiente código en nuestro controlador para llamar a la librería nuSoap:
class Client extends Controller {
    function __construct() {
        parent::Controller();
        $this->load->library("nuSoap_lib");
    }

    function index() {

        $this->nusoap_client = new nusoap_client("http://url.servidor.soap");

        if($this->nusoap_client->fault)
        {
             $text = 'Error: '.$this->nusoap_client->fault;
        }
        else
        {
            if ($this->nusoap_client->getError())
            {
                 $text = 'Error: '.$this->nusoap_client->getError();
            }
            else
            {
                 $row = $this->nusoap_client->call(
                          'funcionEnElServidor',
                           array(parametros)
                        );
                ...
            }
     }
}
De esta forma, podremos consumir servicios SOAP desde nuestra aplicación implementada con CodeIgniter. Como ven, es bastante sencillo y muy cómodo. Una razón más para seguir utilizando este sencillo y potentísimo framework que es CodeIgniter.
You can read the English version of this post in http://phpsblog.agustinvillalba.com/using-nusoap-in-codeigniter/
Anuncios
comentarios
  1. ar4b1an dice:

    creo que deberías haber sido mas detallista en tu publicación se te pasaron demasiados punto para una persona que no sabe de Web servicie saludos.

  2. Daniel Molina dice:

    Pregunta, como se puede adaptar esto para que funcione con coreignither 2?

    • Simplemente adaptando la forma en que CI 2 llama a los controladores, es decir, cambiando el:
      class Client extends Controller por class Client extends CI_Controller
      y la línea:
      parent::Controller();
      por:
      parent::__construct();

      Si no recuerdo mal, con eso estaría adaptado a CI2.
      Saludos

      • Daniel Molina dice:

        gracias, supngo uqe ademas tengo que colocar el nusoap no en system/application/libraries nado que no existe application dentro de system sino dentro de application/libraries verdad.

        • Exacto! Eso también!
          Saludos!

          • Daniel Molina dice:

            Pregunta.. si otra vez yo jejejejeje

            ya cree el servidor segun la guia
            https://phpsblog.wordpress.com/2009/12/04/creando-un-servidor-nusoap-en-codeigniter
            y me muestra en la lista de los servicios y me muestra solo “obtenerMiembro”, ahora en el archivo del cliente (segun la guia actual o sea esta) en el controlador sale esto

            $row = $this->nusoap_client->call(‘funcionEnElServidor’, array(parametros));

            yo cambio ‘funcionEnElServidor’ por ‘obtenerMiembro’ y array(parametros) por array(”,”)

            ademas cambio

            $this->nusoap_client = new nusoap_client(“http://url.servidor.soap”);

            por

            $this->nusoap_client = new nusoap_client(“http://localhost/soap_server/”);

            o por

            $this->nusoap_client = new nusoap_client(“http://localhost/soap_server/index.php”);

            o por

            $this->nusoap_client = new nusoap_client(“http://localhost/soap_server/index.php?wsdl”);

            y en cada caso imprimo con print_r($row) y me sale lo mismo siempre

            Array ( [faultcode] => SOAP-ENV:Client [faultactor] => [faultstring] => method ‘obtenerMiembro’ not defined in service [detail] => )

            que puede estar pasando, segun recuerdo cuando consumi un web service echo en .net hace tiempo con php y nusoap (sin usar codeignither) esta bien la conexcion en el cliente, mas no se nada acerca del servidor… alguna ayuda… HELP jejejejeje.

            • Pasarle por parametros el array(“,”) no parece muy correcto, prueba a pasar un valor cualquiera, de la forma array(32). Fíjate que en el servidor has definido que el parámetro de entrada del método “obtenerMiembro” será un int, y no es eso lo que le estás pasando.
              Saludos!

              • Daniel Molina dice:

                Gracias, pero el error es que no encuentra ek netodo o la funcion obtenerMiembro, el l web service sale, pero al parecer no sale realmente o algo asi….

                tendra algo que ver con que en el servidor esten estas dos funciones anidaddas
                function obtener_miembro() {
                function obtenerMiembro($idMiembro) {

                }
                }

  3. Hector dice:

    Una consulta, hemos tenido reporte de que nusoap tiene problemas al parsear los caracteres especiales que puedan venir dentro de un tag ¿se puede setear el encoding de un cliente ws?

  4. gabo dice:

    excelente…gracias

  5. alvar dice:

    Cambiaria en algo este metodo para codeigniter 2.0??
    Saludos, exelente blog

  6. Enrique dice:

    Muy buen articulo… Ahora, una pregunta, como harias en caso de que quieras construir un servicio con codeIgniter + nuSoap? Creo que hay tela como para cortar para un proximo post, no?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s