Mark's Place

A place for Mark's murmuring, blah, blah, blah, ...

Mark's Place
Watch Timeline

用 NuSOAP 來整合不同系統使用者帳號認證

Mark Wu 發表於 2008/03/16 14:15 · 靜態連結網址

最近剛好需要整合不同系統使用者帳號認證,我預備採用的方式是 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 內建的 SOAPPEAR::SOAPNuSOAP,其中 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

迴響 (2) · 引用 (0) 文章分類: 可以做人幹嘛寫程式

迴響 ↓

  • 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

    沒錯沒錯!
    markwu  發表於 18/03/2008, 06:24

    NuSOAP 有 proxy,可以這樣用喔!