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;
}