Buscar..


Sintaxis

Parámetros

Parámetro Detalles
$ wsdl URI de WSDL o NULL si se utiliza el modo no WSDL
$ opciones Array de opciones para SoapClient. El modo no WSDL requiere location y uri para establecer, todas las demás opciones son opcionales. Consulte la tabla a continuación para ver los posibles valores.

Observaciones

La clase SoapClient está equipada con un método __call . Esto no debe ser llamado directamente. En su lugar, esto le permite hacer:

$soap->requestInfo(['a', 'b', 'c']);

Esto llamará al método de requestInfo SOAP.


Tabla de posibles valores de $options ( Array de pares clave / valor ):

Opción Detalles
ubicación URL del servidor SOAP. Requerido en modo no WSDL. Se puede utilizar en modo WSDL para anular la URL.
uri Espacio de nombres de destino del servicio SOAP. Requerido en modo no WSDL.
estilo Los valores posibles son SOAP_RPC o SOAP_DOCUMENT . Sólo válido en modo no WSDL.
utilizar Los valores posibles son SOAP_ENCODED o SOAP_LITERAL . Sólo válido en modo no WSDL.
soap_version Los valores posibles son SOAP_1_1 ( predeterminado ) o SOAP_1_2 .
autenticación Habilitar la autenticación HTTP. Los valores posibles son SOAP_AUTHENTICATION_BASIC ( predeterminado ) o SOAP_AUTHENTICATION_DIGEST .
iniciar sesión Nombre de usuario para autenticación HTTP
contraseña Contraseña para la autenticación HTTP
proxy_host URL del servidor proxy
Puerto proxy Puerto de servidor proxy
proxy_login Nombre de usuario para proxy
proxy_password Contraseña para proxy
local_cert Ruta al certificado de cliente HTTPS (para autenticación)
frase de contraseña Frase de contraseña para el certificado de cliente HTTPS
compresión Comprimir la solicitud / respuesta. El valor es una máscara de bits de SOAP_COMPRESSION_ACCEPT con SOAP_COMPRESSION_GZIP o SOAP_COMPRESSION_DEFLATE . Por ejemplo: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP .
codificación Codificación interna de caracteres (TODO: valores posibles)
rastro Booleano , por defecto es FALSE . Habilita el seguimiento de las solicitudes para que las fallas se puedan retroceder. Habilita el uso de __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() y __getLastResponseHeaders() .
mapa de clase Mapear los tipos WSDL a las clases de PHP. El valor debe ser una matriz con tipos WSDL como claves y nombres de clase de PHP como valores.
excepciones Valor booleano . En caso de excepciones de errores SOAP (de tipo `SoapFault).
el tiempo de conexión expiro Tiempo de espera (en segundos) para la conexión al servicio SOAP.
mapa de tipo Matriz de asignaciones de tipo. La matriz debe ser pares clave / valor con las siguientes claves: type_name , type_ns (URI del espacio de nombres), from_xml (devolución de llamada que acepta un parámetro de cadena) y to_xml (devolución de llamada que acepta un parámetro de objeto).
cache_wsdl Cómo (si lo hace) el archivo WSDL debe ser almacenado en caché. Los valores posibles son WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY o WSDL_CACHE_BOTH .
agente de usuario Cadena para usar en el encabezado User-Agent .
stream_context Un recurso para un contexto.
caracteristicas Máscara de bits de SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS .
mantener viva ( Versión de PHP> = 5.4 solamente ) Valor booleano . Envíe el encabezado Connection: Keep-Alive ( TRUE ) o Connection: Close header ( FALSE ).
ssl_method ( Versión de PHP> = 5.5 solamente ) Qué versión de SSL / TLS usar. Los valores posibles son SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 o SOAP_SSL_METHOD_SSLv23 .

Problema con PHP de 32 bits : en PHP de 32 bits, las cadenas numéricas mayores de 32 bits que se convierten automáticamente en enteros por xs:long resultarán en que alcance el límite de 32 bits, 2147483647 en 2147483647 . Para __soapCall() esto, lance las cadenas para que floten antes de pasarlo a __soapCall() .

Modo WSDL

Primero, cree un nuevo objeto SoapClient , pasando la URL al archivo WSDL y, opcionalmente, una variedad de opciones.

// Create a new client object using a WSDL URL
$soap = new SoapClient('https://example.com/soap.wsdl', [
    # This array and its values are optional
    'soap_version' => SOAP_1_2,
    'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
    'cache_wsdl' => WSDL_CACHE_BOTH,
    # Helps with debugging
    'trace' => TRUE,
    'exceptions' => TRUE
]);

Luego usa el objeto $soap para llamar a tus métodos SOAP.

$result = $soap->requestData(['a', 'b', 'c']);

Modo no WSDL

Esto es similar al modo WSDL, excepto que pasamos NULL como el archivo WSDL y nos aseguramos de establecer la location y las opciones de uri .

$soap = new SoapClient(NULL, [
    'location' => 'https://example.com/soap/endpoint',
    'uri' => 'namespace'
]);

Mapas de clase

Al crear un cliente SOAP en PHP, también puede establecer una clave de classmap en la matriz de configuración. Este classmap define qué tipos definidos en el WSDL deben asignarse a clases reales, en lugar del StdClass predeterminado. La razón por la que querría hacer esto es porque puede completar automáticamente los campos y las llamadas a métodos en estas clases, en lugar de tener que adivinar qué campos se configuran en la StdClass regular.

class MyAddress {
    public $country;
    public $city;
    public $full_name;
    public $postal_code; // or zip_code
    public $house_number;
}

class MyBook {
    public $name;
    public $author;

    // The classmap also allows us to add useful functions to the objects
    // that are returned from the SOAP operations.
    public function getShortDescription() {
        return "{$this->name}, written by {$this->author}";
    }
}

$soap_client = new SoapClient($link_to_wsdl, [
    // Other parameters
    "classmap" => [
        "Address" => MyAddress::class, // ::class simple returns class as string
        "Book" => MyBook::class,
    ]
]);

Después de configurar el mapa de clase, siempre que realice una determinada operación que devuelva un tipo de Address o Book , SoapClient creará una instancia de esa clase, llenará los campos con los datos y los devolverá desde la llamada de la operación.

// Lets assume 'getAddress(1234)' returns an Address by ID in the database
$address = $soap_client->getAddress(1234);

// $address is now of type MyAddress due to the classmap
echo $address->country;

// Lets assume the same for 'getBook(1234)'
$book = $soap_client->getBook(124);

// We can not use other functions defined on the MyBook class
echo $book->getShortDescription();

// Any type defined in the WSDL that is not defined in the classmap
// will become a regular StdClass object
$author = $soap_client->getAuthor(1234);

// No classmap for Author type, $author is regular StdClass.
// We can still access fields, but no auto-completion and no custom functions
// to define for the objects.
echo $author->name;

Rastreo de solicitud y respuesta SOAP

A veces queremos ver lo que se envía y recibe en la solicitud de SOAP. Los siguientes métodos devolverán el XML en la solicitud y respuesta:

SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()

Por ejemplo, supongamos que tenemos una constante de ENVIRONMENT y cuando el valor de esta constante se establece en DEVELOPMENT , queremos repetir toda la información cuando la llamada a getAddress un error. Una solución podría ser:

try {
    $address = $soap_client->getAddress(1234);
} catch (SoapFault $e) {
    if (ENVIRONMENT === 'DEVELOPMENT') {
        var_dump(
            $soap_client->__getLastRequestHeaders()
            $soap_client->__getLastRequest(),
            $soap_client->__getLastResponseHeaders(),
            $soap_client->__getLastResponse()
        );
    }
    ...
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow