標籤:
webservice 現在是開始流行了,很多業務開啟了這個功能。去年接觸的一個金融類的項目有類似功能調用。當時沒放心思研究,最兩天試著接觸了下,還真不錯的。起步其實挺簡單。
服務端的代碼
server.php
<?phpclass PassPort { /** * 打招呼 * @param string $name */ public function hello($name) { return ‘Hello ‘. $name. ‘ !<br />‘; } /** * 求和 * @param int $a * @param int $b * @return int */ public function add($a, $b) { return $a + $b; } /** * 再見了 */ public function say() { return ‘GoodBye!<br />‘; }}
首先需要有個 wsdl 檔案。兩種方法產生,一個是藉助 SoapDiscovery.class.php 類產生,這個需要從網上找下。
include ‘server.php‘;//服務類的定義檔案include ‘SoapDiscovery.class.php‘;//第一個參數為類的名字,這裡是 Api 也是產生的wsdl的檔案的名字,第二個參數是服務的名字可以自己自由定義$wsdl = new SoapDiscovery(‘Api‘, ‘service‘);$wsdl->getWSDL();
還有一種方法是通過 ZendStudio 產生,這個其實也很簡單。可能有人找不到添加 wsdl ,那就說明你沒有安裝這個外掛程式。點Help=》Welcome 然後選中 WSDL,會重啟一次。
建立的時候 tagert namespace 填寫自己項目的訪問地址 就可以基本不用改。產生之後需要改些東西。
TestSoapSoap下面填寫php webService 如soapservice.phpNewOperation:添加方法。WebService裡需要提供給別人調用的方法名input :設定輸入參數名和類型output:設定傳回值。Add part:如果在input裡添加,就是添加多個參數set Type / set Element: 設定參數的input/output類型Type包含常見的資料類型(int,string,boolean,float,time…),Element就是自訂元素類型。
注意一點,右側的那些方法都是自己手動 通過 New Operation 來添加的,還有裡面的參數。關於參數和返回有點需要注意的,可以沒有參數,但是需要有返回,沒有返回用戶端不知道處理結果啊,我是這麼想的,必須要有返回。
這個時候看這好像完成了,其實沒有,因為只有第一個方法(預設會有一個)是存在的,其他的都沒有。需要點下中間的那個類似複選框的東西,然後在下面的介面點 Generate Binding Content 然後才可以正常用,否則會出現類似下面的提示錯誤。
xxx is not a valid method for this service
接下來就是寫用戶端的調用了 client.php。
<?phpini_set(‘soap.wsdl_cache_enabled‘, 0);ini_set(‘display_errors‘, 1);error_reporting(E_ALL);//錯誤顯示層級$client = new SoapClient(‘soap.wsdl‘);echo $client->hello(‘wayne‘);echo ‘The result is:‘, $client->add(7, 8), ‘<br />‘;echo $client->say();unset($client);
這裡要提下,出現 xxx is not a valid method for this service 這樣的提示,還有個可能就是你的服務端的方法改了,但是soap存在緩衝,預設是開啟的。linux環境下是 /tmp 目錄下,調試過程中可以設定關閉緩衝。使用語句 ini_set(‘soap.wsdl_cache_enabled‘, 0);來關閉。
最後通過瀏覽器訪問 client.php 就可以看到想要的結果了。
Hello wayne !The result is:15GoodBye!
好了,到這裡,初步接觸就結束了。其實執行個體化SoapServer SoapClient 對象的時候,還有好多參數,我現在的是 server.php 和 client.php 都在通一個目錄下。不存在url,之類的路徑問題。接下來就要關注這個了。
PHP webservice 的初接觸