最近剛好需要整合不同系統使用者帳號認證,我預備採用的方式是 SOAP,兩邊軟體一邊必須實作 SOAP Server 來提供帳號認證,另一邊需要實作 SOAP Client 來使用帳號認證。
SOAP Client 的部份會送傳下列資料到 Server 端,並且透過 Server 端所實作的 getUserInfo,來取回使用者認證資料,傳送資料如下:
- loginId:使用者帳號
- password:使用者密碼(傳送時先透過 MD5 編碼)
SOAP Server 則會實作一個 User 的 WSDL 提供給 Client 端讀取,並且實作一個 getUserInfo 的方法,用來將認證的資料 userInfo 傳回給 Client 端,userInfo 包含:
- validUser:是否為系統中的使用者
- userName:使用者全名
- eMail :使用者的電子郵件信箱
我試過 PHP 內建的 SOAP、PEAR::SOAP 與 NuSOAP,其中 NuSOAP用起來最方便。在 0.72 以前,因為 Class 命名跟內建的 SOAP 衝突,所以需要修改 Class 名稱,但是在 0.73 後則已經沒有問題。所以建議使用 0.72 的都升級到 0.73。
在 NuSOAP 中,如果 Server 端已經提供 WSDL,那你幾乎不需作任何設定,拿了就用:
$soapclient = new nusoap_client('http://others/soapserver.php?wsdl', true);
$error = $soapclient->getError();
if ($error) {
return false;
}
$result = $soapclient->call( 'getUserInfo', array( 'loginId' => 'nusoap', 'password' => md5('123456') ) );
if ($soapclient->fault) {
return false;
} else {
$error = $soapclient->getError();
if ($error) {
return false;
} else {
print_r($result);
}
}
就這樣!$result 中儲存的就是 Server 端回傳的資料,並且已經幫你 Parsing 好,變成 PHP 的陣列:
Array
(
[validUser] => 1
[fullName] => Nu Soap
[eMail] => nusoap@soaptest.com
)
完整的 SOAP Server/Client 實作,就請自行參考我 附上的程式。
真實引用網址:
http://blog.markplace.net/trackback.php?id=360
迴響 ↓
NuSOAP Proxy
阿土伯 發表於 18/03/2008, 02:05
印象中, NuSOAP 提供了 GenerateProxyCode 的功能, 可以產生 WS Proxy 物件, 然後直接以 operation name 操作, 如(以下 code 沒實際跑過):
$soapclient = new nusoap_client('http://others/soapserver.php?wsdl', true);
$soapProxy = $soapclient->getProxy();
$result = $soapProxy->getUserInfo( 'nusoap', md5('123456') );
沒錯沒錯!
markwu 發表於 18/03/2008, 06:24
NuSOAP 有 proxy,可以這樣用喔!