multidimensional array php soap wsdl port nusoap

php - nusoap multidimensional array



Pasar de NuSOAP a PHP5 SOAP (3)

He estado trabajando en un script con PHP4 que se basa en NuSOAP. Ahora, intento mover esto a PHP5 y usar el soporte de buildin 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 lanza la siguiente stacktrace de excepción:

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 la PHP5 pura no, no hace falta un cirujano cerebral para descubrir que estoy haciendo algo mal. Tengo acceso al archivo .htaccess y, a través de phpinfo (), me he asegurado de ejecutar NuSOAP correctamente y ejecutar 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 aporte sobre lo que estoy haciendo mal y cómo puedo pasar al jabón nativo en PHP5. Por cierto, lo primero que quiero es este movimiento es el supuesto ahorro de recursos en el jabón nativo. Apreciaría cualquier enlace a los puntos de referencia entre estas dos soluciones tambié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 los 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 se refiere se define como "SOAP 1.1" o similar.

Los 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? :pag

Tuvimos problemas muy similares con el cliente SOAP integrado de PHP5 que intentaba consumir un servicio web basado en .NET. Además, 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 meto en la situación de falta de memoria durante el análisis de 1MB + respuestas. Borrar todo el desagradable código de depuración ayudó un poco, pero no radicalmente.

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


Sin probarlo, tengo dos sugerencias:

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

error_reporting( E_ALL );

Si hay algo mal con la autenticación por parte del servidor, PHP lanzará advertencias. En la mayoría de los casos, le dirá qué fue lo que 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 se encuentra el punto final de las operaciones, para que no tenga que molestarse.