Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: WHK en 17 Julio 2012, 23:48 pm



Título: Problema con SOAP y PHP
Publicado por: WHK en 17 Julio 2012, 23:48 pm
Alguien sabe que rechingados sucede con este código?

Código
  1. ini_set('soap.wsdl_cache_enabled', 0);
  2. $client = new SoapClient('http://www.test/test?wsdl', array(
  3. 'soap_version' => SOAP_1_2,
  4. 'cache_wsdl' => WSDL_CACHE_NONE,
  5. //'exceptions' => 0
  6. ));
  7. $result = $client->ValidaRut(array(
  8. 'rut' => 10000000,
  9. 'dv' => '3',
  10. 'cup' => '',
  11. 'ipserver' => '',
  12. 'ipcliente' => ''
  13. ));

Esto me daba cuando le ponía SOAP_1_1:
Citar
Fatal error: Uncaught SoapFault exception: [HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. in /home/test.php:1 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://www...', 'http://www...', 1, 0) #1 /home/test.php(1): SoapClient->__call('test', Array) #2 /home/test.php(1): SoapClient->ValidaRut(Array) #3 /home/test.php on line 67

Pero al cambiar a la 1_2 me sale igual un error:
Citar
Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in ...

Cambié las rutas pero el código es ese. Que podrá ser? Instalé SOAP con easyapache desde WHM, luego recompilé php con --soap-enabled y la clase me funciona pero hay algo que al parecer no anda.

Por lo que averigué el primer errror era causado porque el rotocolo 1.1 enviaba el contenido via text/xml pero desde la 2.2 es application/soap+xml, pero bueno, cambié la version del protocolo a 1.2 pero ahora me sale un error en el header :-/ que podré hacer?

Gracias :)

PD: Acá les dejo un DUMP para mayor info:
Código:
print_r($client->__getFunctions());
Array
(
    [1] => ValidaRutResponse ValidaRut(ValidaRut $parameters)
)

print_r($client->__getTypes());
[0] => struct ValidaRut {
 double rut;
 string dv;
 string cup;
 string ipserver;
 string ipcliente;
}
    [1] => struct ValidaRutResponse {
 boolean ValidaRutResult;
}
    [4] => int char
    [5] => duration duration
    [6] => string guid
)


Título: Re: Problema con SOAP y PHP
Publicado por: WHK en 20 Julio 2012, 21:38 pm
Encontré el problema, le hize print_r($client) y pude ver la última petición por parte de la librería hacia el servidor y al intentar hacerlo desde la consola con netcat me di cuenta que era el servidor el que no enviaba correctamente las cabeceras.

Saludos.