Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

borsatti

Calculo de Frete com os sites dos correios

Recommended Posts

Bom dia pessoal, então, esses dias estava navegando na internet como sempre e vi que o correios tem um webservice direto com o site deles para fazer calculo de frete. Eu já fiz varios calculos de frete, mas nunca batia com o preço do sites dos correios. Então resolvi fazer direto com o site dos correios, eu finalmente fiquei feliz, por quê fiz, varios testes e Surpresa, todos bateram os preços com os sites dos correios.

E mais, tem Pac,Sedex,Sedex 10,Sedex Hoje,Sedex a Cobrar e etc..

Quer ver funcionando ? Veja Funcionando

 

Faça o download dos arquivos no meu blog tambem

 

Blog Roberto Borsatti

 

Arquivos

 

classe.php

 

<?php
/*
#Variaveis
	NOME DO CAMPO
		O QUE É
		TIPO
		OBRIGATÓRIO ?
		
		
	nCdEmpresa 
		Seu código administrativo junto à ECT. O código está disponível no corpo do contrato firmado com os Correios.
		String
		Não, mas o parâmetro tem que ser passado mesmo vazio.
		
	sDsSenha
		Senha para acesso ao serviço, associada ao seu código administrativo. A senha inicial corresponde aos 8 primeiros dígitos do CNPJ informado no contrato. A qualquer momento, é possível alterar a senha no endereço http://www.corporativo.correios.com.br/encomendas/servicosonline/recuperaSenha.
		String
		Não, mas o parâmetro tem que ser passado mesmo vazio.
		
	nCdServico
		Código do serviço
		String
		Sim.Pode ser mais de um numa consulta separados por vírgula.
	
	sCepOrigem
		CEP de Origem sem hífen.Exemplo: 05311900
		String
		Sim
		
	sCepDestino
		CEP de Destino sem hífen
		String
		Sim
	
	nVlPeso
		Peso da encomenda, incluindo sua embalagem. O peso deve ser informado em quilogramas
		Decimal
		Sim,Se o serviço não exigir as medidas informar zero.
	
	
	nCdFormato
		Formato da encomenda (incluindo embalagem).Valores possíveis: 1 ou 2 (1 – Formato caixa/pacote/2 – Formato rolo/prisma)
		Int
		Sim
		
	nVlComprimento
		Comprimento da encomenda (incluindo embalagem), em centímetros.
		Decimal
		Sim.Se o serviço não exigir medidas informar zero.
		
	nVlAltura
		Altura da encomenda (incluindo embalagem), em centímetros.
		Decimal
		Sim.Se o serviço não exigir medidas informar zero.
		
	nVlLargura
		Largura da encomenda (incluindo embalagem), em centímetros.
		Decimal
		Sim.
		Se o serviço não exigir medidas informar zero.
		
	nVlDiametro
		Diâmetro da encomenda (incluindo embalagem), em centímetros.
		Decimal
		Sim.Se o serviço não exigir medidas informar zero.
		
	sCdMaoPropria
		Indica se a encomenda será entregue com o serviço adicional mão própria.Valores possíveis: S ou N (S – Sim, N – Não)
		String
		Sim
			
	nVlValorDeclarado
		Indica se a encomenda será entregue com o serviço adicional valor declarado. Neste campo deve ser apresentado o valor declarado desejado, em Reais.
		Decimal
		Sim.Se não optar pelo serviço informar zero.
		
	sCdAvisoRecebimento
		Indica se a encomenda será entregue com o serviço adicional aviso de recebimento.Valores possíveis: S ou N (S – Sim, N – Não)
		String
		Sim.Se não optar pelo serviço informar ‘N’
	
	
	

		/*
#CÓDIGOS

	# Sem Contrato
	PAC - 41106
	SEDEX - 40010
	SEDEX A COBRAR - 40045
	SEDEX 10 - 40215
	SEDEX HOJE - 40290
	
	#Com Contrato
	SEDEX - 40096 - 40436 - 40444
	E-Sedex - 81019
	PAC - 41068

*/

class FreteCorreiosByBorsatti {		
		
		var $nCdEmpresa;
		var $sDsSenha;
		var $nCdServico;
		var $sCepOrigem;
		var $sCepDestino;
		var $nVlPeso;
		var $nCdFormato;
		var $nVlComprimento;
		var $nVlAltura ;
		var $nVlLargura;
		var $nVlDiametro;
		var $sCdMaoPropria;
		var $nVlValorDeclarado;
		var $sCdAvisoRecebimento;
		var $strRetorno;
		var $caminhoCorreios;
		var $xml;
		
