Integrando site aos Correios
22/04/2018Nessa vídeo-aula vamos aprender como integrar nosso site com os Correios realizando a busca pelo CEP e calculando prazo e preço do frete.
Buscando CEP pela API
Vamos realizar a busca do endereço pelo CEP digitado pelo cliente utilizando a API disponível no site VIACEP. Vamos fazer um ajax para a URL da documentação do referido CEP tendo como retorno um json. Segue o código abaixo:
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>API Correios</title>
</head>
<body>
<h1>Correios</h1>
<h2>Busca Cep:</h2>
<form name="Form1" id="Form1">
CEP: <input type="text" name="Cep" id="Cep"><br>
<input type="submit" value="Buscar">
</form>
<div class="ResultadoCep"></div>
<!-- Baixe o jquery no site jquery.com -->
<script src="myjquery.js"></script>
</body>
</html>
No JQuery vamos fazer a nossa requisição Ajax.
//Busca do CEP
$('#Form1').on('submit',function(event){
event.preventDefault();
var Dados=$(this).serialize();
var Cep=$('#Cep').val();
$.ajax({
url: 'https://viacep.com.br/ws/'+Cep+'/json/',
method:'get',
dataType:'json',
data: Dados,
success:function(Dados){
$('.ResultadoCep').html('').append(''+Dados.logradouro+','+Dados.bairro+'-'+Dados.localidade+'-'+Dados.uf+'');
},
error:function(Dados){
alert('Cep não encontrado. Tente Novamente');
$('#Cep').val('');
}
});
});
Pesquisando preço e prazo
Para pesquisar preço e prazo vamos utilizar a API oficial dos correios. Nesse caso teremos como retorno um arquivo XML. Para tanto vamos criar uma ClassCorreios e um ControllerCorrios. A ClassCorreios fará a ligação com a API e o ControllerCorreios vai receber as variáveis e chamar o método pesquisaPrecoPrazo().
#ControllerCorreios
include("ClassCorreios.php");
$CepOrigem=filter_input(INPUT_POST,'CepOrigem',FILTER_SANITIZE_SPECIAL_CHARS);
$CepDestino=filter_input(INPUT_POST,'CepDestino',FILTER_SANITIZE_SPECIAL_CHARS);
$Peso=filter_input(INPUT_POST,'Peso',FILTER_SANITIZE_SPECIAL_CHARS);
$Formato=filter_input(INPUT_POST,'Formato',FILTER_SANITIZE_SPECIAL_CHARS);
$Comprimento=filter_input(INPUT_POST,'Comprimento',FILTER_SANITIZE_SPECIAL_CHARS);
$Altura=filter_input(INPUT_POST,'Altura',FILTER_SANITIZE_SPECIAL_CHARS);
$Largura=filter_input(INPUT_POST,'Largura',FILTER_SANITIZE_SPECIAL_CHARS);
$MaoPropria=filter_input(INPUT_POST,'MaoPropria',FILTER_SANITIZE_SPECIAL_CHARS);
$ValorDeclarado=filter_input(INPUT_POST,'ValorDeclarado',FILTER_SANITIZE_SPECIAL_CHARS);
$AvisoRecebimento=filter_input(INPUT_POST,'AvisoRecebimento',FILTER_SANITIZE_SPECIAL_CHARS);
$Codigo=filter_input(INPUT_POST,'Codigo',FILTER_SANITIZE_SPECIAL_CHARS);
$Diametro=filter_input(INPUT_POST,'Diametro',FILTER_SANITIZE_SPECIAL_CHARS);
$Correios=new ClassCorreios();
$Correios->pesquisaPrecoPrazo($CepOrigem,$CepDestino,$Peso,$Formato,$Comprimento,$Altura,$Largura,$MaoPropria,$ValorDeclarado,$AvisoRecebimento,$Codigo,$Diametro);
#ClassCorreios
class ClassCorreios{
public $Retorno;
#Pesquisa de preço e prazo de encomendas do correio
public function pesquisaPrecoPrazo($CepOrigem,$CepDestino,$Peso,$Formato,$Comprimento,$Altura,$Largura,$MaoPropria,$ValorDeclarado,$AvisoRecebimento,$Codigo,$Diametro)
{
$Url="http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem={$CepOrigem}&sCepDestino={$CepDestino}&nVlPeso={$Peso}&nCdFormato={$Formato}&nVlComprimento={$Comprimento}&nVlAltura={$Altura}&nVlLargura={$Largura}&sCdMaoPropria={$MaoPropria}&nVlValorDeclarado={$ValorDeclarado}&sCdAvisoRecebimento={$AvisoRecebimento}&nCdServico={$Codigo}&nVlDiametro={$Diametro}&StrRetorno=xml&nIndicaCalculo=3";
$this->Retorno=simplexml_load_string(file_get_contents($Url));
echo "Valor: ".$this->Retorno->cServico->Valor;
echo "<br>";
echo "Prazo: ".$this->Retorno->cServico->PrazoEntrega;
}
}
Para mais detalhes acesse o Manual dos Correios clicando aqui.
Bons estudos :)