2016-04-29 50 views
6

Nusoap'ta ve genel olarak web hizmetlerinde yeniyim.NuSoap - nusoap_client PHP'de yerel, varolan WSDL dosyası nasıl kullanılır?

wsdl dosyası istemciden gelir. Ben bir web adresi ile wsdl besleyen varsayılan URL ile çalışan temel bir web hizmeti. Kullanacak şekilde kod yerel WSDL ve XML şema dosyaları indirmek Lütfen" Yapma: http://hiddenurl.com/ws/schema/Terminal.wsdl

Ama müşterinin belgelerine diyor Bu dosyaları sunucudan her seferinde al. "

Bu nedenle, wsdl dosyasını yerel olarak veya kendi web sunucum üzerinden barındırmaya çalışıyorum, ancak ikisi de işe yaramadı.

denedim:

$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' 

Ben web hizmeti var herhangi bir yolu başlangıçta istemci tarafından verilenden başka bir yerden wsdl dosyasını kullanmak var mı? Ben wsdl bir tür http://getfile.php?file.wsdl döndüren web sunucuları için bazı referanslar gördüm ama ben wsdl sorgu dizesi üzerinden teslim etmek için 'getfile.php' içinde ne olacağını anlamıyorum.

Web servisimi aramak için benim PHP kodum. Yine, wsdl dosyası için istemci tarafından verilen URL ile çalışır, ancak herhangi bir şekilde wsdl dosyasına erişmeye çalıştığımda değil.

<?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>"; 

?> 

Çok teşekkürler.

+0

'yolunu deneyin - Doğru yolda geçirerek emin misin? File_exists ('path/to/local/Terminal.wsdl') 'dönüş değeri nedir? – FuzzyTree

+1

Yorumunuz için teşekkürler. 'file_exists ('path/to/local/Terminal.wsdl')' 1 değerini döndürdüğüm 1 değerini döndürür. – 100pic

+0

php'nin son sürümleri yerel bir sabo istemcisi ile birlikte gelir (https://secure.php.net/manual/en/class.soapclient.php), istemcileri değiştirmek istemiyorum, yerel istemciyi denemeyi öneririm – FuzzyTree

cevap

5

/yerel/Terminal.wsdl` çalışmalıdır için/bu

$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 yolu kullanarak deneyin:

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

p.s. Bu URL tarayıcıda çalışmaz, ancak sunucuda php komut dosyasıyla çalıştırılabilir.

+1

Neden bu zaten denedim '$ wsdlUrl = 'http: // kendi-IIS-based-url/schema/Terminal.wsdl'' dan farklı olurdu – Christiaan