サーバ側の実装は以下のような感じになる。
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);