Selam herkese,
SOAP servis yapmanız gerekirse bir gün veya wsdl ile soap servise bağlanmanız gerekirse NuSOAP isimli kütüphane işinizi fazlaca çözecektir.
Öncelikli olarak aşağıdaki linkten indiriniz:
http://sourceforge.net/projects/nusoap/
SOAP Servis Oluşturmak
Ben şimdi size elbise için bir servis yazacağım. Burada servisi kullananlara zamana göre ürün sunabilirsiniz. Yani Örnek için düşündüğüm konsept budur 🙂
elbise.php dosyasını oluşturup içine şu kodları ekleyiniz
<?php require_once "lib/nusoap.php"; class elbise { public function getElbise($type) { switch ($type) { case 'gunluk': return 'Kot gömlek..'; break; case 'yilbasi': return 'Kırmızı Konsepti'; break; case 'ozelgece': return 'Abiye'; break; default: break; } } } $server = new soap_server(); $server->configureWSDL("elbiseservice", "http://www.onurcanalp.com/elbiseservice"); $server->register("elbise.getElbise", array("type" => "xsd:string"), array("return" => "xsd:string"), "http://www.onurcanalp.com/elbiseservice", "http://www.onurcanalp.com/elbiseservice#getElbise", "rpc", "encoded", "Get elbise by type"); @$server->service($HTTP_RAW_POST_DATA);
Yukarıda ki kodu genel hatları ile ele almak gerekirse başta kütüphanemizi dahil ettik..
ikindi adım da basitçe getElbise metodu oluşturduk..
Daha sonra soap_server sınıfını oluşturup WSDL servisimiz için gerekli ayarları yaptık..
Şimdi servisimizi oluştururken kullandığımız parametrelere kısaca değinelim istereniz.
- elbise.getElbise zaten gördüğünüz üzere className.methodName
- array(“type” => “xsd:string”) getElbise metodumuza girilmesi gereken değişkeni ifade eder. Yanındaki data tipi bildiğimiz string, number, boolean vs. olabilir.
- array(“return” => “xsd:string”) metodun döneceği data tipini belirler ve yine aynı şekilde string, number, boolean olabilir.
http://www.onurcanalp.com/elbiseservice bizim için namespace. Namespace kullanmak duplicete işleminin önüne geçer yanı elbise:elbiseservice başka namespace altında kullanmak gibi..
http://www.onurcanalp.com/elbiseservice#getElbise bizim SOAP aksiyonumuzu ifade eder..
rpc işlem tipini temsil eder (rpc veya document olabilir)
encoded da attribute değerimizi tanımlar. (encoded veya literal olabilir)
Son parametremiz de getElbise metodumuzun dökümantasyon metni gibi düşünebiliriz..
Direk elbise.php açarsanız karşınıza gelecek görüntü
Tabi kodunuzu yazdıktan sonra sonunda http://onurcanalp.com/elbise.php?wsdl ile çağırmayı unutmayın. İşlem sonucunda wsdl dosyanızı göreceksiniz.
NOT: Adreste kodlar yok boşa denemeyin, ben local de çalıştım ama kolay anlayın diye web sitem ile güncelledim.
SOAP client oluşturup servisimize bağlanalım
Şimdi elbiseclient.php dosyasını oluşturup içine aşağıdaki kodları yazın
<?php require_once "lib/nusoap.php"; $client = new nusoap_client("http://www.onurcanalp.com/elbise.php?wsdl", true); $error = $client->getError(); if ($error) { echo "<h2>Constructor error</h2><pre>" . $error . "</pre>"; } $result = $client->call("elbise.getElbise", array("type" => "gunluk")); if ($client->fault) { echo "<h2>Fault</h2><pre>"; print_r($result); echo "</pre>"; } else { $error = $client->getError(); if ($error) { echo "<h2>Error</h2><pre>" . $error . "</pre>"; } else { echo "<h2>Main</h2>"; echo $result; } } // show soap request and response echo "<h2>Request</h2>"; echo "<pre>" . htmlspecialchars($client->request, ENT_QUOTES) . "</pre>"; echo "<h2>Response</h2>"; echo "<pre>" . htmlspecialchars($client->response, ENT_QUOTES) . "</pre>";
Yine kütüphanemizi çağırdık, bağlantımızı sağladık ve call ile elbise.getElbise servisimizi type ‘ı gunluk olacak şekilde çağırdık.. Sonucu da aşağıda görebilirsiniz.
Görüldüğü üzere gayet basit şekilde işlemi çözdük, yeterli olmuştur diye düşünüyorum.
Herkese kolay gelsin..
Gerçekten çok faydalı bir yazı olmuş. Elinize sağlık Onur Hocam.
Rica ederim kolay gelsin 😉
Böyle anlatim yapilsa herşeyi kurariz canim 🙂
Çok faydalı olmuş teşekkürler.