		function __construct() {
			
			if ($_POST['Formato'] == "") 	 { $_POST['Formato'] = "1"; };
			
			if ($_POST['Comprimento'] == "") { $_POST['Comprimento'] = "0"; };
			
			if ($_POST['Altura'] == "") 	 { $_POST['Altura'] = "0"; };
			
			if ($_POST['Largura'] == "") 	 { $_POST['Largura'] = "0"; };
			
			if ($_POST['sCdAvisoRecebimento'] == "") 	 { $_POST['sCdAvisoRecebimento'] = "N"; };
			
			if ($_POST['MaoPropria'] == "") 	 { $_POST['MaoPropria'] = "N"; };
			
			if ($_POST['Diametro'] == "") 	 { $_POST['Diametro'] = "0"; };
			
			$this->caminhoWSCorreios 	 = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx";
			
			$this->nCdServico 	 	 = $_POST['servico'];
			
			$this->sCepOrigem  		 = $_POST['cepOrigem'];
			
			$this->sCepDestino 		 = $_POST['cepDestino'];
			
			$this->nVlPeso     		 = $_POST['peso'];
			
			$this->nCdFormato  		 = $_POST['Formato']; #1 – Formato caixa/pacote / 2 – Formato rolo/prisma
			
			$this->nVlComprimento 	 = $_POST['Comprimento'];
			
			$this->nVlAltura   		 = $_POST['Altura'];
			
			$this->nVlLargura  		 = $_POST['Largura'];
			
			$this->nVlDiametro 		 = $_POST['Diametro'];
			
			$this->sCdMaoPropria  	 = $_POST['MaoPropria']; # S OU N
			
			$this->nVlValorDeclarado	 = $_POST['valorDeclarado'];
			
			$this->sCdAvisoRecebimento = $_POST['sCdAvisoRecebimento']; #S OU N
			
			$this->strRetorno 		 = "xml"; #XML / Popup / URL -> sua url
		}
		
		function geraURL(){
			
			$this->caminhoCorreios = $this->caminhoWSCorreios."?nCdEmpresa=".$this->nCdEmpresa."&sDsSenha =".$this->sDsSenha ."&sCepOrigem=".$this->sCepOrigem."&sCepDestino=".$this->sCepDestino."&nVlPeso=".$this->nVlPeso."&nCdFormato=".$this->nCdFormato."&nVlComprimento=".$this->nVlComprimento."&nVlAltura=".$this->nVlAltura."&nVlLargura=".$this->nVlLargura."&sCdMaoPropria=".$this->sCdMaoPropria."&nVlValorDeclarado=".$this->nVlValorDeclarado."&sCdAvisoRecebimento=".$this->sCdAvisoRecebimento."&nCdServico=".$this->nCdServico."&nVlDiametro=".$this->nVlDiametro."&StrRetorno=".$this->strRetorno;
			
			return $this->caminhoCorreios;
		}
		
		function retornaValor($campo) {
			
			$this->geraURL();
			
			//Codigo,Valor,PrazoEntrega,ValorMaoPropria,ValorAvisoRecebimento
			//ValorValorDeclarado,EntregaDomiciliar,Entrega Sabado,Erro,MsgErro
					
			$this->xml = simplexml_load_file($this->caminhoCorreios);

			$this->xml = $this->xml->cServico;

			return $this->xml->$campo;
			
		}
				
	}

	
