SOAP webservice介面

巴扎黑
發布: 2016-11-24 15:46:06
原創
1367 人瀏覽過

PHP 中,在 php.ini 檔案中開啟了 php_soap.dll 擴充後,就可以支援 SOAP 了。
在soap擴充庫中,主要包括三種物件。
1、SoapServer
    用於建立php伺服器端頁面時定義可被呼叫的函數及回傳回應資料。建立一個SoapServer物件的語法格式如下:
    $soap = new SoapServer($wsdl, $array);
    其中,$wsdl為shoap使用得wsdl文件,wsdl 是描述Web Service的一種標準格式, 其中,$wsdl為shoap使用得wsdl文件,wsdl 是描述Web Service的一種標準格式,其中若將$wsdl設定為null,則表示不使用wsdl模式。 $array是SoapServer的屬性訊息,是一個陣列。
    SoapServer物件的addFunction方法是用來宣告哪個函數可以被客戶端調用,語法格式如下:
    $soap->addFunction($function_name);
   函數名。
    SoapServer物件的handle方法用來處理使用者輸入並呼叫對應的函數,最後傳回給客戶端處理的結果。語法格式如下:
    $soap->handle([$soap_request]);
    其中,$soap是一個SoapServer物件,$soap_request是一個可選參數,用來表示使用者的請求資訊。如果不指定$soap_request,則表示伺服器將接收使用者的全部請求。
2、SoapCliet
    用於呼叫遠端伺服器上的SoapServer頁面,並實作了對應函數的呼叫。建立一個SoapClient物件的語法格式如下:
    $soap = new SoapClient($wsdl,$array);
    其中,參數$wsdl和$array與SoapServer相同。
    建立SoapClient物件後,呼叫服務端頁面中的函數相當於呼叫了SoapClient的方法,建立語法如下:
    $soap->user_function($params);
   ,$soap->user_function($params);
   要呼叫的函數,$params 是要傳入函數的參數。
3、SoapFault
    SoapFault用於產生soap存取過程中可能出現的錯誤。建立一個soapFault物件的語法格式如下:
    $fault = new SoapFault($faultcode,$faultstring);
    其中,$faultcode是使用者定義的錯誤代碼,$faultstring是使用者自訂的錯誤訊息。 soapFault 物件會在伺服器端頁面發生錯誤時自動生成,或透過使用者自行建立SoapFault物件時生成。對於 Soap存取時發生的錯誤,用戶端可透過捕捉SoapFalut物件來獲得對應的錯誤訊息。
    在客戶端捕獲SoapFault物件後,可以透過下面的程式碼取得錯誤代碼和錯誤訊息:
    $fault->faultcode;//錯誤代碼
    $fault->faultstring;//錯誤訊息前面建立的SoapFault物件。
不論是SoapServer還是SoapClient,都接收兩個參數,其中第二個參數是Option,它支援若干選項,這裡我們用到的有:
uri:命名空間,客戶端和服務端需要使用相同的命名空間
location:客戶端用,用來指定服務端程式的存取位址,也就是本例第二段程式碼的程式位址。
trace:客戶端用,為true時可以取得服務端與客戶端通訊的內容,以供調試。

Soapserver.php

Java程式碼  

//先建立一個SoapServer物件實例,然後將我們要揭露的函數註冊,  

/ap/p.

error_reporting(7); //正式發佈時,設為 0  

date_default_timezone_set('PRC'); //設定時區  )  

{  

    $retval = '';  

    if (strlen Fault ('Client', '', 'Invalid string');  

    }  

    for ($i = 1; $i 

        $retval .=$ 

    return $retval;

}  

  

function add2numbers($num1, $num2)  

{  

  

{  

        return new SoapFault ('Client', '', '第一個數字無效');  

    }  

        return new SoapFault('顧客端','','第二個數字無效');  

    }  

    回中($num1 + $num2);  

🠎)  

    $time = date( 'Y-m-d H:i:s', time());  

    返回$時間;  

}  

  

} "));  

$soap->addFunction('reverse');  

$soap->addFunction('add2numbers');  

$soap->addFunction('gettime); (SOAP_FUNCTIONS_ALL);  

$soap->handle();  

? >  

 SoapClient.php

Java 程式碼  

error_reporting(7);  

🠠p. location' => "http://www. yiigo.com/Soapserver.php", 'uri' =>"http://test -uri"));  

  

    $str = 「此字串將被反轉」 ->reverse($str);  

    echo 「如果你反轉'$str',你將會得到'$reversed'」;  

  

  

    

    $sum = $client->add2numbers($n1, $n2);  

    迴聲「
」;  

        迴聲「”;  

    echo 「remoye 系統時間是:」。 $client->gettime();  

} catch (SoapFault $fault) {  

    echo 「故障!程式碼:」。 $故障->故障碼。 “ 細繩:” 。 $fault->faultstring;  

}  

? >  

如果你反轉'這個字串將被反轉',你會得到'desrever eb lliw gnirts sihT'

如果你嘗試20 + 33,你會得到53

remoye系統時間是:2012-05-28 16:14 :29

 

透過SoapHeader實現身分認證

Java程式碼  

uth($a)  

    {  

        若($a!= '123456789 ') {  

             throw new SoapFault('伺服器', }  

  

    公用函數say()  

    {  

  

    }  

}  

  

$srv = new SoapServer(null, array('uri'h生活=> 'httpnew SoapServer(null, array('uri'h)> 'httpnew SoapServer(null, array('uri'h)> 'http 

$srv->handle();   

 客戶端

Java代碼  

    array('uri' => 'http://localhost/namespace/',  

        'location' => true));  

  

//auth為服務端要處理的函數  12345689為參數    

$h = new SoapHeader , false, SOAP_ACTOR_NEXT);

$cli->__setSoapHeaders(array($h));  

try {  

    echo $    echo $e->getMessage() ;  

}   

注意觀察server.php中的server類別有一個方法“auth”,剛好與header的名稱對應,方法auth的參數$u,就是soapHeader的data,soapServer接收到這個請求會,先調用auth方法,並將「123456789」當作參數傳遞給該方法。 mustUnderstand參數為false時,即便沒有auth這個方法,say方法也會被調用,但是如果它為true的話,如果auth方法不存在,就會返回一個Soapfault告知該header沒有被處理。 actor參數指名那些role必須處理該header,這兒我理解得不是太透徹,不好說。

Java代碼  

$file = $this->getSoapWSDL();  

$client = new SoapClient($file);//url可以透過瀏覽器來存取,不能直接呼叫瀏覽器userID' => 'test', 'merchantID' => 'test');  

$returnSt = $client->checkUser($param);  eck

public function getSoapWSDL()  

{ //定期將url的檔案儲存到本地  

    $file = Mage::getBaseDir( .  

if (time() > filemtime($file) + 7 * 86400) {  

        $url      include_once(BP . DS . "lib/Snoopy.class.php");  

        $snoopy = new Snoopy;  

        $snoopy->read_timeout = 4;  

         $wsdl = $snoopy->results;  

        if ($snoopy->status == '200' && !$  (!is_dir(dirname($file))) {  

                mkdir(dirname ($file));  

            }  

           }  

    }  

    return $file;  

}  

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!