PHP中SOAP協議的使用和相關調試
這次我們主要講解一下PHP的調試內容,其中涉及了SOAP協議的使用。使用PHP中調用 WebService,聽上去有些高深莫測啊.其實這是很簡單的一件事.由于 Web服務完全是基于 XML 這種平臺無關性的標記語言來實現的,所以在 PHP中實現訪問 WebService 是可能的.本例我們來完成這樣一個 Web服務的調用:獲取手機號信息.在互聯網上找到這樣一個 Web服務是比較容易的,這里我為大家提供一個現成的:http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=776756327947797A706B413D.
該網站提供了一系列的 Web服務,其中有收費的,也有可以免費使用的.在您打開上述網址后,將會列出"通訊和通信"分類下的所有可用 Web服務.如果網站內容沒發生改變,那么您在右側看到的第一條即為"國內手機號碼歸屬地查詢WEB服務".每個 Web服務下面,包括了三項地址:EndPoint、Disco和 Wsdl.至于這三項各代碼什么含義,您可查詢相關資料.這里我們要用到的是 EndPoint 和 Wsdl.
通過 EndPoint 我們可以了解如何使用該服務.打開 "EndPoint" 后面的地址:http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx.
在新打開的頁面中顯示出來該服務下所包括的方法.這個服務有兩個公有方法,分別是 getDatabaseInfo 獲得國內手機號碼歸屬地數據庫信息 getMobileCodeInfo 獲得國內手機號碼歸屬地省份、地區和手機卡類型信息.
并且,需要注意的是兩個方法的參數問題(如是否需要、需要幾個參數)和它的返回結果.第一個方法 getDatabaseInfo 不需要參數,返回的結果是一個一維數組;而第二個方法 getMobileCodeInfo 則需要兩個參數:mobileCode 和 userID,在實際使用中,這兩個參數的值分別是需要查詢地區的手機號和空字符串(免費用戶),它返回結果是一個字符串.
而 Wsdl 這個地址,是我們在 php 程序中需要使用的地址,現在返回對 PHP 的介紹.
在目前的 PHP5 中,已經提供了對 SOAP協議的支持(至于 SOAP協議的解釋,您可查詢相關資料了解),它作為一種擴展存在于 PHP 中.在默認情況下,這個擴展是沒有被開啟的.開啟該擴展的方法:打開 PHP.ini 文件,找到 ;extension=php_soap.dll 一行,將其前面的注釋符";"去掉,保存并重啟 Apache 服務.現在開始代碼編寫,頁面代碼如下:
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body{font-size:12px;}
- </style>
- </head>
- <body>
- <!-- 這里我隨意指定一個手機號碼,在下面的 PHP 代碼中它會作為參數的一部分 -->
- <h1>A phone No: 13973738080</h1>
- <?php
- //這里是該服務的 WSDL 地址
- $wsdl="http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
- //實例化 Soap Client,即 Soap協議的客戶端
- $client=new Soap Client($wsdl);
- //使用 getMobileCodeInfo 方法,需要傳遞兩次參數,需要注意的是,這兩個參數須放到一個數組中
- $onePhone=$client->getMobileCodeInfo(
- array('mobileCode'=>'13973738080',
- 'userID'=>''
- )
- );
- //顯示返回信息
- print_r($onePhone);
- ?>
- <hr />
- <h1>All Information</h1>
- <?php
- //調用另外一個方法,該方法不需要參數
- $result=$client->getDatabaseInfo();
- //顯示其返回結果
- print_r($result);
- ?>
- </body>
運行結果,如下圖:
看起來是很簡單吧,是的,就這么簡單.由于代碼中給出了比較詳細的注釋,所以就不再作過多解釋,但仍需要向讀者說明以下幾個問題:
1. SoapClient 是存在于 Soap.dll 擴展中的一個對象,用來"扮演" Soap協議的訪問過程中的客戶端,并為其提供相關功能.相應的,該擴展中同樣存在一個用于提供(或創建) Web服務的 Soap協議服務端,它的任務由 Soap Server 來完成.至于 Soap Server 對象,我將在后續的講解中來說明它的用法.
2. Soap Client 的實例化:它的構造函數包括兩處參數,一個是 WSDL 文件(即 WSDL 地址),一個是選項列表,后面這個參數是可選的,它用來完成更復雜的訪問,如使用代理訪問,或者提供服務器需要驗證的用戶名和密碼,等等.這里不再詳述,讀者可參考相關資料.
3. Soap Client 實例化之后,就可以通過該實例化對象來調用該 WebService 的公有方法.
如果您對本文中介紹的方法有何意見或建議,請留下您的高見,歡迎交流.本文由 NBWD 原創,請放心轉載.