/*
Código de erro
Mensagem de erro
0
Processamento com sucesso
-1
Código de serviço inválido
-2
CEP de origem inválido
-3
CEP de destino inválido
-4
Peso excedido
-5
O Valor Declarado não deve exceder R$ 10.000,00
-6
Serviço indisponível para o trecho informado
-7
O Valor Declarado é obrigatório para este serviço
-8
Este serviço não aceita Mão Própria
-9
Este serviço não aceita Aviso de Recebimento
-10
Precificação indisponível para o trecho informado
-11
Para definição do preço deverão ser informados, também, o comprimento, a largura e altura do objeto em centímetros (cm).
-12
Comprimento inválido.
-13
Largura inválida.
-14
Altura inválida.
-15
O comprimento não pode ser maior que 60 cm.
-16
A largura não pode ser maior que 60 cm.
-17
A altura não pode ser maior que 60 cm.
-18
A altura não pode ser inferior a 2 cm.
-19
A altura não pode ser maior que o comprimento.
-20
A largura não pode ser inferior a 5 cm.
-21
A largura não pode ser menor que 11cm, quando o comprimento for menor que 25cm.
-22
O comprimento não pode ser inferior a 16 cm.
-23
A soma resultante do comprimento + largura + altura não deve superar a 150 cm.
-24
Comprimento inválido.
-25
Diâmetro inválido
-26
Informe o comprimento.
-27
Informe o diâmetro.
-28
O comprimento não pode ser maior que 90 cm.
-29
O diâmetro não pode ser maior que 90 cm.
-30
O comprimento não pode ser inferior a 18 cm.
-31
O diâmetro não pode ser inferior a 5 cm.
-32
A soma resultante do comprimento + o dobro do diâmetro não deve superar a 104 cm.
-33
Sistema temporariamente fora do ar. Favor tentar mais tarde.
-34
Código Administrativo ou Senha inválidos.
-35
Senha incorreta.
EMPRESA BRASILEIRA DE CORREIOS E TELÉGRAFOS – ECT
Manual de Implementação de Cálculo Remoto de Preços e Prazos de Encomendas
12/15
Manual de Implementacao do Calculo Remoto de Precos e Prazos_versao_1.1.doc – Versão: 1.1
-36
Cliente não possui contrato vigente com os Correios.
-37
Cliente não possui serviço ativo em seu contrato.
-38
Serviço indisponível para este código administrativo.
-888
Erro ao calcular a tarifa
7
Serviço indisponível, tente mais tarde
99
Outros erros diversos do .Net
*/


?>

calculo.php

<!--
'-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
' Frete com Integração nos Correios
' Versão: 1.0
' Arquivo: calculo.php
' Função: Calculo de frete junto aos Correios, retorno por string
' Autor : Roberto Borsatti
'-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-->
<?
ini_set(allow_url_fopen,1);
	include("classe.php");
	


?>
<html>
	<head>
		<title>Calculo de Frete by Roberto Borsatti</title>
		<script src="functions.js" type="text/javascript"></script>
	</head>
	
	<body>
	


<form name="form1" action="" method="POST" onsubmit="return Valida(this)">

	<table>
	
		<tr>
			<td>Escolha a forma de envio :</td>
			<td>
				<select name="servico" onchange="if (this.value == '41106') { abre('inputF');abrePac('1'); } else { fecha('inputF');fechaPac();};if(this.value == '40045') { retirarSedexCobrar(); } else { voltarCamposSedexCobrar(); }">
					<option value="40010">SEDEX</option>
					<option value="41106">PAC</option>
					<option value="40045">SEDEX A COBRAR</option>
					<option value="40215">SEDEX 10</option>
					<option value="40290">SEDEX HOJE</option>	
				</select>
			</td>
		</tr>
		
		<tr id="">
			<td>Formato :</td>
			<td>
				<select name="Formato" id="inputF" disabled="true" onchange="abrePac(this.value)">
					<option value="1">Caixa/Pacote</option>
					<option value="2">Rolo/Prisma</option>
				</select>
			</td>
		</tr>
		
		<tr id="">
			<td>Comprimento :</td>
			<td><input type="text" name="Comprimento" id="inputC" disabled="true" value="0"></td>
		</tr>
		
		<tr id="">
			<td>Largura :</td>
			<td><input type="text" name="Largura" id="inputL" disabled="true" value="0"></td>
		</tr>
		
		<tr id="">
			<td>Altura :</td>
			<td><input type="text" name="Altura" id="inputA" disabled="true" value="0"></td>
		</tr>
		
		<tr id="">
			<td>Diâmetro :</td>
			<td><input type="text" name="Diametro" id="inputD" disabled="true" value="0"></td>
		</tr>
		
		<tr>
			<td>Cep de Origem :</td>
			<td><input type="text" name="cepOrigem" value="57020050"></td>
		</tr>
		
		<tr>
			<td>Cep de Destino :</td>
			<td><input type="text" name="cepDestino" value="69301410"></td>
		</tr>
		
		<tr>
			<td>Peso (kg) :</td>
			<td><input type="text" name="peso" id="peso"></td>
		</tr>
		
		<tr>
			<td>Entrega em Mãos Próprias?</td>
			<td>
			<select name="MaoPropria" id="MaoPropria">
				<option value="S">Sim</option>
				<option value="N">Não</option>
			
			</select>
			</td>
		</tr>
		
		<tr>
			<td>Valor Declarado :</td>
			<td><input type="text" name="valorDeclarado" id="valorDeclarado"></td>
		</tr>
		
		<tr>
			<td>Aviso de Recebimento?</td>
			<td>
			<select name="sCdAvisoRecebimento" id="sCdAvisoRecebimento">
				<option value="S">Sim</option>
				<option value="N">Não</option>
			
			</select>
			</td>
		</tr>
		
		
		<tr>
			<td></td>
			<td>
			<input type="submit">
			</td>
		</tr>
	
	</table>



