Я новичок в nusoap и веб-сервисах в целом.NuSoap - Как использовать локальный, существующий файл WSDL в nusoap_client PHP
Файл 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.php?file.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>";
?>
Большое спасибо.
'путь/к/местные/Terminal.wsdl' должны работать - вы уверены, что вы передаете в правильном пути? Каково возвращаемое значение 'file_exists '(' путь/to/local/Terminal.wsdl ')'? – FuzzyTree
Спасибо за ваш комментарий. 'file_exists ('path/to/local/Terminal.wsdl')' возвращает 1, из которых я принимаю '1 == true'. – 100pic
последние версии php поставляются с родным клиентом soap (https://secure.php.net/manual/en/class.soapclient.php), если изменение клиентов - это возможность предложить попробовать собственный клиент – FuzzyTree