Pregunta

He estado trabajando en un script con PHP4 que se basa en NuSOAP. Ahora, estoy tratando de mover esto a PHP5 y usar el soporte de construcción para SOAP allí.

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

La versión PHP5 arroja la siguiente excepción stacktrace:

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

Ahora, como la versión NuSOAP funciona, y el PHP5 puro no funciona, no hace falta que un cirujano cerebral se dé cuenta de que estoy haciendo algo mal. Tengo acceso al archivo .htaccess, y a través de phpinfo () me he asegurado de que estoy ejecutando NuSOAP correctamente y ejecutando PHP5 cuando debería, y PHP4 / Nusoap cuando debería.

Básicamente, no soy muy bueno con los servicios web y el jabón, pero si alguien tiene alguna idea, agradecería cualquier comentario sobre lo que estoy haciendo mal y cómo puedo pasar al jabón nativo en PHP5. Por cierto, la resonancia que quiero este movimiento en primer lugar es el supuesto ahorro de recursos en el jabón nativo. Agradecería cualquier enlace a puntos de referencia entre estas dos soluciones también.

¿Fue útil?

Solución

Asegúrese de que NuSoap y PHPv5-SOAP se estén ejecutando en el mismo servidor. Si no estoy totalmente equivocado, ambas bibliotecas usan el mismo nombre de clase. ¿Tal vez funcionará mejor si se asegura de que no se incluyan archivos NuSopa? Y también verifique que la biblioteca SOAP esté cargada:

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

Supongo que el campo de versión al que te refieres se define como " SOAP 1.1 " o similar?

Mis mejores deseos :)

Por cierto: ¿en qué estás trabajando? ¿Intercambio de retrasos del piloto al aeropuerto? ¿O tal vez un servicio web que disminuirá el tiempo de espera en la entrega de equipaje en Osl? : p

Otros consejos

Tuvimos problemas muy similares con el cliente SOAP PHP5 integrado que intentaba consumir un servicio web basado en .NET. También el análisis WSDL falló al informar un esquema no válido. Poner las definiciones de esquema en un solo archivo local no ayudó.

Dejamos de intentarlo y cambiamos a NuSOAP, que funcionó.

Sin embargo, NuSOAP está lejos de ser perfecto también. En este momento, me quedo sin memoria durante el análisis de las respuestas de 1 MB +. Borrar todo el desagradable código de depuración ayudó un poco, pero no radicalmente.

Por lo tanto, parece que no hay una implementación de cliente SOAP 100% interoperable / funcional en PHP en este momento.

Sin probarlo, tengo dos sugerencias:

Primero, coloque su error_reporting lo más alto posible (antes de crear SoapClient):

error_reporting( E_ALL );

Si hay algún problema con la autenticación del lado del servidor, PHP lanzará advertencias. En la mayoría de los casos, le dirá qué salió mal.

Segundo: no sé si puede especificar la opción 'ubicación' junto con una URL a un wsdl. Teóricamente, el wsdl le dice a su cliente, dónde está el punto final de las operaciones, para que no tenga que molestarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top