Php sabun istemcisi örnekleri. PHP'de SOAP istemci-sunucu uygulaması yazma
Bir web servisine bağlanmam gerekiyor ve sahip olduğum tek şey bu:
Örnek çağrı:
Bu işlevin bir dize döndürdüğünü biliyorum;
Şu ana kadar yaptığım şey bu:
Yalnızca 1. adımda belirtilen WSDL adresini ekleyerek bir Hizmet Referansı oluşturuldu.
Bir web hizmeti örneği oluşturuldu ve işlevi gerekli tüm parametrelerle çağırdı, ancak başlığın kullanıcı ve parolasını değil.
Nasıl devam etmeliyim? Şimdiden teşekkür ederim.
1 cevap
Kimlik bilgilerinizi eklemeniz gerekiyorsa burası başlamak için iyi bir yer olabilir; Onları bir şekilde aldığına göre, bunu yapmak zorunda olabileceğini düşünüyorum. Kimlik bilgilerinizi ekleyeceğiniz kısım aşağıdadır:
Kullanıcı AdıToken userToken = new Kullanıcı AdıToken(kullanıcıAdı, şifre, PasswordOption.SendHashed); Hizmet1 hizmetProxy = yeni Hizmet1(); SoapContext requestContext = serviceProxy.RequestSoapContext; requestContext.Security.Tokens.Add(userToken);
- Kimlik bilgilerinizi, türü Microsoft.Web.Services2.Security.Tokens ad alanına ait olan belirli bir belirtece yerleştirerek ekleyin.
- Hizmetiniz için bir proxy oluşturun (yukarıdaki örnekte serviceProxy'de)
- İstek başlığınıza requestSoapContext hizmetiniz aracılığıyla erişin
- İsteğe belirteç ekleyin
Ayrıca, web hizmeti spesifikasyonuyla ilgili olduğundan adresteki "?Wsdl" kısmını atlayabileceğinizi düşünüyorum. Bu tamamlandıktan sonra, işlevi çağırmayı deneyebilir ve her şeyin nasıl çalıştığını görebilirsiniz: eğer işlevin bir şey döndürmesi gerekiyorsa, ne beklediğinizi kontrol edin.
PHP kodu yazmaya alışkınım ama nesne yönelimli kodlamayı pek kullanmıyorum. Şimdi SOAP ile (istemci olarak) etkileşim kurmam gerekiyor ve sözdizimini doğru anlayamıyorum. SoapClient sınıfını kullanarak yeni bir bağlantıyı düzgün şekilde yapılandırmamı sağlayan bir WSDL dosyam var. Ancak doğru aramayı yapıp verileri geri alamıyorum. Aşağıdaki (basitleştirilmiş) verileri göndermem gerekiyor:
- İletişim Kimliği
- Kişi adı
- Genel açıklama
- Toplam
WSDL belgesinde iki işlev var, ancak yalnızca birine ihtiyacım var (aşağıdaki "FirstFunction"). Kullanılabilir işlevler ve türler hakkında bilgi almak için çalıştırdığım komut dosyası:
$client = new SoapClient("http://example.com/webservices?wsdl"); var_dump($client->__getFunctions()); var_dump($client->__getTypes());
Ve işte ürettiği sonuç:
Array( => "BirinciFonksiyon Fonksiyonu1(BirinciFonksiyon $parametreler)", => "İkinciFonksiyon Fonksiyon2(İkinciFonksiyon $parametreler)",); array( => struct Contact ( id id; name name; ) => string "string açıklama" => string "int miktar" )
Diyelim ki FirstFunction'ı verilerle çağırmak istiyorum:
- İletişim Kimliği: 100
- İrtibat kurulacak kişi: John
- Genel Açıklama: Petrol Varil
- Tutar: 500
Doğru sözdizimi ne olurdu? Her türlü varyasyonu denedim ama sabunun yapısı oldukça esnek gibi görünüyor, dolayısıyla bunu yapmanın çok fazla yolu var. Bunu kılavuzdan anlayamadım...
GÜNCELLEME 1: MMK'dan örnek örnek:
$client = new SoapClient("http://example.com/webservices?wsdl"); $params = array("id" => 100, "name" => "John", "description" => "Petrol Varil", "miktar" => 500,); $yanıt = $client->__soapCall("Function1", array($params));
Ancak şu yanıtı alıyorum: Nesnenin "Contact" özelliği yok. getTypes() çıktısında görebileceğiniz gibi, Contact adında bir yapı var, bu yüzden sanırım bir şekilde parametrelerimin Contact verilerini içerdiğini açıklamam gerekiyor, ancak soru şu: nasıl?
GÜNCELLEME 2: Bu yapıları da denedim, aynı hata.
$params = array(array("id" => 100, "name" => "John",), "Petrol Varil", 500,);
Birlikte:
$params = array("İletişim" => array("id" => 100, "name" => "John",), "description" => "Petrol Varil", "miktar" => 500,);
Her iki durumda da hata: nesnenin "İletişim" özelliği yok
8 cevap
Yapman gereken bu.
Sadece bilmek için, senin durumunu yeniden yaratmaya çalıştım...
- Bu örnekte, Function1 adında bir WebMethod kullanarak bir .NET web hizmeti oluşturdum ve parametreler şunlardır:
Fonksiyon1(pin pini, dize açıklaması, int sayısı)
Kişinin yalnızca sizin durumunuzda olduğu gibi kimlik ve ad için alıcıları ve ayarlayıcıları olan bir fasulye sınıfı vardır.
Bu .NET web hizmetini şununla yükleyebilirsiniz:
Kod.
Bu tarafta yapmanız gereken şey bu PHP:
(Test edildi ve çalışıyor)
kimlik = $kimlik; $this->isim = $isim; )) ) /* Web hizmetini WSDL'nizle başlatın */ $client = new SoapClient("http://localhost:10139/Service1.asmx?wsdl"); /* İletişim Nesnenizi doldurun */ $contact = new Contact(100, "John"); /* İstek için parametrelerinizi ayarlayın */ $params = array("Contact" => $contact, "description" => "Petrol Varil", "miktar" => 500,); /* Bu durumda parametrelerinizle birlikte web hizmeti yöntemini çağırın: Function1 */ $response = $client->__soapCall("Function1", array($params)); /* Web hizmeti yanıtını yazdır */ var_dump($response); ?>
Çalıştığını nasıl bileceğim?
- Eğer print_r($params); Bu çıktıyı göreceksiniz çünkü web servisiniz şunu bekliyor:
Dizi ([İletişim] => Temas nesnesi ( => 100 => John) [açıklama] => Yağ varili [miktar] => 500)
- .NET web hizmeti örneğinde hata ayıkladığımda aşağıdakileri elde ettim:
(Gördüğünüz gibi Contact nesnesi ve diğer parametreler null değil, bu da isteğinizin PHP tarafından başarıyla tamamlandığı anlamına geliyor).
- .NET web hizmetinden gelen yanıt beklendiği gibiydi ve PHP tarafında gösterildi:
object (stdClass) public "Function1Result" => string "İsteğinizin ayrıntıları! id: 100, isim: John, açıklama: Petrol varili, miktar: 500" (uzunluk = 98)
Bu yardımcı olur umarım :-)
SOAP hizmetlerini de kullanabilirsiniz:
"İspanya", "ŞehirAdı" => "Alicante"); $yanıt = $soapclient->getWeather($params); var_dump($yanıt); // Şehirleri Ülkeye Göre Al $param = array("ÜlkeAdı" => "İspanya"); $response = $soapclient->getCitiesByCountry($param); var_dump($yanıt);
Bu gerçek bir hizmete sahip bir örnektir ve işe yarar.
Bu yardımcı olur umarım.
İlk önce web servislerini başlatın:
$client = new SoapClient("http://example.com/webservices?wsdl");
Ardından parametreleri ayarlayın ve iletin:
$params = array("arg0" => $kişikimliği, "arg1" => $desc, "arg2" => $kişi adı); $yanıt = $client->__soapCall("methodname", array($params));
Yöntem adının WSDL'de işlem adı olarak mevcut olduğunu unutmayın; örneğin:
Web hizmetimin neden sizinkiyle aynı yapıya sahip olduğunu bilmiyorum, ancak parametre için bir sınıfa değil, yalnızca bir diziye ihtiyacı var.
Örneğin: - WSDL'im:
Var_dump($client->getFunctions()); var_dump($client->getTypes());
İşte sonuç:
Array 0 => string "OrderConfirmation createOrder(OrderRequest $createOrder)" (uzunluk=56) array 0 => string "struct OrderRequest ( Kimlik tanımlama; Teslimat teslimatı; Koli paketi; Alıcı alıcı; string referansı; )" (uzunluk=130) 1 => string "struct Tanımlama ( string gönderen; string karması; string oluşturucu; )" (uzunluk=75) 2 => string "struct Teslimat ( Düğümden itibaren; Düğümden nereye; )" (uzunluk=41) 3 => string " struct Node ( string country; string node; )" (length=46) 4 => string "struct Parsel ( string açıklaması; ondalık ağırlık; string orderNumber; date orderDate; )" (length=93) 5 => string "struct Alıcı ( string name; string soyisim; Adres adresi; string e-posta; string dil; )" (uzunluk=106) 6 => string "struct Adres ( string satır1; string satır2; string postaKodu; string şehir; string ülke; )" (length=106) =99) 7 => string "struct OrderConfirmation ( string traceNumber; string reference; )" (length=71) 8 => string "struct OrderServiceException ( string code; OrderServiceException arıza bilgisi; dize mesajı; )" (uzunluk=97)
Yani kodumda:
$client = new SoapClient("http://packandship-ws.kiala.com/psws/order?wsdl"); $params = array("referans" => $orderId, "identification" => array("sender" => param("kiala", "sender_id"), "hash" => hash("sha512", $orderId . param("kiala", "gönderen_id") .param("kiala", "şifre")), "oluşturan" => null,), "teslimat" => array("from" => array("ülke" = > "es", "düğüm" => "",), "to" => dizi("ülke" => "es", "düğüm" => "0299")), "parsel" => dizi( "description" => "Açıklama", "ağırlık" => 0,200, "orderNumber" => $orderId, "orderDate" => tarih("Y-m-d")), "receiver" => array("firstName" => " Müşteri Adı", "soyadı" => "Müşteri Soyadı", "adres" => array("satır1" => "Satır 1 Adresi", "satır2" => "Satır 2 Adresi", "postalCode" => 28006, "şehir" => "Madrid", "ülke" => "es",), "e-posta" => " [e-posta korumalı]", "language" => "es")); $result = $client->createOrder($params); var_dump($result);
ama başardı!
Bu, SOAP işlevi "__call" için iyi bir örnektir. Ancak modası geçmiş.
Envio Internacional: "; $vem = $cliente->__call("CustoEMSInternacional",array($int_zona, $int_peso)); print $vem; print "
"; ?>SOAP (Basit Nesne Erişim Protokolü), HTTP gibi mevcut web protokolleri üzerinden dağıtılmış uygulamalar arasında yapılandırılmış bilgi alışverişi yapmak için tasarlanmış XML tabanlı bir protokoldür. SOAP spesifikasyonu, XML mesajları tarafından kullanılan formatı, bunların nasıl işlenmesi gerektiğini, standart için bir dizi kodlama kuralını, veri türlerini ve uzaktan prosedür çağrıları ve çağrılara yanıtlar için kuralları tanımlar.
Web hizmetleri modaya uygun ve modern bir teknolojidir. Web hizmetleriyle ilgili teknolojilerin listesi neredeyse her gün artıyor ancak SOAP muhtemelen bunların en önemlisi. Web hizmetlerine erişim için hızla standart protokol haline geliyor. Uç noktalar arasında bilgi alışverişi yapmak için XML mesajlarını kullanır, ancak yine de ikili protokollerin bazı faydalarını sağlar. RPC (Uzaktan Prosedür Çağrıları) desteği başlangıçta SOAP protokolünün küçük özelliklerinden biriydi ancak artık en sık kullanılan özelliklerden biri haline geldi.
PHP 5 için SOAP uzantısı, PHP'de C dilinde SOAP desteğini organize etmeye yönelik ilk girişimdir. PHP'de yazılmış mevcut SOAP uygulamalarına göre birçok avantajı vardır; bunlardan en önemlisi hızdır. Şu anda uzantının deneysel olduğu düşünülüyor, ancak yavaş yavaş daha güvenilir ve kararlı hale gelecektir.
SOAP uzantısı, SOAP 1.1, SOAP 1.2 ve WSDL 1.1 spesifikasyonlarının büyük alt kümelerini uygular. Ana amaç, SOAP'ın RPC yeteneklerinden en iyi şekilde yararlanmaktır. WSDL, web hizmetlerinin uygulanmasını kolaylaştırmak için mümkün olan her yerde kullanılır.
İlk SOAP istemcisi
Basit bir SOAP istemcisinin yaratılışını göstermek için XMethods web sitesindeki "Gecikmeli Hisse Senedi Teklifi" demo hizmetini kullanıyoruz. PHP kodunu yazmaya başlamadan önce bu özel hizmet hakkında aşağıdaki bilgileri toplamamız gerekiyor:
- Yöntem adı
- Bu hizmetin bulunduğu URL
- Yöntem SOAPAction başlık değeri
- Yöntem ad alanı
- Yöntem giriş ve çıkış parametrelerinin adları ve türleri
Şans eseri, tüm bu bilgilere http://www.xmethods.com/ adresindeki XMethods web sitesinde, hizmetin RPC profilinden ulaşılabilir:
Yöntem adı | Alıntı Alın |
Hizmet URL'si | http://66.28.98.121:9090/soap |
SABUNAksiyonu | urn:xmethods-delayed-quotes#getQuote |
Yöntem ad alanı | urn:xmethods-gecikmeli-alıntılar |
Giriş parametreleri | Sembol (Dize) |
Çıkış parametreleri | Sonuç (kayan) |
Örnek 1 (istemci1.php)
$client = new SoapClient(NULL,
sıralamak(
"konum" => "http://66.28.98.121:9090/soap",
"uri" =>
"stil" => SOAP_RPC,
"kullan" => SOAP_ENCODED
));
Yazdır($istemci -> __call (
/* SOAP yöntem adı */
"Alıntı al"
/* Seçenekler */
sıralamak(
yeni SoapParam(
/* Parametre değeri */
"ibm"
/* Parametre adı */
"sembol"
)),
/* Seçenekler */
sıralamak(
/* SOAP yöntemi ad alanı */
"uri" => "urn:xmethods-delayed-quotes",
/* Bir SOAP yöntemi için SOAPAction HTTP başlığı */
"sabunlaşma" => "urn:xmethods-delayed-quotes#getQuote"
)). "\N" );
?>
Gördüğünüz gibi bu basit sorunu çözmek oldukça fazla çalışma gerektiriyordu.
Neyse ki web hizmetleri, genellikle oldukça kullanışlı olan WSDL'yi kullanarak kendilerini müşterilere tanımlayabilir. "Gecikmeli Hisse Senedi Teklifi" hizmetine ilişkin WSDL, xmethods.com web sitesindeki bilgi sayfasında sunulmaktadır - http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl.
Burada aynı istemcinin bu WSDL belgesini kullanarak çalışacak şekilde yeniden yazılmış bir sürümü bulunmaktadır. Burada artık sunucu URI'sini, ad alanını, SOAPAction başlığını, kodlama yöntemini ve parametre türlerini belirtmemize gerek yok. Tüm bu bilgiler WSDL dosyasından alınmıştır.
Örnek 2 (client2.php)
$istemci = yeni
SoapClient(
"http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl"
);
Print($client -> getQuote("ibm" ));
?>
Bu şekilde biraz daha kolay, değil mi?
WSDL kullanırken ne gibi sorunlar ortaya çıkıyor? Bunu kullanmaya karşı olan tek argüman, herhangi bir prosedürün çağrılabilmesi için istemcinin sunucudan WSDL'yi okuması gerektiğidir ve web'de bu oldukça uzun zaman alabilir. Çalışmayı hızlandırmak için SOAP uzantısı aşağıdaki yapılandırma parametrelerini sağlar: sabun.wsdl_cache_enabled, sabun.wsdl_cache_dir ve sabun.wsdl_cache_ttl. Bunlar php.ini dosyasında veya ini_set() kullanılarak ayarlanabilir (bkz. Örnek 4). Varsayılan olarak WSDL önbelleğe alma etkindir ve WSDL dosyaları 1 gün boyunca önbelleğe alınır.
Burada php.ini dosyasının varsayılan değerlerin yer aldığı SOAP bölümü bulunmaktadır. Bunları php.ini dosyanıza kopyalayabilirsiniz.
[sabun]
Sabun. wsdl_cache_enabled = "1"
;
WSDL önbelleğe almayı etkinleştirir veya devre dışı bırakır
Sabun. wsdl_cache_dir = "/tmp"
;
SOAP'ın bulunduğu dizinin adını belirtir-
uzantı önbelleğe alınmış dosyaları saklayacak
Sabun. wsdl_cache_ttl = "86400"
; (ömür ) zamanı ayarlar(saniyeler içinde) önbellekten hangi dosyalar kullanılabilir
İlk SOAP sunucusu
XMethods ile "Gecikmeli Hisse Senedi Kotesi" hizmetinin aynısını yapacak kendi SOAP web hizmetimizi yazmaya çalışalım.
Yapmamız gereken ilk şey, hizmetimizi müşterilerin anlayabileceği formatta açıklayan bir WSDL belgesi oluşturmaktır. Bunu yapmak için Xmethods web sitesinden alınan orijinal belgeyi biraz değiştirmeniz gerekecek, bu yüzden ona daha ayrıntılı bakarak başlayacağız.
Mesaj bölümü iki mesajı tanımlar. Bunlardan ilki, getQuote mesajını ileten ve sembol adlı tek satırlık bir parametreyi kabul eden getQuoteRequest'tir. İkinci mesaj, Result adlı tek bir kayan nokta değerini ileten getQuote isteğine verilen yanıt olan getQuoteResponse'dur.
portType bölümü, mesaj bölümünde açıklananlardan hangisinin istek için, hangisinin yanıt için kullanılacağını belirten getQuote adlı tek bir işlemi tanımlar.
Bağlama bölümü mesajın nasıl kodlanması ve iletilmesi gerektiğini tanımlar. Bu durumda SOAP kodlamasını kullanarak HTTP üzerinden RPC isteği göndereceğimizi belirtiyor. Ayrıca getQuote yöntemi için SOAPAction başlığının ad alanını ve değerini de tanımlar.
Son olarak hizmet bölümü, hizmetin bulunduğu URL'yi tanımlar.
Örnek 3 (stockquote.wsdl)
xmlns:tns=" http://example.org/StockQuote "
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
Not: WSDL önbelleğe alma varsayılan olarak etkindir. WSDL'nizi geliştirirken ve hata ayıklarken önbelleğe almayı devre dışı bırakmak daha iyidir.
Artık sunucumuzu oluşturmaya başlamanın zamanı geldi.
Öncelikle web'den gelen istekleri işleyecek bir getQuote() işlevi geliştireceğiz. Daha sonra, SoapServer sınıfının bir nesnesini oluşturacağız ve SoapServer::addFunction() yöntemini kullanarak fonksiyonumuzu ona ekleyeceğiz. Daha sonra göreceğiniz gibi, SoapServer() yapıcısının yalnızca tek bir parametresi vardır; hizmeti açıklayan WSDL belgesinin yolu.
Örnek 4 (sunucu1.php)
$tırnak işaretleri = dizi(
"ibm" => 98,42
);
küresel $ tırnaklar ;
return $tırnaklar [ $sembol ];
}
Ini_set ("soap.wsdl_cache_enabled", "0"); // WSDL önbelleğe almayı devre dışı bırak
$sunucu = new SoapServer("stockquote1.wsdl");
$sunucu -> addFunction("getQuote");
$sunucu -> tanıtıcı();
?>
SoapServer, WSDL olmadan istemciyle hemen hemen aynı şekilde çalışabilir, ancak bu seçeneği kullanmanın onu kullanmaya değer kılan hiçbir avantajı yoktur. Eğer yine de bu şekilde çalışmak istiyorsanız dönüş değerlerinin SoapParam ve SoapVar sınıflarının nesneleri olduğundan emin olmalısınız (ilk örnekte olduğu gibi.
İşte SOAP sunucumuza erişecek bir istemci. Önceki örnekle karşılaştırıldığında yalnızca WSDL konum bağlantısı eklenmiştir. "stockquote1.wsdl" dosyasının SOAP sunucusuyla aynı dizinde olduğu varsayılmaktadır.
Örnek 5 (client3.php)
$client = new SoapClient("stockquote1.wsdl");
print($client -> getQuote("ibm" ));
?>
İstemcimiz ve sunucumuzla ilgili temel sorunlar nelerdir?
Yeni başlayanlar için hataları ele almazlar. Sunucu kendisine iletilen sembol değişkeninin değerine uygun bir sonuç bulamadığında ne olur? SOAP'ın hata mesajları için özel bir mesaj formatı vardır - SoapFault.Böyle bir mesaj oluşturmak için sunucunun SoapFault nesnesini kullanarak bir istisna atması gerekir. SoapFault() yapıcısının ilk parametresi hata kodunu içeren bir dizedir, ikincisi ise hatanın açıklamasını içeren bir dizedir. İstemcinin SoapFault istisnalarını işleyecek şekilde yazılması gerekir.
İkinci olarak, web hizmetinin işlevselliğini bir PHP sınıfında kapsüllemek daha iyidir. Bu durumda global değişkenler kullanmamıza ve her SOAP yöntemini ayrı ayrı sunucuya eklememize gerek kalmayacak. Bunun yerine sınıfın tamamını ekleyebileceğiz ve onun tüm yöntemlerine SOAP aracılığıyla ulaşılabilecek. Burada istemci ve sunucunun uygun şekilde değiştirilmiş versiyonları verilmiştir.
Örnek 6 (sunucu2.php)
sınıf Alıntı Hizmeti(
özel $tırnak = array("ibm" => 98.42 );
fonksiyon getQuote ($sembol) (
if (isset($this -> tırnak işaretleri [ $sembol ])) (
return $this -> tırnak işaretleri [ $sembol ];
) başka (
yeni atmak SoapFault("Sunucu", "Bilinmeyen Sembol "$sembol".");
}
}
}
$sunucu = new SoapServer("stockquote2.wsdl");
$sunucu -> setClass("QuoteService");
$sunucu -> tanıtıcı();
?>
Gördüğünüz gibi SoapServer nesnesini QuoteService sınıfına bağlamak için SoapServer::setClass() yöntemini kullandım.
Örnek 7 (client4.php)
$client = new SoapClient("stockquote2.wsdl");
denemek (
Eko "
\N" ;\N" ;
print($client -> getQuote("ibm" ));
yankı "\n";
print($client -> getQuote("microsoft"));
yankı "\n
) catch (SoapFault $istisna) (
echo $istisna;
}
?>
İçinde ne var?
SOAP mesajlarının formatını anlamak istiyorsanız veya bir SOAP istemcisinin hatalarını kendiniz ayıklamak istiyorsanız bu bölüm tam size göre.
İlk örnekte gördüğünüz gibi, SoapClient() yapıcısı ikinci parametresi olarak bir ilişkisel diziyi alır. Bu dizi ile sunucudaki çeşitli seçenekleri çağırabiliriz.
Bunlardan ikisine bakalım:
- izleme - istemcinin SOAP isteklerini ve yanıtlarını kaydetmesine olanak tanır (varsayılan olarak devre dışıdır).
- istisnalar - istemcinin istisna mekanizmasını kontrol etmesine olanak tanır (varsayılan olarak etkindir).
Aşağıdaki SOAP istemci örneğine bakalım. Bu, istemci ile sunucu arasında tam olarak neyin aktarıldığını gösteren, Örnek 5'teki istemcinin genişletilmiş halidir. Bu bilgiyi elde etmek için __getLastRequest() ve __getLastResponse() yöntemleri kullanılır.
Örnek 8 (client5.php)
$istemci = new SoapClient("stockquote1.wsdl", dizi(
"iz" => 1,
"istisnalar" => 0));
$client -> getQuote("ibm");
Yazdır "
\N" ;" ;
"Sorgu:\n" yazdır. htmlspecialchars ($client -> __getLastRequest()) . "\N" ;
"Cevap:\n" yazdır. htmlspecialchars($client -> __getLastResponse()). "\N" ;
Yazdır "
?>
İşte betiğin çıktısı. Anlaşılmasını kolaylaştırmak için biraz değiştirildi.
Rica etmek:
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
Cevap:
xmlns:ns1="urn:xmethods-delayed-quotes"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
PHP için diğer SOAP uygulamaları
Hepsi C ile değil PHP ile yazılmıştır.
Özet
Bu yazımda SOAP eklentisinin sadece temel fonksiyonlarını anlattım. Aslında çok daha fazlasını yapabilir, ancak tüm yeteneklerini kısa bir makalede göstermek kesinlikle imkansızdır. İşte ana olanların bir listesi:
- Karmaşık veri türleri (diziler, nesneler) desteği
- SOAP başlık desteği
- SOAP 1.1 ve SOAP 1.2 için dinamik destek
Belki sonraki makalelerde daha ayrıntılı olarak ele alınacaktır.
SOAP uzantısına ilişkin ayrıntılı belgeler http://www.php.net/manual/en/ref.soap.php adresinde bulunmaktadır.
Bu uzantının geliştirilmesi henüz ilk aşamalarında olduğundan geri bildirimleriniz eklentinin daha kararlı, güvenilir, kullanışlı ve hızlı olmasına yardımcı olacaktır. Lütfen kullanırken karşılaştığınız sorunları http://bugs.php.net/ adresine bildirin.
Bağlantılar
yazar hakkında
PHP'de bir SOAP web hizmeti oluşturmak için öncelikle yerel bir HTTP sunucusunun yanı sıra PHP'yi de kurup yapılandırmanız gerekir. Bu projede Apache ve PHP HTTP sunucusunun hızlı kurulumuna olanak sağlayan XAMP paketi kullanıldı.
Ayrı olarak Apache ve PHP yapılandırma dosyalarında da değişiklik yapmanız gerekir.
Apache HTTP sunucusu yapılandırma dosyası httpd.conf'da aşağıdaki kod parçasını bulmanız gerekir:
PHP betiklerini yerel bir sunucuda çalıştırmak için, bunları Apache sunucusunun kök dizininde, varsayılan olarak Apache kök klasöründeki htdocs klasöründe saklamanız gerekir.
Sitenin kök dizinini değiştirmek için httpd.conf dosyasında aşağıdaki satırda değişiklik yapmanız gerekmektedir:
PHP desteğini etkinleştirmek için httpd.conf dosyasına aşağıdaki satırları eklemelisiniz:
![](https://i0.wp.com/studwood.ru/imag_/15/224343/image007.png)
Apache HTTP sunucusunu başlatmak için konsol komutlarını veya Apache'nin durumunu yönetmenize ve yapılandırmanıza olanak tanıyan XAMMP kontrol panelini kullanabilirsiniz.
Bu yardımcı programın görünümü Şekil 2'de gösterilmektedir.
Şekil 2. - XAMMP Kontrol Paneli yardımcı programı:
![](https://i0.wp.com/studwood.ru/imag_/15/224343/image008.jpg)
SOAP web hizmeti oluşturmak için uygulamanın istemci ve sunucu taraflarını uygulayan PHP belgelerinin yanı sıra web hizmetini açıklayan bir WSDL sayfası yazmanız gerekir.
İstemciye iki sayı üzerinde yapılan aritmetik işlemin sonucunu döndüren bir web hizmeti sağlayan bir web hizmeti oluşturalım. Giriş elemanları, müşteri tarafından belirlenen iki sayının yanı sıra bir aritmetik işlemi tanımlayan sembolik bir değişkendir.
İstemci tarafı iki PHP belgesi tarafından uygulanır. Form.php dosyasında öğeyi kullanarak