Jestem nowy na nusoap i ogólnie na usługi sieciowe.NuSoap - Korzystanie z lokalnego, istniejącego pliku WSDL w języku nusoap_client PHP
Plik wsdl pochodzi od klienta. Mam podstawowe usługi internetowej pracuje z domyślnym adresem URL, który dostarcza WSDL poprzez adresem: http://hiddenurl.com/ws/schema/Terminal.wsdl
Ale dokumentacji klienta mówi: „Proszę pobrać pliki WSDL i schematu XML lokalnie na kodzie do użytkowania Nie. pobierz te pliki za każdym razem z naszego serwera. "
Tak więc próbowałem hostować plik wsdl lokalnie lub przez mój własny serwer sieciowy, ale żadne z nich nie działało.
Próbowałem:
$wsdlUrl = 'http://supplied-url.com/schema/Terminal.wsdl' // working but discouraged
$wsdlUrl = 'http://my-own-IIS-based-url/schema/Terminal.wsdl' // url loads and I can
// view wsdl file, but when I load run webservice is returns blank/nothing
$wsdlUrl = 'path/to/local/Terminal.wsdl' // returns blank or 'boolean'false'
$tempUrl = realpath('path/to/local/Terminal.wsdl') // get absolute url
wsdlUrl = tempUrl; // returns blank screen or 'boolean'false'
Czy jest jakiś sposób mogę mieć usługę internetową użyć pliku WSDL z lokalizacji innej niż ta, pierwotnie dostarczonego przez klienta? Widziałem kilka odwołań do serwerów WWW zwracających wsdl z rodzajem http://getfile.php?file.wsdl, ale nie rozumiem, co byłoby w "getfile.php" w celu dostarczenia wsdl za pośrednictwem ciągu zapytania.
Oto mój kod PHP, aby zadzwonić do usługi internetowej. Znów działa z adresem URL podanym przez klienta dla pliku wsdl, ale nie wtedy, gdy próbuję uzyskać dostęp do pliku wsdl w jakikolwiek inny sposób.
<?php
require_once('nusoap.php');
$URI = 'http://api.hiddenurl.com/ws/schema';
$env = 'api';
$wsdlUrl = 'http://'.$env.'.hiddenurl.com/schema/Terminal.wsdl';
$licenseKey = 'xxxx-xxxx-xxxx-xxxx-xxxx';
$userName = 'user';
$password = 'password';
$service = new nusoap_client($wsdlUrl, true);
// login credentials
$service->setHeaders(
'<wsse:Security xmlns:wsse="http://hiddenurl.xsd">'.
'<wsse:UsernameToken>'.
'<wsse:Username>'.$userName.'</wsse:Username>'.
'<wsse:Password Type="http://hiddenurl#PasswordText">'.$password.'</wsse:Password>'.
'</wsse:UsernameToken>'.
'</wsse:Security>'
);
$msg =
'<GetDetailsRequest xmlns="'.$URI .'">'.
'<messageId></messageId>'.
'<version></version>'.
'<licenseKey>'.$licenseKey.'</licenseKey>'.
'<iccids>'.
'<iccid>'.'xxxxxxxxxxxxxxx'.'</iccid>'.
'</iccids>'.
'</GetDetailsRequest>';
$result = $service->call('GetlDetails', $msg);
if ($service->fault) {
echo 'faultcode: ' . $service->faultcode . "\n";
echo 'faultstring: ' . $service->faultstring . "\n";
echo 'faultDetail: ' . $service->faultdetail . "\n";
echo 'response: ' . $service->response;
exit(0);
}
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
Wielkie dzięki.
'ścieżka/do/local/Terminal.wsdl' powinno działać - są na pewno jesteś przejazdem we właściwej ścieżce? Jaka jest zwracana wartość 'file_exists ('path/to/local/Terminal.wsdl')'? – FuzzyTree
Dzięki za komentarz. 'file_exists ('path/to/local/Terminal.wsdl')' zwraca 1, z których zakładam '1 == true'. – 100pic
najnowsze wersje php pochodzą z natywnym klientem mydła (https://secure.php.net/manual/en/class.soapclient.php), jeśli zmiana klientów jest możliwa sugeruję wypróbowanie klienta natywnego – FuzzyTree