首頁 >後端開發 >php教程 >webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信

WBOY
WBOY原創
2016-07-30 13:29:261028瀏覽

PHP SOAP伺服器

用PHP和Soap來建立SOAP伺服器非常容易。基本上,你只要寫出你想要暴​​露給你的Web service的函數,然後用Soap去註冊它們就可以了。另外還需要兩步驟才能完成PHP SOAP伺服器的建立。首先你還要在你的PHP程式碼中建立Soap物件的一個實例,然後用HTTP POST方法將原始資料傳給Soap進行處理

在php5開始整合soap了,SOAP的使用比較簡單,其中最常用到的類別是SoapServer和SoapClient, 其中SoapServer用於建立Webservice服務端,類別SoapClient則用於呼叫Webservice,也就是客戶端。由於soap從php5便集成,只需要在php.ini開啟soap元件即可。

以windows下為例:

webServicephp的soap與nusoap服務端與客戶端的通信、先建立服務端,由於整合後的php5不需要引入任何soap支援文件,直接建立即可,例如存取位址設定為http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php。

webServicephp的soap與nusoap服務端與客戶端的通信

.

Soap實例:

0webServicephp的soap與nusoap服務端與客戶端的通信

0webServicephp的soap與nusoap服務端與客戶端的通信

0304     (

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

class

test{

    

function

demo(){

    

}

}

//開始建立webservice

//null可傳入ip,第二個參數類似授權標識,呼叫時會用到

$webService= new

So

'uri'=>

'test.php'

));

//設定需要提供的類,setClass不難理解吧?

$webService

->setClass(

'test');$webService 至此,soap服務端創建完成。 webServicephp的soap與nusoap服務端與客戶端的通信、調用剛剛創建的soap服務,同理,由於集成後的php5不需要引入任何soap支援文件,直接調用即可。 webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信3

45645

=

newSoapClient(null,

array
    

"location"

=>>

'http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.>'

'http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.>' "uri"      =>

'test.php'

//請求標識,伺服器和客戶端必須對應

));

//至此,便可調用類裡面的方法了

->demo();

var_dump($demo);

然而對於Nusoap來說,靈活性強於soap,它們的操作過程基本上一致,只是處理過程有少許的偏差,NuSOAP的使用也比較簡單,其中最常用到的類是soap_server和nusoap_client, 其中soap_server用於建立Webservice服務端,類別nusoap_client則用於呼叫Webservice,也就是客戶端。這兩個類別的定義都在lib/nusoap.php中,因此我們在創建 或呼叫Webservice介面程式時均需要引用該檔案。

NuSoap是PHP環境下的WebService程式設計工具,用於建立或呼叫WebService。它是一個開源軟體,是完全採用PHP語言編寫的、透過HTTP收發SOAP訊息的一系列PHP類,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )開發。 NuSOAP的一個優勢是不需要擴充函式庫的支持,而這個特性使得NuSoap可以用於所有的PHP環境,不受伺服器安全設定的影響。

提供nusoap下載:nusoap-0.9.5

Nusoap的實例:

webServicephp的soap與nusoap服務端與客戶端的通信、首先要做的依然是創建服務端,剛剛說到了有少許的偏差,就在服務端創建這了,首先引入nusoap的支援類庫

0webServicephp的soap與nusoap服務端與客戶端的通信

0webServicephp的soap與nusoap服務端與客戶端的通信

03

0460webServicephp的soap與nusoap服務端與客戶端的通信

05

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

/ /引入nusoap支援類別庫

require_once
(

'lib/nusoap.php');

_$ $ soap->configureWSDL('test'

);//這裡要說明register這個函數,第一個參數是需要呼叫的方法,第二個參數是傳入的數據,第三個參數是傳出的數據。 $soap

->register('GetTestStr', 

=> "xsd:string"

), // 參數,預設為"xsd:string"        array

(>sd         ); $HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA

) ?

$HTTP_RAW_POST_DATA: '';$soap

至此,nusoap的服務端已經建立好,假設位址為http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php。

webServicephp的soap與nusoap服務端與客戶端的通信、呼叫nusoap。在這之前我在這裡封裝了一下,檔案為class.nuSoapApi.php,程式碼如下。

0506

0webServicephp的soap與nusoap服務端與客戶端的通信

0webServicephp的soap與nusoap服務端與客戶端的通信

03

04

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信3

webServicephp的soap與nusoap服務端與客戶端的通信4

webServicephp的soap與nusoap服務端與客戶端的通信5

webServicephp的soap與nusoap服務端與客戶端的通信6

webServicephp的soap與nusoap服務端與客戶端的通信7

webServicephp的soap與nusoap服務端與客戶端的通信8

webServicephp的soap與nusoap服務端與客戶端的通信9

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信33 7

webServicephp的soap與nusoap服務端與客戶端的通信8

webServicephp的soap與nusoap服務端與客戶端的通信9

30

3webServicephp的soap與nusoap服務端與客戶端的通信

