<!-- EN-Revision: 13732 -->
<sect1 id="zend.soap.client">
    <title>Zend_Soap_Client</title>

    <para><classname>Zend_Soap_Client</classname> est une classe destinée à simplifier l'interrogation de services SOAP.</para>

    <para>Cette classe peut être utilisée en mode WSDL ou non WSDL.</para>

    <para>Lorsque Zend_Soap_Client fonctionne en mode WSDL, il utilise le document WSDL pour définir les options de la
    couche de transport des données.</para>

    <para>Le fichier WSDL est en général fournit par le service auquel vous souhaitez accéder. Si la description WSDL
    n'est pas disponible, vous pouvez vouloir utiliser <classname>Zend_Soap_Client</classname> en mode non WSDL . Dans ce cas,
    toutes les options du protocole devront être définies explicitement dans la classe
    <classname>Zend_Soap_Client</classname>.</para>

    <sect2 id="zend.soap.client.constructor">
        <title>Constructeur de <classname>Zend_Soap_Client</classname>.</title>

        <para>Le constructeur de <classname>Zend_Soap_Client</classname> accepte 2 paramètres: <itemizedlist>
                <listitem>
                    <para><code>$wsdl</code> : l'URI du fichier WSDL.</para>
                </listitem>

                <listitem>
                    <para><code>$options</code> : options de création.</para>
                </listitem>
            </itemizedlist> Ces deux paramètres peuvent être insérés après construction, ceci grâce aux méthodes
        <code>setWsdl($wsdl)</code> et <code>setOptions($options)</code>.</para>

        <note>
            <title>Important!</title>

            <para>Si vous utilisez Zend_Soap_Client en mode non WSDL, vous <emphasis>devez</emphasis> fournir les
            options 'location' et 'uri'.</para>
        </note>

        <para>Les options suivantes sont reconnues: <itemizedlist>
                <listitem>
                    <para>'soap_version' ('soapVersion') : version du protocole SOAP à utiliser (SOAP_1_1 ou
                    SOAP_1_2).</para>
                </listitem>

                <listitem>
                    <para>'classmap' ('classMap') : doit être utilisé pour faire correspondre des types WSDL à des
                    classes PHP.</para>

                    <para>Cette option doit être un tableau avec comme clés les types WSDL et comme valeurs les noms des
                    classes PHP.</para>
                </listitem>

                <listitem>
                    <para>'encoding' : encodage interne des caractères (l'encodage externe est toujours UTF-8).</para>
                </listitem>

                <listitem>
                    <para>'wsdl' : qui est équivalent à un appel à <code>setWsdl($wsdlValue)</code>.</para>

                    <para>Changer cette option peut faire basculer Zend_Soap_Client en mode WSDL ou non WSDL.</para>
                </listitem>

                <listitem>
                    <para>'uri' : cible du service SOAP (requis pour le mode non WSDL, inusité en mode WSDL).</para>
                </listitem>

                <listitem>
                    <para>'location' : l'URL à requêter (requis pour le mode non WSDL, inusité en mode WSDL).</para>
                </listitem>

                <listitem>
                    <para>'style' : style de requête (inusité en mode WSDL): <code>SOAP_RPC</code> ou
                    <code>SOAP_DOCUMENT</code>.</para>
                </listitem>

                <listitem>
                    <para>'use' : méthode d'encodage des messages (inusité en mode WSDL): <code>SOAP_ENCODED</code> ou
                    <code>SOAP_LITERAL</code>.</para>
                </listitem>

                <listitem>
                    <para>'login' et 'password' : login et password pour l'authentification HTTP.</para>
                </listitem>

                <listitem>
                    <para>'proxy_host', 'proxy_port', 'proxy_login', et 'proxy_password' : utilisés pour une connexion
                    HTTP via un proxy.</para>
                </listitem>

                <listitem>
                    <para>'local_cert' et 'passphrase' : options d'authentification HTTPS.</para>
                </listitem>

                <listitem>
                    <para>'compression' : options de compression ; c'est une combinaison entre
                    <code>SOAP_COMPRESSION_ACCEPT</code>, <code>SOAP_COMPRESSION_GZIP</code> et
                    <code>SOAP_COMPRESSION_DEFLATE</code>, qui peuvent être utilisées de cette manière : <programlisting
                    role="php"><![CDATA[
// Accepte une response compressée
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT));
...
// Compresse les requêtes avec gzip et un taux de 5
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' =>
            SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5));
...
// Compresse les requêtes en utilisant deflate
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' =>
            SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE));
]]></programlisting></para>
                </listitem>
            </itemizedlist></para>
    </sect2>

    <sect2 id="zend.soap.client.calls">
        <title>Effectuer des requêtes SOAP.</title>

        <para>Lorsqu'un objet <classname>Zend_Soap_Client</classname> est crée, nous sommes prêts à créer des requêtes
        SOAP.</para>

        <para>Chaque méthode du service Web est liée à une méthode virtuelle de l'objet <classname>Zend_Soap_Client</classname>,
        qui s'utilise de manière tout à fait classique comme PHP le définit.</para>

        <para>Voici un exemple : <programlisting role="php"><![CDATA[
...
//****************************************************************
//                Code du serveur
//****************************************************************
// class MyClass {
//     /**
//      * Cette méthode utilise ...
//      *
//      * @param integer $inputParam
//      * @return string
//      */
//     public function method1($inputParam) {
//         ...
//     }
//
//     /**
//      * Cette méthode utilise ...
//      *
//      * @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();
//
//****************************************************************
//                Fin du code du serveur
//****************************************************************

$client = new Zend_Soap_Client("MyService.wsdl");
...
// $result1 est une chaine
$result1 = $client->method1(10);
...
// $result2 est un flottant
$result2 = $client->method2(22, 'some string');
]]></programlisting></para>
    </sect2>
</sect1>