NuSOAPの使い方

サーバ側の実装は以下のような感じになる。
ref http://dietrich.ganx4.com/nusoap/faq.php?id=103

  • WSDLが既に作成してあって、それを指定する場合には以下。*1
    • func1()という関数の名前は実際にはWSDLに記述した関数名()にする。
    • paramやresultも同様。
require_once('nusoap.php');

$server = new soap_server('my_webservice.wsdl');

function func1($param1, $param2, $param3){
    $result = array(
        'result1' => 'value1',
        'result2' => 'value2',
        'result3' => 'value3',
    );
    return $result;
}

$server->service($HTTP_RAW_POST_DATA);

この場合に http://hostname/soap_server.php?wsdl というようなリクエストでWSDLが取得できる。

  • WSDLがない場合には register() を使う。
require_once('nusoap.php');

$server = new soap_server;
$server->register('func1');

function func1($param1, $param2, $param3){
    $result = array(
        'result1' => 'value1',
        'result2' => 'value2',
        'result3' => 'value3',
    );
    return $result;
}

$server->service($HTTP_RAW_POST_DATA);

この場合に ?wsdlWSDLを取得するためには、$server->configureWSDL() というメソッドを追加で呼ぶ必要がある。


このサーバを呼ぶクライアント側は以下のようになる。

require_once('nusoap.php');

$parameters = array(
    'param1' => 'value1',
    'param2' => 'value2',
    'param3' => 'value3',
);
$soapclient = new soapclient('http://hostname/soap_server.php?wsdl', 'wsdl');
$result = $soapclient->call('func1', $parameters);

httpでWSDLを取得する処理のオーバーヘッドが気になる場合にはローカルファイルとして置いてもいい。(Cacheなどでキャッシュもありか)

ちょっと怖い気もするけど、WSDLなしでいきなりエンドポイントを指定してもいけるらしい。

$endpoint = 'http://hostname/soap_server.php';
$soapclient = new soapclient($endpoint);
$result = $soapclient->call('func1', $parameters);

*1:ソースには「WSDL functionality is experimental」という注意書きがある。