3webServicephp的soap與nusoap服務端與客戶端的通信

33

34

35

36

37

38

44

45

46

47

48

49

50

5webServicephp的soap與nusoap服務端與客戶端的通信

5webServicephp的soap與nusoap服務端與客戶端的通信

53

54

555

6webServicephp的soap與nusoap服務端與客戶端的通信

6webServicephp的soap與nusoap服務端與客戶端的通信

63

64

65

66

67

68

69

70

7webServicephp的soap與nusoap服務端與客戶端的通信

7webServicephp的soap與nusoap服務端與客戶端的通信

7webServicephp的soap與nusoap服務端與客戶端的通信5733 7

78

79

80

8webServicephp的soap與nusoap服務端與客戶端的通信

8webServicephp的soap與nusoap服務端與客戶端的通信

83

84

85

86

87

888

/**

 

* nusoap擴展類

 

* Email:zhangyuan#tieyou.com

*/

//引入nusoap基類

require_once

(

'pto/nusoap/nusoap_new/lib/nusoap.php'class

); ends

nusoap_client{

    

private

$_strSoapUrl

=

''

;

/pri ate

$_strSoapDefenCoding

=

'utf-8'
;

// 目前請求的HTTP內容類型的字元集。預設utf-8

    private

$_strXmlEnCoding= 'utf-8'EnCoding

= 'utf-8'EnCoding=

/

'utf-8'EnCoding=。預設utf-8

    private$_arrParam

= array

((()); //arrData    private

$_objSoap= null     /**

     * 建構子      m 可選,預設為wsdl $_strSoapWsdl     */

publicfunction__construct($_strSoapUrl,$_strcom

if

($this->_objSoap === null ){            $this->_objSoap =

new

nusoap_client($_strSoapUrl,$_strSoapWss);     }

              

 

  #&*/

    public

functionsetArrParam(

$this

->_arrParam = $arrData

;

    

}

   

    publicfunctionsetDeCodeUtf8($bool = false){<p><code>        $這個->_objSoap->decode_utf8 = $bool;

    }

   

    public

函數

setSoapDefenCoding($strCode

){

        

if

(!)          

$這個->_objSoap->soap_defencoding = $strCode;        }

$這個->gt ;_objSoap->soap_defencoding = $這個->_strSoapDefenCoding;           

public函數setXmlEnCoding($strCode){

if(!(

$strCode)){ _objSoap->xml_encoding = $strCode;

        }

$這個->gt ;_objSoap->xml_encoding = $這個

->_strXmlEnCoding;        }}         

/**

     * 設定http內容類型的字元編碼     */    

函數getRequestData($fun){        

        $arrData=$這

->_objSoap->call(

$fun,$這個->_arrParam);

    }

/**

     

* 取得資料     

*/    

public函數arrDataObj(  

//引用地址,而不是引用副本         $objStdClass= newstdClass();

$arrData

as$key=>$值){

<p><code>            if(is_array((is_y       Sharp ->arrDataObj($value);

<p><code>            }else{

  Class

->$key= $value;       

}

        

return

$objStdClass;

} }?>

從這裡開始呼叫執行過程:

0webServicephp的soap與nusoap服務端與客戶端的通信

03

04

07

08

09

webServicephp的soap與nusoap服務端與客戶端的通信0webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信3webServicephp的soap與nusoap服務端與客戶端的通信65%

webServicephp的soap與nusoap服務端與客戶端的通信8

webServicephp的soap與nusoap服務端與客戶端的通信9

//定義webservice的請求url

define(

'SERVICEDTS_WEBSERVER_URL'

,

'http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php?wsdl'

'http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php?wsdl'

);

//引入剛封裝的類別

require_oncece. '

);

//呼叫nusoap擴充類別

$client

= ent->setSoapDefenCoding( 'utf-8');$client

->setDeCodeUtf8(false);

); $paras= array

('name'

=>> 'hkshadow' $paras);

$result= $client->getRequestData('GetTestStr'

); = $client

->getError ()) {    echo" 回傳結果: "

, $result {    echo " 呼叫出錯: ", $err

;,}//輸出Hello, {k

解說:

WSDL
WSDL是一種用來描述Web Service的XML語言。它是一種機讀格式,把所有的存取服務所必須的資訊提供給Web Service客戶端。 NuSOAP專門提供一個類別進行WDSL檔案的解析,並且從中擷取資訊。 soapclient物件使用wsdl類別來減輕開發者呼叫服務的難度。透過WSDL資訊的幫助來建立封包,程式設計師只需要知道操作的名字和參數就能呼叫它。

透過NuSOAP使用WSDL提供以下幾點優點:
所有的服務元文件,如命名空間(namespaces),endpoint URLs,參數名稱(parameter names)等等都可以直接從WSDL文件取得,這樣就允許客戶端動態的適應伺服器端的變化。因為從伺服器隨時可以獲得,所以這些資料不再需要在使用者腳本中使用硬性編碼。
它允許我們使用soap_proxy類別。這個類別衍生自soapclient類,增加了WDSL檔案中詳細列出的操作所對應的方法。現在用戶可以透過它直接呼叫這些方法。
soapclient 類別包含一個getProxy()方 法,它傳回一個soap_proxy類別的一個物件。 soap_proxy類別衍生自soapclient類,增加了對應於 WSDL文件中定義的操作的方法, 並且允許使用者呼叫一個endpoint的遠端方法。這僅僅適用於soapclient物件用WDSL檔初始化的情況。優點是易於使用者使用,缺點是效能–PHP中建立物件是耗時的–且不為功利目的服務 (and this functionality serves no utilitarian purpose)。

$client

0webServicephp的soap與nusoap服務端與客戶端的通信

0webServicephp的soap與nusoap服務端與客戶端的通信

03

04

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信3

webServicephp的soap與nusoap服務端與客戶端的通信4

webServicephp的soap與nusoap服務端與客戶端的通信5

webServicephp的soap與nusoap服務端與客戶端的通信6

webServicephp的soap與nusoap服務端與客戶端的通信7

webServicephp的soap與nusoap服務端與客戶端的通信8

webServicephp的soap與nusoap服務端與客戶端的通信9

webServicephp的soap與nusoap服務端與客戶端的通信0

webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信

new

NusoapApi(SERVICEDTS_WEBSERVER_URL,true );

->setSoapDefenCoding(

'utf-8'

);

$cliclient; $client-> setXmlEnCoding('utf-8'

);

$paras= array

(

''''(

);

$client->setArrParam($paras

);

//      $result = $client->getRequestData('GetV)); $ proxy= $client->getProxy();//呼叫遠端函數

$sq//呼叫遠端函數$sq 'Bruce Lee'

);

if

(!

$err

=$proxy->getError( $sq

);

}

else{     print"ERROR: $  

print

"ERROR: $5""> print'REQUEST:<xmp>'. $p->request.'</xmp>'

;print'RESPONSE

'><code>, ">n

,

$p->response).'</xmp>';

運行剛剛建立的服務端url,http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php,執行後的結果如下。
webServicephp的soap與nusoap服務端與客戶端的通信

點選方法名稱。這樣我們透過在service中增加了幾行程式碼我們就透過使用NuSOAP為service提供了一個可視化的文檔。但是,這還不是所有我們能做的。

webServicephp的soap與nusoap服務端與客戶端的通信

我們在service中透過使用NuSOAP增加一些WSDL的呼叫我們可以為service產生WSDL還有一些其他的文件。與此不同的是,在 client中我們能做的就有些少了,至少在我們的這個簡單的例子中是如此。下面所示的這個client跟沒有使用WSDL的client沒有什麼不同 的,唯一的不同就是解析soapclent class是透過提供WSDL的URL來完成的,而不是之前的透過service endpoint。

NuSoap呼叫WebService時可以對編碼進行設置,出現亂碼的解決方法如下:

nusoap_client(webServicephp的soap與nusoap服務端與客戶端的通信. 也有為nusoap的SoapClient類別改名的。 至此,不論是php5內建的soap也好,還是nusoap擴充類別也好,而對於webservice都是解決方案,從上面的部分例子可見,nusoap顯得更靈活一些,而對於簡單的webserice通信的話,php5內建的soap更快捷,不論是哪一種選擇其一即可。

webServicephp的soap與nusoap服務端與客戶端的通信

webServicephp的soap與nusoap服務端與客戶端的通信

=

new

"http://webServicephp的soap與nusoap服務端與客戶端的通信webServicephp的soap與nusoap服務端與客戶端的通信7.0.0.webServicephp的soap與nusoap服務端與客戶端的通信/test.php?wsdl"

,true);    $client->soap_defencoding = 'utf-8';

$client->decode_utf8 = false;dingcliclient.

'utf-8';

檔案程式碼不能有任何輸出, 否則呼叫時會報類似Reserved XML Name如果在開啟php5內建的soap時,nusoap的SoapClient類別和php5內建的SOAP類別有衝突的話(我這裡沒有這樣的情況,webServicephp的soap與nusoap服務端與客戶端的通信種同時開放):

解決方案webServicephp的soap與nusoap服務端與客戶端的通信. 修改php. ini不載入php5內建的soap擴充(windows下是php_soap.dll)。
原文網址:http://www.mudbest.com/webservicephp%E7%9A%84soap%E4%B8%8Enusoap%E6%9C%8D%E5%8A%AwebServicephp的soap與nusoap服務端與客戶端的通信%E7%AB%AF%E4%B8 %8E%E5%AE%AwebServicephp的soap與nusoap服務端與客戶端的通信%E6%88%B7%E7%AB%AF%E7%9A%84%E9%80%9A%E4%BF%AwebServicephp的soap與nusoap服務端與客戶端的通信/


以上就介紹了webServicephp的soap與nusoap服務端與客戶端的通信,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn