使用PHP內(nèi)置SOAP要點分析
對于剛剛接觸PHP語言的新手來說,對于PHP內(nèi)置SOAP可能還是了解的不太多。PHP內(nèi)置SOAP已經(jīng)是屬于OUT范疇的技術(shù)了,不過因為歷史原因,時不時還是會用到它,以前都是用NuSOAP,現(xiàn)在準備試試PHP內(nèi)置的SOAP擴展。#t#
由于文本只打算說說客戶端的用法,所以得先找一些能直接用的服務(wù)端,Xmethods提供了一些有趣的選擇,這里選擇其中的Map IP Address to Country服務(wù),功能很簡單,就是提供一個IP地址,然后返回國家名稱。
先創(chuàng)建一個client實例:
$client = new SoapClient
(’http://www.ecubicle.net/
iptocountry.asmx?wsdl’,
array(’trace’ => true));
通過設(shè)置trace為true,我們可以在稍后使用__getLastRequest,__getLastRequestHeaders,__getLastResponse,__getLastResponseHeaders等方法得到一些信息,在程序調(diào)試階段,這些信息很有用,程序投入使用時,則不必使用此參數(shù)。除了trace參數(shù),還可以設(shè)定login和password參數(shù)以實現(xiàn)HTTP認證的功能,此外還有很多參數(shù),可以參考官方文檔。
創(chuàng)建了前面的$client實例后,我們可以先看看服務(wù)都提供了哪些方法:
print_r($client->__getFunctions());
服務(wù)方法的信息細節(jié)可以從wsdl里自己查閱,下面看看PHP內(nèi)置SOAP怎么調(diào)用一個實際的方法,$ip=’64.156.132.140′:
- $result = $client->__soapCall
(’FindCountryAsString’, array
(’FindCountryAsString’ =>
array(’V4IPAddress’ => $ip)));- print_r($result->
FindCountryAsStringResult);
還可以這樣調(diào)用:
- $result = $client->
FindCountryAsString(array
(’V4IPAddress’ => $ip));- print_r($result->
FindCountryAsStringResult);
PHP內(nèi)置SOAP還可以這樣調(diào)用:
- $params = new SoapParam(array(’V4IPAddress’
=> $ip), ‘FindCountryAsStringSoapIn’);- $result = $client->__soapCall
(’FindCountryAsString’, array($params));- print_r($result->FindCountryAsStringResult);
還可以這樣調(diào)用:
- $params = new SoapParam(array(’V4IPAddress’
=> $ip), ‘FindCountryAsStringSoapIn’);- $result = $client->FindCountryAsString($params);
- print_r($result->FindCountryAsStringResult);
在使用PHP內(nèi)置SOAP時,參數(shù)如何傳遞有點不好說明,這需要研讀wsdl描述文檔,不過看wsdl實在是一件無趣的事情,所以我覺得你可以先大概看一下wsdl,然后憑感覺去嘗試傳遞參數(shù),其中配合trace調(diào)試,一般來說,試幾次就能找到正確的傳遞方式,如果還不行,再通過__getLastRequest,__getLastRequestHeaders等方法提供的信息配合wsdl描述文檔仔細研究。