Estou tentando há dias fazer uma requisição de preço e prazo de entrega para o WS dos Correios. Acontece que o meu php não executa de jeito nenhum a requisição, e o pior é que se eu abrir a URL diretamente no navegador, o XML aparece normalmente, e não sei porque motivo o php não consegue "puxar" esse mesmo xml.
Vou colocar o código caso alguém queira testar ou verificar se estou fazendo algo errado:
Correios.php
<?php class Correios
{
public $nCdEmpresa, $sDsSenha, $servico, $cepOrigem, $cepDestino, $peso, $formato = '1', $comprimento,
$altura, $largura, $diametro, $maoPropria = 'N', $valordeclarado = '0', $avisoRecebimento = 'N', $retorno = 'xml';
public function calc()
{
$cURL = curl_init(sprintf(
'ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo?nCdEmpresa=%s&sDsSenha=%s&nCdServico=%s&sCepOrigem=%s&sCepDestino=%s&nVlPeso=%s
&nCdFormato=%s&nVlComprimento=%s&nVlAltura=%s&nVlLargura=%s&nVlDiametro=%s&sCdMaoPropria=%s&nVlValorDeclarado=%s
&sCdAvisoRecebimento=%s&StrRetorno=%s HTTP/1.1',
$this->nCdEmpresa,
$this->sDsSenha,
$this->servico,
$this->cepOrigem,
$this->cepDestino,
$this->peso,
$this->formato,
$this->comprimento,
$this->altura,
$this->largura,
$this->diametro,
$this->maoPropria,
$this->valordeclarado,
$this->avisoRecebimento,
$this->retorno
)); // Define a opção que diz que você quer receber o resultado encontrado
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true); // Executa a consulta, conectando-se ao site e salvando o resultado na variável $string
$string = curl_exec($cURL); // Encerra a conexão com o site
curl_close($cURL);
$xml = simplexml_load_string($string);
if ($xml->Erro != '') {
$this->error = array($xml->cServico->Erro, $xml->cServico->MgsErrro);
return false;
} else {
return $xml;
}
}
public function error()
{
if (is_null($this->error)) {
return false;
} else {
return $this->error;
}
}
}
Agora o Script que estou chamando para testar a requisição e não funciona:
$frete = new Correios();
$frete->servico = "04510"; // 04510 para PAC e 04014 para SEDEX
$frete->cepOrigem = "82220020";
$frete->cepDestino = "08090284";
$frete->peso = "0.5";
$frete->comprimento = "50";
$frete->altura = "5";
$frete->largura = "20";
$frete->diametro = "0";
$calc = $frete->calc();
if (!$calc) {
$error = $frete->error();
echo $error[1];
} else {
var_dump($calc);
}
Já habilitei o curl no php.ini e testei em uma hospedagem, continua não me retornando nada