NuSoap - 如何在 nusoap_client PHP 中使用本地现有 WSDL 文件

NuSoap - How to use local, existing WSDL file in nusoap_client PHP

我是 nusoap 的新手,一般来说也是 Web 服务的新手。

wsdl文件来自客户端。我有一个使用默认 URL 的基本 Web 服务,它通过网址提供 wsdl:http://hiddenurl.com/ws/schema/Terminal.wsdl

但是客户的文档说: "Please download the WSDL and XML schema files locally for your code to use. Do not get those files every time from our server."

所以我一直在尝试在本地或通过我自己的网络服务器托管 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'

有什么方法可以让 Web 服务从客户端最初提供的位置以外的位置使用 wsdl 文件?我已经看到一些关于 Web 服务器返回带有某种 http://getfile.php?file.wsdl 的 wsdl 的引用,但我不明白 'getfile.php' 中会包含什么以便通过查询字符串传递 wsdl。

这是我的 PHP 调用网络服务的代码。同样,它与为 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>";

?>

非常感谢。

尝试使用本地主机路径:

$wsdlUrl = 'http://localhost/schema/Terminal.wsdl';

p.s。此 url 在浏览器中不起作用,但可以通过服务器上的 php 脚本执行。

试试这个

$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);