</form>

	</body>
</html>
	 
<?php

if ($_POST) {
	
	$frete = new FreteCorreiosByBorsatti();
	
	if ($frete->retornaValor("Erro") == "0") {
		
		echo "Valor do Frete : ".$frete->retornaValor("Valor");
		
		echo "<br> Prazo de Entrega : ".$frete->retornaValor('PrazoEntrega') ." Dias Úteis";
		
	} else {
		
		foreach ($frete->retornaValor("MsgErro") as $key => $value) {
			
			echo "Erro -> ".$value ."<br>";
			
		}
		
	}
}

?>	

functions.js

function abre(id){
	document.getElementById(id).disabled=false;
}

function fecha(id){
	document.getElementById(id).disabled=true;
}

function retirarSedexCobrar() {
	fecha('sCdAvisoRecebimento');
	fecha('MaoPropria');
}

function voltarCamposSedexCobrar() {
	abre('sCdAvisoRecebimento');
	abre('MaoPropria');
}

function abrePac(valor) {
	if (valor == "1") {
		abre('inputC');
		abre('inputL');
		abre('inputA');
		fecha('inputD');
	} else {
		fecha('inputL');
		fecha('inputA');
		abre('inputC');
		abre('inputD');
	}
}

function fechaPac() {
	fecha('inputC');
	fecha('inputL');
	fecha('inputA');
	fecha('inputD');
}

function Valida(form){
	if(form.servico.value == ''){
		alert('Selecione o tipo de serviço desejado');
		form.servico.focus();
		return false;
	}
	if(form.cepOrigem.value == '' || form.cepDestino.value == ''){
		alert('Informe o CEP de Origem e de Destino');
		form.cepOrigem.focus();
		return false;
	}
	if(form.cepOrigem.value != ''){
		if(!validarCep(form.cepOrigem.value)){
			alert('Cep de Origem Inválido!');
			form.cepOrigem.focus();
			return false;
		}
	}
	if(form.cepDestino.value != ''){
		if(!validarCep(form.cepDestino.value)){
			alert('Cep de Destino Inválido!');
			form.cepOrigem.focus();
			return false;
		}		
	}
	
	if(form.valorDeclarado.value == ''){
		
			alert('Qual o valor declarado?!');
			form.valorDeclarado.focus();
			return false;
		
	}
	
	if(form.peso.value != ''){		
		// SEDEX A COBRAR
		if(form.servico.value=="40045")
		{
			if(form.valorDeclarado.value == '')
			{
				alert('O Valor Declarado é obrigatório para o serviço SEDEX A COBRAR');
				form.valorDeclarado.focus();
				return false;
			}
			
		}
		
		//Serviço PAC
		if(form.servico.value=="41106"){
			if(form.Formato.value == '1'){
				return validarCaixa(form);
			}
			if(form.Formato.value == '2'){
				if(validarPrisma(form)==false){
					return false;
				}
				form.Largura.value = form.Diametro.value;
				form.Altura.value = form.Diametro.value;
			}
		}
		
		if(form.valorDeclarado.value != '')
		{
			var vd = form.valorDeclarado.value;
			vd = vd.replace(".","");
			vd = vd.replace(",",".");
			if(isNaN(vd))
			{
				alert('Valor Declarado inválido');
				return false;
			}
			else
			{
				if(vd > 10000)
				{
					alert('O valor declarado não deve ultrapassar R$ 10.000,00');
					return false;
				}
			}
		}
	}else{
		if((form.MaoPropria.value=="S" || form.valorDeclarado.value!="" || form.avisoRecebimento.value=="S") && form.peso.value==""){
			alert('Infome o peso para o cálculo de preços da sua encomenda.');
			return false;	
		}	
	}	
}



function ValidarFormato(form){
	if(form.Formato.value=="1"){
		form.Largura.disabled=false;
		form.Altura.disabled=false;
		form.Diametro.value="";
		form.Diametro.disabled=true;
		document.all.spanDiametro.style.display="none";
		document.all.spanLargura.style.display="";	
		return false;
	}
	
	if(form.Formato.value=="2"){
		form.Largura.value="";
		form.Altura.value="";
		form.Largura.disabled=true;
		form.Altura.disabled=true;
		form.Diametro.disabled=false;
		document.all.spanDiametro.style.display="";
		document.all.spanLargura.style.display="none";	
		return false;
	}
}


