# Zend_Soap_Client(日本語)

Zend_Soap_ClientによりPHPプログラマーにとってSOAPクライアントの開発が簡単になります。

WSDLモードまたは非WSDLモードで使用できるでしょう。

WSDLモードでは、Zend_Soap_Clientコンポーネントは トランスポート層オプションを定めるためにWSDLドキュメントを使います。

WSDL記述は通常、クライアントがアクセスするウェブ・サービスによって提供されます。 WSDL記述が利用できるようにならなければ、非WSDLモードでZend_Soap_Clientを使いたいかもしれません。 すべてのSOAPプロトコル・オプションは、 このモードで明示的にZend_Soap_Clientクラス上に設定されなければなりません。

## Zend_Soap_Clientコンストラクタ

Zend_Soap_Clientコンストラクタには引数が２つあります:

- `$wsdl` - WSDLファイルのURI

- `$options` - SOAPクライアントオブジェクトを作成するためのオプション

これらのパラメータは両方とも、 それぞれsetWsdl($wsdl)やsetOptions($options)メソッドで、 後から設定されるかもしれません。

重要

もし非WSDLモードでZend_Soap_Clientコンポーネントを使う場合、 'location' および 'uri' オプションを設定しなければなりません。

下記のオプションが許されています:

- 'soap_version' ('soapVersion') - 使用するSOAPバージョン (SOAP_1_1 または SOAP_1_2).

- 'classmap' ('classMap') - 一部の WSDL 型をPHPクラスにマップするために使います。

  このオプションは、キーとしてWSDL型、値としてPHPクラス名をもつ配列でなければなりません。

- 'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)

- 'wsdl' setWsdl($wsdlValue)呼び出しと同じです。

  このオプションを変更すると、 Zend_Soap_ClientオブジェクトをWSDLモードに、または、から切り替えるかもしれません。

- 'uri' - SOAPサービスのためのターゲットのネームスペース (非WSDLモードで必要です。WSDLモードでは動作しません)

- 'location' - 要求するURL (非WSDLモードで必要です。WSDLモードでは動作しません)

- 'style' - 要求形式 (WSDLモードでは動作しません): `SOAP_RPC` または `SOAP_DOCUMENT`

- 'use' - メッセージをエンコードするメソッド (WSDLモードでは動作しません): `SOAP_ENCODED` または `SOAP_LITERAL`

- 'login' および 'password' - HTTP認証のための login および password

- 'proxy_host', 'proxy_port', 'proxy_login' および 'proxy_password' - プロキシ・サーバ経由のHTTP接続

- 'local_cert' および 'passphrase' - HTTPSクライアント証明書認証オプション。

- 'compression' - 圧縮オプション; `SOAP_COMPRESSION_ACCEPT`や`SOAP_COMPRESSION_GZIP`、 `SOAP_COMPRESSION_DEFLATE`の組み合わせです。 下記のように使われるでしょう:

      // レスポンスの圧縮を受け付けます
      $client = new Zend_Soap_Client("some.wsdl",
        array('compression' => SOAP_COMPRESSION_ACCEPT));
      ...

      // 圧縮レベル５でqzipを使ってリクエストを圧縮します
      $client = new Zend_Soap_Client("some.wsdl",
        array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5));
      ...

      // deflate 圧縮を使ってリクエストを圧縮します
      $client = new Zend_Soap_Client("some.wsdl",
        array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE));

## SOAPリクエストの実行

Zend_Soap_Clientオブジェクトを作成したら、SOAPリクエストを実行する準備ができます。

ウェブ・サービス・メソッドそれぞれで、 一般的なPHP型のパラメータを持つ仮想Zend_Soap_Clientオブジェクト・メソッドにマップされます。

それを下記の例のように使います:

    //****************************************************************
    //                サーバのコード
    //****************************************************************
    // class MyClass {
    //     /**
    //      * このメソッドは ...
    //      *
    //      * @param integer $inputParam
    //      * @return string
    //      */
    //     public function method1($inputParam) {
    //         ...
    //     }
    //
    //     /**
    //      * このメソッドは ...
    //      *
    //      * @param integer $inputParam1
    //      * @param string  $inputParam2
    //      * @return float
    //      */
    //     public function method2($inputParam1, $inputParam2) {
    //         ...
    //     }
    //
    //     ...
    // }
    // ...
    // $server = new Zend_Soap_Server(null, $options);
    // $server->setClass('MyClass');
    // ...
    // $server->handle();
    //
    //****************************************************************
    //                サーバのコード終了
    //****************************************************************

    $client = new Zend_Soap_Client("MyService.wsdl");
    ...

    // $result1 は string です。
    $result1 = $client->method1(10);
    ...

    // $result2 は float です。
    $result2 = $client->method2(22, 'some string');