NuSOAPの使い方
サーバ側の実装は以下のような感じになる。
ref http://dietrich.ganx4.com/nusoap/faq.php?id=103
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);
この場合に ?wsdl でWSDLを取得するためには、$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);