PHP SOAP istek başarısızlık için çözüm Wsdl https ve port 80 olarak bağlayıcı servis noktasını tanımlar?

2 Cevap php

Ben php5 en sabun uzantısını kullanarak bir SOAP web hizmeti tüketen duyuyorum. ** 80: Hizmet 'Wsdl Eksen java2wsdl kullanılarak oluşturulan, ve ne olursa olsun seçenekler https :/ / xxx.xxx.xxx.xxx ** olarak listelenmesini liman bağlama url nesil sonucunda sırasında kullanılan

Benim sunucuya wsdl yüklerseniz, liman bağlama yeri değerinden port 80 şartname kaldırmak, ve gayet iyi çalışıyor çağrı benim SoapClient yerel dosyayı başvuru.

Ancak, ben onu uzaktan başvuru (veya-is, indirmek ve yerel olarak referans) çağrısı bir sabun arıza ile başarısız çalışırsanız.

Ben bu yüzden onların Wsdl nesil süreci değiştirmek yapamazsınız servis tarafında içine hiçbir giriş var. Liman SoapClient cahil yapmak için bir yol var sürece, yani, ben başkasının wsdl (ben değil yapamam ederim) bir lokal olarak modifiye edilmiş bir kopyasını kullanarak şaşırıp.

Benim SoapClient yapmak konusunda herhangi bir düşünce noktasını 80 görmezden?

2 Cevap

Sen SoapClient en kurucusuna ikinci argüman olarak geçirebiliriz $ seçenekler dizi kullanarak hostname / bağlantı noktasını geçersiz kılma denemek isteyebilirsiniz:

$client = new SoapClient("some.wsdl", array('proxy_host' => "https://example.org", 'proxy_port' => 443);

Eğer daha zarif bir çözüm bulamazsanız, her zaman, dosyayı karşıdan dize değiştirmeleri yapmak, daha sonra kullanmak WSDL olarak. Olabilir

$cached_wsdl_file = './cached_wsdl.xml';
if (filemtime($cached_wsdl_file) > time() - 3600) {
    $wsdl = file_get_contents('http://server/service?wsdl');
    $wsdl = str_replace('server:80', 'server', $wsdl);
    file_put_contents($cached_wsdl_file, $wsdl);
}
$client = new SoapClient($cached_wsdl_file);