我是nusoap和一般Web服务的新手。NuSoap - 如何在nusoap_client中使用本地现有的WSDL文件PHP
wsdl文件来自客户端。我有一个基本的Web服务与通过网络地址提供WSDL中的默认URL工作:http://hiddenurl.com/ws/schema/Terminal.wsdl
但客户端的文件说: “请本地下载的WSDL和XML架构文件为您的代码使用别。每次从我们的服务器获取这些文件。“
所以我一直试图在本地托管wsdl文件,或通过我自己的web服务器,但都没有工作。
我曾尝试:
$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'
有什么办法,我可以有Web服务使用WSDL文件从比原先客户端提供了一个不同的位置?我已经看到一些引用Web服务器返回wsdl与http://getfile.php?file.wsdl类型,但我不明白'getfile.php'为了通过查询字符串提供wsdl会是什么。
这是我的PHP代码来调用Web服务。同样,它可以与客户端提供的wsdl文件的URL一起使用,但当我尝试以任何其他方式访问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('path/to/local/Terminal.wsdl')'的返回值是什么? – FuzzyTree
感谢您的评论。 'file_exists('path/to/local/Terminal.wsdl')'返回1,其中我假设'1 == true'。 – 100pic
最近版本的php自带肥皂客户端(https://secure.php.net/manual/en/class.soapclient.php),如果更改客户端是可能性,我建议尝试本地客户端 – FuzzyTree