function validarCaixa(form){
	if(trim(form.Comprimento.value)=="" || trim(form.Largura.value)=="" || trim(form.Altura.value)=="" ){ 
		alert("Para definição do preço do PAC deverão ser informados, também, o comprimento, a largura e altura do objeto em centímetros (cm).");
		form.Comprimento.focus();
		return false;		
	}
	
	if(trim(form.Comprimento.value)!=""){ 
		var vd = form.Comprimento.value;
	
		vd = vd.replace(".","");
		vd = vd.replace(",",".");
	
		if(isNaN(vd)){
			alert("Comprimento inválido.");
			form.Comprimento.focus();
			return false;
		}
	
		var fComprimento = parseFloat(vd);
	}
	
	
	if(trim(form.Largura.value)!=""){
		var vd = form.Largura.value;
	
		vd = vd.replace(".","");
		vd = vd.replace(",",".");
	
		if(isNaN(vd)){
			alert("Largura inválida.");
			form.Largura.focus();
			return false;
		}
		
		var fLargura = parseFloat(vd);
	}
	
	
	if(trim(form.Altura.value)!=""){
	
		var vd = form.Altura.value;
	
		vd = vd.replace(".","");
		vd = vd.replace(",",".");
	
		if(isNaN(vd)){
			alert("Altura inválida.");
			form.Altura.focus();
			return false;
		}
		
		var fAltura = parseFloat(vd);
	}
	
	if(fComprimento > 60){
		alert("O comprimento não pode ser maior que 60 cm.");
		form.Comprimento.focus();
		return false;
	}

	if(fLargura > 60){
		alert("A largura não pode ser maior que 60 cm.");
		form.Largura.focus();
		return false;
	}

	if(fAltura > 60){
		alert("A altura não pode ser maior que 60 cm.");
		form.Altura.focus();
		return false;
	}

	if(fAltura < 2){
		alert("A altura não pode ser inferior a 2 cm.");
		form.Altura.focus();
		return false;
	}
	if(fAltura > fComprimento){
		alert("A altura não pode ser maior que o comprimento");
		form.Altura.focus();
		return false;
	}

	if(fLargura < 5){
		alert("A largura não pode ser inferior a 5 cm.");
		form.Largura.focus();
		return false;
	} 

	if(fLargura < 11){
		if(fComprimento < 25){
			alert("A largura não pode ser menor que 11cm, quando o comprimento for menor que 25cm");
			//alert("O comprimento não pode ser inferior a 25 cm quando a altura for maior ou igual a 5 cm e menor que 11 cm. Para altura a partir de 11 cm o comprimento mínimo é 16 cm.");
			form.Comprimento.focus();
			return false;
		}
	}

	if(fComprimento < 16){
		alert("O comprimento não pode ser inferior a 16 cm.");
		form.Comprimento.focus();
		return false;
	}


	if((fComprimento + fLargura + fAltura) > 150){
		alert("A soma resultante do comprimento + largura + altura não deve superar a 150 cm.");
		form.Comprimento.focus();
		return false;
	}
	
	return true;
}

function validarPrisma(form){
	var iCtd = 0;
	
	if(trim(form.Comprimento.value)=="" || trim(form.Diametro.value)=="")
	{ 
		alert("Para definição do preço do PAC deverão ser informados, também, o comprimento, e o diâmetro do objeto em centímetros (cm).");
		form.Comprimento.focus();
		return false;		
	}

	
	if(trim(form.Comprimento.value)!==""){
		var vd = form.Comprimento.value;
	
		vd = vd.replace(".","");
		vd = vd.replace(",",".");
	
		if(isNaN(vd)){
			alert("Comprimento inválido.");
			form.Comprimento.focus();
			return false;
		}
		
		var fComprimento = parseFloat(vd);
		
		iCtd = iCtd + 1;
	}
	
	if(trim(form.Diametro.value)!==""){
		var vd = form.Diametro.value;
	
		vd = vd.replace(".","");
		vd = vd.replace(",",".");
	
		if(isNaN(vd)){
			alert("Diâmetro inválido.");
			form.Diametro.focus();
			return false;
		}
		
		var fDiametro = parseFloat(vd);
		
		iCtd = iCtd + 1;
	}
	
	if(iCtd > 0 && iCtd < 2){ 
		if(trim(form.Comprimento.value)==""){ 
			alert("Informe o comprimento.");
			form.Comprimento.focus();
			return false;
		}
		
		if(trim(form.Diametro.value)==""){ 
			alert("Informe o diâmetro.");
			form.Diametro.focus();
			return false;
		}
	}

	
	if(iCtd==2){
	
		if((fComprimento + fDiametro) > 0){
			if(fComprimento > 90){
				alert("O comprimento não pode ser maior que 90 cm.");
				form.Comprimento.focus();
				return false;
			}
	
			if(fDiametro > 90){
				alert("O diâmetro não pode ser maior que 90 cm.");
				form.Diametro.focus();
				return false;
			}
		}
		
		if(fComprimento < 18){
			alert("O comprimento não pode ser inferior a 18 cm.");
			form.Diametro.focus();
			return false;
		}

		if(fDiametro < 5){
			alert("O diâmetro não pode ser inferior a 5 cm.");
			form.Comprimento.focus();
			return false;
		}

		if((fComprimento + 2 * fDiametro) > 104){
			alert("A soma resultante do comprimento + o dobro do diâmetro não deve superar a 104 cm.");
			form.Comprimento.focus();
			return false;
		}
	}
	
	return true;
}

