NuSoap - как использовать локальный, существующий файл WSDL в NUSOAP client PHP
Я новичок в nusoap и веб-служб в целом.
файл wsdl поступает от клиента. У меня есть базовый веб-сервис, работающий с URL по умолчанию, который предоставляет wsdl через веб-адрес:http://hiddenurl.com/ws/schema/Terminal.wsdl
но документация клиента говорит: "Пожалуйста, загрузите файлы схемы WSDL и XML локально для вашего кода. Не получайте эти файлы каждый раз с нашего сервера."
поэтому я пытался разместить файл wsdl локально или через мой собственный веб сервер, но ни один не работал.
Я пробовал:
$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'
есть ли способ, которым я могу заставить веб-службу использовать файл wsdl из места, отличного от того, которое первоначально предоставлено клиентом? Я видел некоторые ссылки на веб-серверы, возвращающие wsdl с своего рода http://getfile.РНР?файл.язык WSDL но я не понимаю, что было бы в " getfile.php' для доставки wsdl через строку запроса.
вот мой PHP-код для вызова веб-служба. Опять же, он работает с предоставленным клиентом URL для файла wsdl, но не тогда, когда я пытаюсь получить доступ к файлу wsdl любым другим способом.
<?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>";
?>
большое спасибо.
2 ответов
попробуй такое
$wsdl_location= realpath('path/to/local/Terminal.wsdl');
$wsdl_cache = new nusoap_wsdlcache("/tmp"); // for caching purposes
$wsdl_obj = $wsdl_cache->get($wsdl_location);
if (empty($wsdl_obj)) {
$wsdl_obj=new wsdl($wsdl_location);
$wsdl_cache->put($wsdl_obj);
}
$service = new nusoap_client($wsdl_obj,true);
попробуйте использовать localhost path:
$wsdlUrl = 'http://localhost/schema/Terminal.язык WSDL';
p.s. Этот url не будет работать в браузере, но может быть выполнен через php-скрипт на сервере.