2012-01-26 14 views
17

Bu aracılığıyla (weather) örnek SOAP temel kullanımını öğrenmek istiyorum. Bu veriler nasıl işlemeye değer?Php'de nasıl sabun sınıfı kullanılır (örneğin)?

İstek:

POST /globalweather.asmx HTTP/1.1 
Host: www.webservicex.net 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetWeather xmlns="http://www.webserviceX.NET"> 
     <CityName>string</CityName> 
     <CountryName>string</CountryName> 
    </GetWeather> 
    </soap12:Body> 
</soap12:Envelope> 
HTTP/1.1 200 OK 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

Yanıt:

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetWeatherResponse xmlns="http://www.webserviceX.NET"> 
     <GetWeatherResult>string</GetWeatherResult> 
    </GetWeatherResponse> 
    </soap12:Body> 
</soap12:Envelope> 
+0

@Topener Bu konuda bilgi buldum ama bir toturial değil. Özellikle php.net/manual/en/book.soap.php için değil. Eğer büyük bir toturial yayınlarsanız cevabınızı kabul edeceğim (Bununla büyük demek istediğim: bu örnekle yapabilirim) –

+3

Topener, katılmıyorum. Bu site sadece kod için değil, ilgili soruları programlamak içindir. Soru çok açık uçlu olmadığı sürece iyi olmalı. Bu soruya verilen büyük cevaplar, yararlı kaynaklara, el kitabına ve başka yerlere ya da basit bir örneğe bağlantılar olabilir. –

cevap

43

en basit yaklaşım olacaktır:

$requestParams = array(
    'CityName' => 'Berlin', 
    'CountryName' => 'Germany' 
); 

$client = new SoapClient('http://www.webservicex.net/globalweather.asmx?WSDL'); 
$response = $client->GetWeather($requestParams); 

print_r($response); 

çıktılayacaktır

stdClass Object 
(
    [GetWeatherResult] => <?xml version="1.0" encoding="utf-16"?> 
<CurrentWeather> 
    <Location>Berlin-Tegel, Germany (EDDT) 52-34N 013-19E 37M</Location> 
    <Time>Jan 26, 2012 - 07:50 AM EST/2012.01.26 1250 UTC</Time> 
    <Wind> from the SE (130 degrees) at 14 MPH (12 KT):0</Wind> 
    <Visibility> greater than 7 mile(s):0</Visibility> 
    <SkyConditions> mostly clear</SkyConditions> 
    <Temperature> 33 F (1 C)</Temperature> 
    <Wind>Windchill: 23 F (-5 C):1</Wind> 
    <DewPoint> 21 F (-6 C)</DewPoint> 
    <RelativeHumidity> 59%</RelativeHumidity> 
    <Pressure> 30.27 in. Hg (1025 hPa)</Pressure> 
    <Status>Success</Status> 
</CurrentWeather> 
) 

Geri kalanlar daha sonra SimpleXML veya benzeri bir şeyle ayrıştırılabilir.

Bu tür bir yanıtın bu web hizmetine özgü olduğunu unutmayın. Sadece bir xml dizgisi döndürmeyen, ancak WSDL içindeki yanıt yapısını sağlayan daha iyi web servisleri var.


DÜZENLEME aynı sitede GeoIP arama olabilecek bir "daha yapısal" webservice için bir örnek:

$client = new SoapClient('http://www.webservicex.net/geoipservice.asmx?WSDL'); 
$result = $client->GetGeoIP(array('IPAddress' => '8.8.8.8')); 

print_r($result); 

bu verir:

stdClass Object 
(
    [GetGeoIPResult] => stdClass Object 
     (
      [ReturnCode] => 1 
      [IP] => 8.8.8.8 
      [ReturnCodeDetails] => Success 
      [CountryName] => United States 
      [CountryCode] => USA 
     ) 

) 

Artık yapabilirsiniz

$country = $result->GetGeoIPResult->CountryName; 
'i çağırarak değerlere erişmek
+0

Harika bir cevap, resmi olmayan php docs http://php.net/manual/en/book.soap.php emmek. Cevabınızı okuduktan sonra olayım, yönteminizin el kitabında nerede açıklandığını bulamıyorum, ama benim için çalışıyor, teşekkürler. – Ekonoval

+1

@Ekonoval: Yöntemim "GetGeoIP()" ve "GetWeather()" adları "SoapClient" in "gerçek" yöntemleri değil, ancak magic '__call() yöntemiyle çağrıldıkları için belgelenmemiştir. Yöntemlerin adları WSDL dosyasında tanımlanmıştır. –

İlgili konular