function validarCep(cep)
{
	txCep = trim(cep);
	if(txCep.length == 0)
		return false;

	txCep = txCep.replace("-","");
	txCep = txCep.replace(".","");
	if(txCep.length != 8 || isNaN(txCep))
		return false;
	else
		return true;
}

function trim(valorTrim){
	var len = valorTrim.length;
	for(var x=0; x<len; x++) if(valorTrim.charCodeAt(x)!=32 && valorTrim.charCodeAt(x)!=10 && valorTrim.charCodeAt(x)!=13) break;
	valorTrim = valorTrim.substring(x,len);
	len = valorTrim.length;
	for(x=len-1; x>1; x--) if(valorTrim.charCodeAt(x)!=32 && valorTrim.charCodeAt(x)!=10 && valorTrim.charCodeAt(x)!=13) break;
	valorTrim = valorTrim.substring(0,x+1);
	return valorTrim;
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo Otimo seu script, mais não sei se sabe os correios trocaram a URL segue abaixo sua classe atualizada ok.

 

<?php 
/* 

'-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# 
' Frete com Integração nos Correios 
' Versão: 1.0 
' Arquivo: calculo.php 
' Função: Calculo de frete junto aos Correios, retorno por string 
' Autor : Roberto Borsatti 
' Atualização de URL : Gabriel A. Paiva
'-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# 


#Variaveis 
        NOME DO CAMPO 
                O QUE É 
                TIPO 
                OBRIGATÓRIO ? 
                 
                 
        nCdEmpresa  
                Seu código administrativo junto à ECT. O código está disponível no corpo do contrato firmado com os Correios. 
                String 
                Não, mas o parâmetro tem que ser passado mesmo vazio. 
                 
        sDsSenha 
                Senha para acesso ao serviço, associada ao seu código administrativo. A senha inicial corresponde aos 8 primeiros dígitos do CNPJ informado no contrato. A qualquer momento, é possível alterar a senha no endereço http://www.corporativo.correios.com.br/encomendas/servicosonline/recuperaSenha. 
                String 
                Não, mas o parâmetro tem que ser passado mesmo vazio. 
                 
        nCdServico 
                Código do serviço 
                String 
                Sim.Pode ser mais de um numa consulta separados por vírgula. 
         
        sCepOrigem 
                CEP de Origem sem hífen.Exemplo: 05311900 
                String 
                Sim 
                 
        sCepDestino 
                CEP de Destino sem hífen 
                String 
                Sim 
         
        nVlPeso 
                Peso da encomenda, incluindo sua embalagem. O peso deve ser informado em quilogramas 
                Decimal 
                Sim,Se o serviço não exigir as medidas informar zero. 
         
         
        nCdFormato 
                Formato da encomenda (incluindo embalagem).Valores possíveis: 1 ou 2 (1 – Formato caixa/pacote/2 – Formato rolo/prisma) 
                Int 
                Sim 
                 
        nVlComprimento 
                Comprimento da encomenda (incluindo embalagem), em centímetros. 
                Decimal 
                Sim.Se o serviço não exigir medidas informar zero. 
                 
        nVlAltura 
                Altura da encomenda (incluindo embalagem), em centímetros. 
                Decimal 
                Sim.Se o serviço não exigir medidas informar zero. 
                 
        nVlLargura 
                Largura da encomenda (incluindo embalagem), em centímetros. 
                Decimal 
                Sim. 
                Se o serviço não exigir medidas informar zero. 
                 
        nVlDiametro 
                Diâmetro da encomenda (incluindo embalagem), em centímetros. 
                Decimal 
                Sim.Se o serviço não exigir medidas informar zero. 
                 
        sCdMaoPropria 
                Indica se a encomenda será entregue com o serviço adicional mão própria.Valores possíveis: S ou N (S – Sim, N – Não) 
                String 
                Sim 
                         
        nVlValorDeclarado 
                Indica se a encomenda será entregue com o serviço adicional valor declarado. Neste campo deve ser apresentado o valor declarado desejado, em Reais. 
                Decimal 
                Sim.Se não optar pelo serviço informar zero. 
                 
        sCdAvisoRecebimento 
                Indica se a encomenda será entregue com o serviço adicional aviso de recebimento.Valores possíveis: S ou N (S – Sim, N – Não) 
                String 
                Sim.Se não optar pelo serviço informar ‘N’ 
         
         
         
 
                /* 
#CÓDIGOS 
 
        # Sem Contrato 
        PAC - 41106 
        SEDEX - 40010 
        SEDEX A COBRAR - 40045 
        SEDEX 10 - 40215 
        SEDEX HOJE - 40290 
         
        #Com Contrato 
        SEDEX - 40096 - 40436 - 40444 
        E-Sedex - 81019 
        PAC - 41068 
 
*/ 
 
class FreteCorreiosByBorsatti {          
                 
                var $nCdEmpresa; 
                var $sDsSenha; 
                var $nCdServico; 
                var $sCepOrigem; 
                var $sCepDestino; 
                var $nVlPeso; 
                var $nCdFormato; 
                var $nVlComprimento; 
                var $nVlAltura ; 
                var $nVlLargura; 
                var $nVlDiametro; 
                var $sCdMaoPropria; 
                var $nVlValorDeclarado; 
                var $sCdAvisoRecebimento; 
                var $strRetorno; 
                var $caminhoCorreios; 
                var $xml; 
                 
                function __construct() { 
                         
                        if ($_POST['Formato'] == "")     { $_POST['Formato'] = "1"; }; 
                         
                        if ($_POST['Comprimento'] == "") { $_POST['Comprimento'] = "0"; }; 
                         
                        if ($_POST['Altura'] == "")      { $_POST['Altura'] = "0"; }; 
                         
                        if ($_POST['Largura'] == "")     { $_POST['Largura'] = "0"; }; 
                         
                        if ($_POST['sCdAvisoRecebimento'] == "")         { $_POST['sCdAvisoRecebimento'] = "N"; }; 
                         
                        if ($_POST['MaoPropria'] == "")          { $_POST['MaoPropria'] = "N"; }; 
                         
                        if ($_POST['Diametro'] == "")    { $_POST['Diametro'] = "0"; }; 
                         
                        $this->caminhoWSCorreios         = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx"; 
                         
                        $this->nCdServico                = $_POST['servico']; 
                         
                        $this->sCepOrigem                = $_POST['cepOrigem']; 
                         
                        $this->sCepDestino               = $_POST['cepDestino']; 
                         
                        $this->nVlPeso                   = $_POST['peso']; 
                         
                        $this->nCdFormato                = $_POST['Formato']; #1 – Formato caixa/pacote / 2 – Formato rolo/prisma 
                         
                        $this->nVlComprimento    = $_POST['Comprimento']; 
                         
                        $this->nVlAltura                 = $_POST['Altura']; 
                         
                        $this->nVlLargura                = $_POST['Largura']; 
                         
                        $this->nVlDiametro               = $_POST['Diametro']; 
                         
                        $this->sCdMaoPropria     = $_POST['MaoPropria']; # S OU N 
                         
                        $this->nVlValorDeclarado         = $_POST['valorDeclarado']; 
                         
                        $this->sCdAvisoRecebimento = $_POST['sCdAvisoRecebimento']; #S OU N 
                         
                        $this->strRetorno                = "xml"; #XML / Popup / URL -> sua url 
                } 
                 
                function geraURL(){ 
                         
                        $this->caminhoCorreios = $this->caminhoWSCorreios."?nCdEmpresa=".$this->nCdEmpresa."&sDsSenha =".$this->sDsSenha ."&sCepOrigem=".$this->sCepOrigem."&sCepDestino=".$this->sCepDestino."&nVlPeso=".$this->nVlPeso."&nCdFormato=".$this->nCdFormato."&nVlComprimento=".$this->nVlComprimento."&nVlAltura=".$this->nVlAltura."&nVlLargura=".$this->nVlLargura."&sCdMaoPropria=".$this->sCdMaoPropria."&nVlValorDeclarado=".$this->nVlValorDeclarado."&sCdAvisoRecebimento=".$this->sCdAvisoRecebimento."&nCdServico=".$this->nCdServico."&nVlDiametro=".$this->nVlDiametro."&StrRetorno=".$this->strRetorno; 
                         
                        return $this->caminhoCorreios; 
                } 
                 
                function retornaValor($campo) { 
                         
                        $this->geraURL(); 
                         
                        //Codigo,Valor,PrazoEntrega,ValorMaoPropria,ValorAvisoRecebimento 
                        //ValorValorDeclarado,EntregaDomiciliar,Entrega Sabado,Erro,MsgErro 
                                         
                        $this->xml = simplexml_load_file($this->caminhoCorreios); 
 
                        $this->xml = $this->xml->cServico; 
 
                        return $this->xml->$campo; 
                         
                } 
                                 
        } 
 
         
/* 
Código de erro 
Mensagem de erro 
0 
Processamento com sucesso 
-1 
Código de serviço inválido 
-2 
CEP de origem inválido 
-3 
CEP de destino inválido 
-4 
Peso excedido 
-5 
O Valor Declarado não deve exceder R$ 10.000,00 
-6 
Serviço indisponível para o trecho informado 
-7 
O Valor Declarado é obrigatório para este serviço 
-8 
Este serviço não aceita Mão Própria 
-9 
Este serviço não aceita Aviso de Recebimento 
-10 
Precificação indisponível para o trecho informado 
-11 
Para definição do preço deverão ser informados, também, o comprimento, a largura e altura do objeto em centímetros (cm). 
-12 
Comprimento inválido. 
-13 
Largura inválida. 
-14 
Altura inválida. 
-15 
O comprimento não pode ser maior que 60 cm. 
-16 
A largura não pode ser maior que 60 cm. 
-17 
A altura não pode ser maior que 60 cm. 
-18 
A altura não pode ser inferior a 2 cm. 
-19 
A altura não pode ser maior que o comprimento. 
-20 
A largura não pode ser inferior a 5 cm. 
-21 
A largura não pode ser menor que 11cm, quando o comprimento for menor que 25cm. 
-22 
O comprimento não pode ser inferior a 16 cm. 
-23 
A soma resultante do comprimento + largura + altura não deve superar a 150 cm. 
-24 
Comprimento inválido. 
-25 
Diâmetro inválido 
-26 
Informe o comprimento. 
-27 
Informe o diâmetro. 
-28 
O comprimento não pode ser maior que 90 cm. 
-29 
O diâmetro não pode ser maior que 90 cm. 
-30 
O comprimento não pode ser inferior a 18 cm. 
-31 
O diâmetro não pode ser inferior a 5 cm. 
-32 
A soma resultante do comprimento + o dobro do diâmetro não deve superar a 104 cm. 
-33 
Sistema temporariamente fora do ar. Favor tentar mais tarde. 
-34 
Código Administrativo ou Senha inválidos. 
-35 
Senha incorreta. 
EMPRESA BRASILEIRA DE CORREIOS E TELÉGRAFOS – ECT 
Manual de Implementação de Cálculo Remoto de Preços e Prazos de Encomendas 
12/15 
Manual de Implementacao do Calculo Remoto de Precos e Prazos_versao_1.1.doc – Versão: 1.1 
-36 
Cliente não possui contrato vigente com os Correios. 
-37 
Cliente não possui serviço ativo em seu contrato. 
-38 
Serviço indisponível para este código administrativo. 
-888 
Erro ao calcular a tarifa 
7 
Serviço indisponível, tente mais tarde 
99 
Outros erros diversos do .Net 
*/ 
 
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que o Correios mudou a forma de integração novamente.

Verifiquem testando suas URLs de conexões.

 

Neste momento até o site correios.com.br encontra-se indisponível.

Retorna um página personalizada deles para Página não Encontrada.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta bravo mesmo o script estava funcionando corretamente e ja esta com pau novamente !!! ETA CORREIOS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

PQP! que f***..

Código muito doido, parabéns.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae cara beleza, rapaz baixei o script mais nao esta funcionando, e no exemplo online q no link aqui do site e no seu blog, esta funcionando corretamente, mais o script baixado ta dano erros em umonte de coisas.

 

valew ate mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.