TigerZF
🌐Español

66.2. Zend_Soap_Client

La clase Zend_Soap_Client simplifica el desarrollo de clientes SOAP para programadores PHP.

Puede usarse en modo WSDL o no-WSDL.

En el modo WSDL, el componente Zend_Soap_Client usa un documento WSDL para definir las opciones de la capa de transporte.

La descripción WSDL normalmente la proporciona el servicio web al que accederá el cliente. Si la descripción WSDL no está disponible, puede que desee usar Zend_Soap_Client en modo no-WSDL. En este modo, todas las opciones del protocolo SOAP deben establecerse explícitamente en la clase Zend_Soap_Client.

66.2.1. Constructor de Zend_Soap_Client

El constructor de Zend_Soap_Client toma dos parámetros:

  • $wsdl: el URI de un archivo WSDL.

  • $options: opciones para crear el objeto cliente SOAP.

Ambos parámetros pueden establecerse posteriormente usando los métodos setWsdl($wsdl) y setOptions($options) respectivamente.

[Note] ¡Importante!

Si usa el componente Zend_Soap_Client en modo no-WSDL, debe establecer las opciones 'location' y 'uri'.

Se reconocen las siguientes opciones:

  • 'soap_version' ('soapVersion'): versión de soap a usar (SOAP_1_1 o SOAP_1_2).

  • 'classmap' ('classMap'): puede usarse para asignar algunos tipos WSDL a clases PHP.

    La opción debe ser un array con los tipos WSDL como claves y los nombres de las clases PHP como valores.

  • 'encoding': codificación de caracteres interna (UTF-8 siempre se usa como codificación externa).

  • 'wsdl', que equivale a la llamada setWsdl($wsdlValue).

    Cambiar esta opción puede alternar el objeto Zend_Soap_Client entre el modo WSDL y el modo no-WSDL.

  • 'uri': espacio de nombres de destino para el servicio SOAP (requerido para el modo no-WSDL, no funciona en modo WSDL).

  • 'location': la URL a solicitar (requerida para el modo no-WSDL, no funciona en modo WSDL).

  • 'style': estilo de la solicitud (no funciona en modo WSDL): SOAP_RPC o SOAP_DOCUMENT.

  • 'use': método para codificar los mensajes (no funciona en modo WSDL): SOAP_ENCODED o SOAP_LITERAL.

  • 'login' y 'password': usuario y contraseña para una autenticación HTTP.

  • 'proxy_host', 'proxy_port', 'proxy_login' y 'proxy_password': para una conexión HTTP a través de un servidor proxy.

  • 'local_cert' y 'passphrase': opciones de autenticación de certificado de cliente HTTPS.

  • 'compression': opciones de compresión; es una combinación de las opciones SOAP_COMPRESSION_ACCEPT, SOAP_COMPRESSION_GZIP y SOAP_COMPRESSION_DEFLATE, que pueden usarse de esta manera:

    // Accept response compression
    $client = new Zend_Soap_Client("some.wsdl",
      array('compression' => SOAP_COMPRESSION_ACCEPT));
    ...
    
    // Compress requests using gzip with compression level 5
    $client = new Zend_Soap_Client("some.wsdl",
      array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5));
    ...
    
    // Compress requests using deflate compression
    $client = new Zend_Soap_Client("some.wsdl",
      array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE));
    

66.2.2. Realizar solicitudes SOAP

Después de haber creado un objeto Zend_Soap_Client estamos listos para realizar solicitudes SOAP.

Cada método del servicio web se asigna al método virtual del objeto Zend_Soap_Client correspondiente, que toma parámetros con tipos comunes de PHP.

Úselo como en el siguiente ejemplo:

//****************************************************************
//                Server code
//****************************************************************
// class MyClass {
//     /**
//      * This method takes ...
//      *
//      * @param integer $inputParam
//      * @return string
//      */
//     public function method1($inputParam) {
//         ...
//     }
//
//     /**
//      * This method takes ...
//      *
//      * @param integer $inputParam1
//      * @param string  $inputParam2
//      * @return float
//      */
//     public function method2($inputParam1, $inputParam2) {
//         ...
//     }
//
//     ...
// }
// ...
// $server = new Zend_Soap_Server(null, $options);
// $server->setClass('MyClass');
// ...
// $server->handle();
//
//****************************************************************
//                End of server code
//****************************************************************

$client = new Zend_Soap_Client("MyService.wsdl");
...

// $result1 is a string
$result1 = $client->method1(10);
...

// $result2 is a float
$result2 = $client->method2(22, 'some string');