Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-02-2013 16:26:55

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Curl et API prestashop

Bonjour à tous,

Voilà je veux convertir le code suivant en quelque chose de plus zend compliant :

Code d'origine :

Code:

[lang=php]protected function executeRequest($url, $curl_params = array())
    {
        $defaultParams = array(
            CURLOPT_HEADER => TRUE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLINFO_HEADER_OUT => TRUE,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                        CURLOPT_ENCODING=> 'UTF-8',
            CURLOPT_USERPWD => $this->key.':',
            CURLOPT_HTTPHEADER => array( 'Expect:' )
                       
        );
        
        $session = curl_init($url);

        $curl_options = array();
        foreach ($defaultParams as $defkey => $defval)
        {
            if (isset($curl_params[$defkey]))
                $curl_options[$defkey] = $curl_params[$defkey];
            else
                $curl_options[$defkey] = $defaultParams[$defkey];
        }
        foreach ($curl_params as $defkey => $defval)
            if (!isset($curl_options[$defkey]))
                $curl_options[$defkey] = $curl_params[$defkey];

        curl_setopt_array($session, $curl_options);
              
                $response = curl_exec($session);
               
        $index = strpos($response, "\r\n\r\n");
        if ($index === false && $curl_params[CURLOPT_CUSTOMREQUEST] != 'HEAD')
            throw new PrestaShopWebserviceException('Mauvaise requête.');
        
        $header = substr($response, 0, $index);
        $body = substr($response, $index + 4);
                
                
        
        $headerArrayTmp = explode("\n", $header);
        
        $headerArray = array();
        foreach ($headerArrayTmp as &$headerItem)
        {
            $tmp = explode(':', $headerItem);
            $tmp = array_map('trim', $tmp);
            if (count($tmp) == 2)
                $headerArray[$tmp[0]] = $tmp[1];
        }
        
        if (array_key_exists('PSWS-Version', $headerArray))
        {
            if (
                version_compare(PrestaShopWebservice::psCompatibleVersionsMin, $headerArray['PSWS-Version']) == 1 ||
                version_compare(PrestaShopWebservice::psCompatibleVersionsMax, $headerArray['PSWS-Version']) == -1
            )
            throw new \Exception('Librairie incompatible avec cette version de Prestashop.');
        }
        
        if ($this->debug)
        {
            $this->printDebug('HTTP REQUEST HEADER', curl_getinfo($session, CURLINFO_HEADER_OUT));
            $this->printDebug('HTTP RESPONSE HEADER', $header);
            
        }
        $status_code = curl_getinfo($session, CURLINFO_HTTP_CODE);
        if ($status_code === 0)
            throw new PrestaShopWebserviceException('CURL Error: '.curl_error($session));
        curl_close($session);
        if ($this->debug)
        {
            if ($curl_params[CURLOPT_CUSTOMREQUEST] == 'PUT' || $curl_params[CURLOPT_CUSTOMREQUEST] == 'POST')
                $this->printDebug('XML SENT', $curl_params[CURLOPT_POSTFIELDS]);
            if ($curl_params[CURLOPT_CUSTOMREQUEST] != 'DELETE' && $curl_params[CURLOPT_CUSTOMREQUEST] != 'HEAD')
                $this->printDebug('RETURN HTTP BODY', $body);
        }
        return array('status_code' => $status_code, 'response' => $body, 'header' => $header);
    }[/lang]

Voici le code que j'ai proposé sauf qu'à l'ajout j'ai une bonne erreur 500, et pas au listing qui marche nickel :

Code:

 [lang=php]protected function executeRequest($url, $curl_params = array())
    {
        //var_dump($curl_params);
                
                $request = new \Zend\Http\Request();
                $request->setUri($url);
                $request->setMethod($curl_params['10036']);

                $client = new \Zend\Http\Client();
                $adapter = new \Zend\Http\Client\Adapter\Curl();
                $client->setAdapter($adapter);

                if($curl_params['10036'] == "GET"){
                    $adapter->setOptions(array(
                        'curloptions' => array(
                            CURLOPT_HEADER => TRUE,
                            CURLOPT_RETURNTRANSFER => TRUE,
                            CURLINFO_HEADER_OUT => TRUE,
                            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                            CURLOPT_ENCODING=> 'UTF-8',
                            CURLOPT_USERPWD => $this->key.':',
                            CURLOPT_HTTPHEADER => array( 'Expect:' )
                        )
                    ));
                }
        elseif($curl_params['10036'] == "POST"){
                     $adapter->setOptions(array(
                        'curloptions' => array(
                            CURLOPT_HEADER => TRUE,
                            CURLOPT_RETURNTRANSFER => TRUE,
                            CURLINFO_HEADER_OUT => TRUE,
                            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                            CURLOPT_ENCODING=> 'UTF-8',
                            CURLOPT_USERPWD => $this->key.':',
                            CURLOPT_HTTPHEADER => array( 'Expect:' ),
                            CURLOPT_CUSTOMREQUEST => 'POST', 
                            CURLOPT_POSTFIELDS => 'xml='.$curl_params['10015']
                        )
                    ));
                }
                
        
              
                $response = $client->dispatch($request);
               //var_dump($response);
        $index = strpos($response, "\r\n\r\n");
        if ($index === false && $curl_params[CURLOPT_CUSTOMREQUEST] != 'HEAD')
            throw new PrestaShopWebserviceException('Mauvaise requête.');
        
        $header = substr($response, 0, $index);
        $body = substr($response, $index + 4);
        
        $headerArrayTmp = explode("\n", $header);
        
        $headerArray = array();
        foreach ($headerArrayTmp as &$headerItem)
        {
            $tmp = explode(':', $headerItem);
            $tmp = array_map('trim', $tmp);
            if (count($tmp) == 2)
                $headerArray[$tmp[0]] = $tmp[1];
        }
        
        if (array_key_exists('PSWS-Version', $headerArray))
        {
            if (
                version_compare(PrestaShopWebservice::psCompatibleVersionsMin, $headerArray['PSWS-Version']) == 1 ||
                version_compare(PrestaShopWebservice::psCompatibleVersionsMax, $headerArray['PSWS-Version']) == -1
            )
            throw new \Exception('Librairie incompatible avec cette version de Prestashop.');
        }
        
        if ($this->debug)
        {
            $this->printDebug('HTTP RESPONSE HEADER', $header);
            
        }
        
                $status_code = $response->getStatusCode();
        if ($status_code === 0)
            throw new PrestaShopWebserviceException('CURL Error ! ');
        
        if ($this->debug)
        {
            if ($curl_params[CURLOPT_CUSTOMREQUEST] == 'PUT' || $curl_params[CURLOPT_CUSTOMREQUEST] == 'POST')
                $this->printDebug('XML SENT', $curl_params[CURLOPT_POSTFIELDS]);
            if ($curl_params[CURLOPT_CUSTOMREQUEST] != 'DELETE' && $curl_params[CURLOPT_CUSTOMREQUEST] != 'HEAD')
                $this->printDebug('RETURN HTTP BODY', $body);
        }
        return array('status_code' => $status_code, 'response' => $body, 'header' => $header);
    }[/lang]

Merci pour vos éclaircissements ... smile

Dernière modification par amelie (14-02-2013 16:31:52)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages