2016-04-29 9 views
6

nusoapとWebサービスの新機能です。NuSoap - nusoap_clientでローカルの既存のWSDLファイルを使用する方法PHP

wsdlファイルはクライアントからのものです。 http://hiddenurl.com/ws/schema/Terminal.wsdl

しかし、クライアントのマニュアルは言う:私は、Webアドレスを経由して、WSDLを提供するデフォルトのURLを扱う基本的なWebサービスを持っている。 「を使用するようにコードのためのローカル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ファイルを使用することができます方法はありますか?私はhttp://getfile.php?file.wsdlの種類のwsdlを返すWebサーバーへの参照を見てきましたが、wsdlをクエリ文字列で配信するために 'getfile.php'に何があるのか​​分かりません。

ここでは、Webサービスを呼び出すための私の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>"; 

?> 

多くのありがとう。

+0

を試してみてください - あなたは正しいパスを渡していることを確認していますか? 'file_exists( 'path/to/local/Terminal.wsdl')'の戻り値は何ですか? – FuzzyTree

+1

ご意見ありがとうございます。 'file_exists( 'path/to/local/Terminal.wsdl')'は1を返します。そのうち私は '1 == true'を返します。 – 100pic

+0

クライアントの変更が可能であれば、ネイティブクライアントを試すことをお勧めします。 – FuzzyTree

答えて

5

`パス/に/ローカル/ Terminal.wsdl`が動作するはずです。この

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

localhostのパスを試してみてください:

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

p.s.このURLはブラウザでは動作しませんが、サーバ上のPHPスクリプトを通して実行できます。

+1

これは、彼がすでに試した '$ wsdlUrl = 'http:// my-own-IIS-based-url/schema/Terminal.wsdl' – Christiaan

関連する問題