<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<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 <acronym>SOAP</acronym>.
    </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><varname>$wsdl</varname> : l'URI du fichier WSDL.</para>
                    </listitem>

                    <listitem>
                        <para><varname>$options</varname> : 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 <methodname>setWsdl($wsdl)</methodname> et
            <methodname>setOptions($options)</methodname>.
        </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 <acronym>SOAP</acronym> à utiliser
                        (SOAP_1_1 ou <acronym>SOAP</acronym>_1_2).
                    </para>
                </listitem>

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

                    <para>
                        Cette option doit être un tableau avec comme clés les types WSDL et
                        comme valeurs les noms des classes <acronym>PHP</acronym>.
                    </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 à
                        <methodname>setWsdl($wsdlValue)</methodname>.
                    </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 <acronym>SOAP</acronym> (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):
                        <constant>SOAP_RPC</constant> ou <constant>SOAP_DOCUMENT</constant>.
                    </para>
                </listitem>

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

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

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

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

                <listitem>
                    <para>
                        'compression' : options de compression ; c'est une combinaison entre
                        <constant>SOAP_COMPRESSION_ACCEPT</constant>, <constant>SOAP_COMPRESSION_GZIP</constant> et
                        <constant>SOAP_COMPRESSION_DEFLATE</constant>, qui peuvent être utilisées de cette
                        manière : <programlisting language="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 <acronym>SOAP</acronym>.
        </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 <acronym>PHP</acronym> le définit.
        </para>

        <para>
            Voici un exemple : <programlisting language="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>