そのWSDLに基づいてWebサービスを利用するためのコードを生成するために使用できるPHP用のツールはありますか?VisualStudioまたはJavaで同じことを行うEclipseプラグインの[Web参照の追加]をクリックするのに匹敵するもの。
7 に答える
PHP 5では、WSDL でSoapClientを使用して Web サービス関数を呼び出すことができます。例:
$client = new SoapClient("some.wsdl");
$client は、some.wsdl で定義されているクラス メソッドを持つオブジェクトになりました。したがって、WSDL に getTime というメソッドがあった場合は、次のように呼び出します。
$result = $client->getTime();
そして、その結果は (明らかに) $result 変数になります。__getFunctions メソッドを使用して、使用可能なすべてのメソッドのリストを返すことができます。
私はwsdl2phpで大成功を収めました。Webサービスで使用されるすべてのオブジェクトとメソッドのラッパークラスが自動的に作成されます。
過去にNuSOAPを使用したことがあります。インクルードできるPHPファイルのセットにすぎないので、気に入りました。Web サーバーにインストールするものは何もなく、変更する構成オプションもありません。おまけにWSDLもサポートしています。
この記事では、PHP SoapClient を使用して API Web サービスを呼び出す方法について説明します。
これらの機能は、それらの言語での開発に使用しているツールに固有のものです。
たとえば、メモ帳を使用してコードを記述している場合、これらのツールはありません。したがって、使用しているツールについて質問する必要があるかもしれません。
PHP の場合: http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html
次のものが提供されたとします。
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://thesite.com/">
<x:Header/>
<x:Body>
<int:authenticateLogin>
<int:LoginId>12345</int:LoginId>
</int:authenticateLogin>
</x:Body>
</x:Envelope>
と
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<authenticateLoginResponse xmlns="http://thesite.com/">
<authenticateLoginResult>
<RequestStatus>true</RequestStatus>
<UserName>003p0000006XKX3AAO</UserName>
<BearerToken>Abcdef1234567890</BearerToken>
</authenticateLoginResult>
</authenticateLoginResponse>
</s:Body>
</s:Envelope>
http://thesite.com/にアクセスすると、WSDL アドレスが http://thesite.com/PortalIntegratorService.svc?wsdlであることがわかりました。
$client = new SoapClient('http://thesite.com/PortalIntegratorService.svc?wsdl');
$result = $client->authenticateLogin(array('LoginId' => 12345));
if (!empty($result->authenticateLoginResult->RequestStatus)
&& !empty($result->authenticateLoginResult->UserName)) {
echo 'The username is: '.$result->authenticateLoginResult->UserName;
}
ご覧のとおり、XML で指定された項目は PHP コードで使用されますが、LoginId 値は変更できます。