PHP
Cliente de jabón
Buscar..
Sintaxis
- __getFunctions () // Devuelve la matriz de funciones para el servicio (solo en modo WSDL)
- __getTypes () // Devuelve una matriz de tipos para el servicio (solo en modo WSDL)
- __getLastRequest () // Devuelve XML de la última solicitud (requiere la opción de
trace
) - __getLastRequestHeaders () // Devuelve los encabezados de la última solicitud (requiere la opción de
trace
) - __getLastResponse () // Devuelve XML de la última respuesta (requiere la opción de
trace
) - __getLastResponseHeaders () // Devuelve los encabezados de la última respuesta (requiere la opción de
trace
)
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
en2147483647
. 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()
);
}
...
}