NFePHP\Common\Soap\CurlSoap::zCommCurl PHP Метод

zCommCurl() защищенный Метод

zCommCurl Realiza da comunicação via cURL
protected zCommCurl ( string $url, string $data = '', string $parametros = [], $port = 443 ) : string
$url string
$data string
$parametros string
Результат string
    protected function zCommCurl($url, $data = '', $parametros = array(), $port = 443)
    {
        //incializa cURL
        $oCurl = curl_init();
        //setting da seção soap
        if ($this->proxyIP != '') {
            curl_setopt($oCurl, CURLOPT_HTTPPROXYTUNNEL, 1);
            curl_setopt($oCurl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
            curl_setopt($oCurl, CURLOPT_PROXY, $this->proxyIP . ':' . $this->proxyPORT);
            if ($this->proxyPASS != '') {
                curl_setopt($oCurl, CURLOPT_PROXYUSERPWD, $this->proxyUSER . ':' . $this->proxyPASS);
                curl_setopt($oCurl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
            }
            //fim if senha proxy
        }
        //fim if aProxy
        //força a resolução de nomes com IPV4 e não com IPV6, isso
        //pode acelerar temporáriamente as falhas ou demoras decorrentes de
        //ambiente mal preparados como os da SEFAZ GO, porém pode causar
        //problemas no futuro quando os endereços IPV4 deixarem de ser usados
        curl_setopt($oCurl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        curl_setopt($oCurl, CURLOPT_CONNECTTIMEOUT, $this->soapTimeout);
        curl_setopt($oCurl, CURLOPT_TIMEOUT, $this->soapTimeout * 6);
        curl_setopt($oCurl, CURLOPT_URL, $url);
        curl_setopt($oCurl, CURLOPT_VERBOSE, 1);
        curl_setopt($oCurl, CURLOPT_HEADER, 1);
        //caso não seja setado o protpcolo SSL o php deverá determinar
        //o protocolo correto durante o handshake.
        //NOTA : poderão haver alguns problemas no futuro se algum serividor não
        //estiver bem configurado e não passar o protocolo correto durante o handshake
        //nesse caso será necessário setar manualmente o protocolo correto
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 0); //default
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //TLSv1
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 2); //SSLv2
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 3); //SSLv3
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 4); //TLSv1.0
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 5); //TLSv1.1
        //curl_setopt($oCurl, CURLOPT_SSLVERSION, 6); //TLSv1.2
        //se for passado um padrão diferente de zero (default) como protocolo ssl
        //esse novo padrão deverá se usado
        if ($this->sslProtocol !== 0) {
            curl_setopt($oCurl, CURLOPT_SSLVERSION, $this->sslProtocol);
        }
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, 0);
        if ($port == 443) {
            curl_setopt($oCurl, CURLOPT_PORT, 443);
            curl_setopt($oCurl, CURLOPT_SSLCERT, $this->certKeyPath);
            curl_setopt($oCurl, CURLOPT_SSLKEY, $this->priKeyPath);
        } else {
            $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
            curl_setopt($oCurl, CURLOPT_USERAGENT, $agent);
        }
        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
        if ($data != '') {
            curl_setopt($oCurl, CURLOPT_POST, 1);
            curl_setopt($oCurl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($parametros)) {
            curl_setopt($oCurl, CURLOPT_HTTPHEADER, $parametros);
        }
        //inicia a conexão
        $resposta = curl_exec($oCurl);
        //obtem as informações da conexão
        $info = curl_getinfo($oCurl);
        //carrega os dados para debug
        $this->zDebug($info, $data, $resposta);
        $this->errorCurl = curl_error($oCurl);
        //fecha a conexão
        curl_close($oCurl);
        //retorna resposta
        return $resposta;
    }