De acuerdo, creo que necesito otro par de ojos para ver esto. Estoy haciendo una llamada simple de php soapclient a un servicio web echo en un servidor remoto. Estoy bastante seguro de que no tengo ningún error tipográfico y que la llamada a la función es correcta. Sin embargo, recibo un error fatal al afirmar que la función no es un método válido. A continuación se muestra un var_dump de los tipos de servicios web.Solicitud de PHP SoapClient: no es un método válido para este servicio
array(4) { [0]=> string(88) "struct EspException { string Code; string Audience; string Source; string Message; }" [1]=> string(71) "struct ArrayOfEspException { string Source; EspException Exception; }" [2]=> string(43) "struct EchoTestRequest { string ValueIn; }" [3]=> string(45) "struct EchoTestResponse { string ValueOut; }" }
Fatal error: Uncaught SoapFault exception: [Client] Function ("EchoTestRequest") is not a valid method for this service in /home/grafixst/public_html/cpaapp/echo_test.php:38 Stack trace: #0 /home/grafixst/public_html/cpaapp/echo_test.php(38): SoapClient->__call('EchoTestRequest', Array) #1 /home/grafixst/public_html/cpaapp/echo_test.php(38): SoapClientAuth->EchoTestRequest(Array) #2 {main} thrown in /home/grafixst/public_html/cpaapp/drew/echo_test.php on line 38
Aquí está el código que estoy usando para hacer la llamada:
<?php
require_once('SoapClientAuth.php');
ini_set("soap.wsdl_cache_enabled", "0");
#- Loading the WSDL document
$server = "https://wsonline.seisint.com/WsAccurint/EchoTest?ver_=1.65";
$wsdl = $server . "&wsdl";
$client = new SoapClientAuth($wsdl,
array(
'login' => $username,
'password' => $password
));
$types = $client->__getTypes();
var_dump($types);
echo "</br>";
$req = $client->EchoTestRequest(array('ValueIn' => 'echo'));
print $req->ValueOut;
echo "</br>";
?>
¡Esto me salvó el día! si una función aparece en WSDL pero no puede llamarla, verifique esta respuesta, ya que revelará todas las funciones disponibles. – diynevala
Después de darme cuenta de que el método no estaba en la lista, agregué "? V = 1" a wsdl url y el nuevo wsdl se cargó con el nuevo método disponible. – wormhit
Me encontré con un problema similar e intenté su respuesta, arreglé el archivo WSDL. var_dump() todavía daría el mismo resultado. Resultó que también estaba almacenando en caché el archivo WSDL. Entonces su respuesta junto con [esta respuesta] (http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache) resolvió el problema. Gracias. –