Primeiramente Parabéns por mais essa iniciativa, realmente vai ajudar bastante gente que usa o OC aqui no Brasil...
Bom, não sei se é só comigo, mas o módulo PAC, tanto do Correios, como doi PagSeguro, não estão funcionando... do nada na semana passada está dando erro...
Visto isso, depois de várias googladas (nossa!) achei um código que utiliza uma outra URL do correio para cálculo do PAC e do tempo de entrega... o problema é implantar no OC, pois não manjo muito de PHP, muito menos de orientado a objetos e MVC (acho que o OC é MVC né?).
eu coloquei o código funcionando pra vcs darem uma olhada http://www.bazarnessa.com.br/frete1.php mas não sei implementar, como havia dito...
Acredito que será a solução definitiva para o problema de cálculo de fretes no OC... pois essa URL dificilmente fica off...
Segue abaixo o código, se puderem ajudar... tá grande pra caramba, pois tá com o css junto...
Code: Select all
<?php
if($_POST) {
function frete($cod_servico,$cep_origem,$cep_destino,$peso,$comprimento=0,$altura=0,$largura=0) {
$cep_destino = eregi_replace("([^0-9])","",$cep_destino);
$cep_origem = eregi_replace("([^0-9])","",$cep_origem);
// Crio um objeto para manipular o XML.
$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load("http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico=" . $cod_servico . "&nVlPeso=" . $peso . "&sCepOrigem=" . $cep_origem . "&sCepDestino=" . $cep_destino . "&nCdFormato=1&nVlComprimento=" . $comprimento . "&nVlAltura=" . $altura . "&nVlLargura=" . $largura);
// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('cServico');
// Defino o nome dos elementos filhos no arquivo XML que eu desejo.
$children = array('Valor','PrazoEntrega');
// Faço um loop para pegar todos os elementos pai (root) encontrados.
$valor = array();
for ($i=0; $i < $root->length; $i++) {
// Pega o valor do atributo do elemento pai (root).
$id = $root->item($i)->getElementsByTagName('Codigo')->item(0)->nodeValue;
if($root->item($i)->getElementsByTagName('Erro')->item(0)->nodeValue > 0) {
echo $root->item($i)->getElementsByTagName('MsgErro')->item(0)->nodeValue;
die;
}
// Busca por elementos filhos (child) definidos no array
foreach ($children as $child) {
$valor[$id][$child] = $root->item($i)->getElementsByTagName($child)->item(0)->nodeValue;
}
}
return $valor;
}
// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['cep-destino']) {
//$cod_servico = $_POST['servico'];
$cep_origem = '03633000';// CEP de Origem, em geral o CEP da Loja
$cep_destino = $_REQUEST['cep-destino'];// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário
$peso = '0.300';// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
// COMPRIMENTO: comprimento do volume em centímetros - somente número de 16 a 60
$comprimento = 16;
// LARGURA: largura do volume em centimetros - somente número de 5 a 60
$largura = 11;
// ALTURA: altura do volume em centímetros - somente número de 2 a 60
$altura = 2;
$fretes = frete('41106,40010',$cep_origem,$cep_destino,$peso,$comprimento,$altura,$largura);
foreach ($fretes as $servico => $campos ) {
$valor = str_replace(",", ".", $campos['Valor']);
$valor = $valor;
$valor = number_format($valor,2, ',', '');
if($servico == '41106') {
echo " Valor PAC = R$ " . $valor . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
} elseif ($servico == '40010') {
echo " Valor SEDEX = R$ " . $valor . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
}
}
}
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="<a href="http://demo.phaneronsoft.com/img/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<title>Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function submitForm() {
/*
usa método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
function mostrarLoading(){
$('loading').style.display = 'block';
$('value').innerHTML = ' ';
}
$('form-pesquisa-repasse').request({
onLoading:mostrarLoading,
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/
if(transport.responseText !=-1) {
$('loading').style.display = 'none';
$('value').innerHTML = transport.responseText;
} else {
$('form-pesquisa-repasse').reset();
$('loading').style.display = 'none';
$('value').innerHTML = 'Erro ao consultar';
}
}
});
return false;
}
</script>
<style type="text/css">
* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
}
body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}
div#wrapper {
margin:auto;
position:relative;
width:450px;
z-index:0;
}
.select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}
.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}
label {
display:block;
/*float:left;*/
margin-right:4px;
padding-bottom:5px !important;
}
legend {
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
padding:10px 5px;
}
.button {
background:#F5EED3;
border:1px solid #CCCCCC;
color:#666666;
cursor:pointer;
font-size:12px;
font-weight:bold;
letter-spacing:1px;
margin:10px 0 0;
overflow:visible;
text-transform:uppercase;
width:150px;
}
.formMain .inline {
margin:15px 0 0 !important;
}
.text, .select, .textarea, .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}
fieldset span.nameField {
color:#666666;
text-transform:uppercase;
}
h3 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
}
h3 span {
-x-system-font:none;
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}
#value {
-x-system-font:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}
#rastrear {
padding-top:30px;
}
#loading {
display:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
text-transform:capitalize;
}
</style>
</head>
<body>
<center>
</center>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>
</h3>
<form id="form-pesquisa-repasse" action="" method="post" onsubmit="submitForm(); return false;" class="formMain formSearch wsizep100">
<fieldset>
<legend>Filtrar Referência</legend>
<label class="wsize010" for="cep-destino">
<span class="nameField">CEP Destino</span>
<input id="cep-destino" class="text" type="text" value="" maxlength="8" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar" class="wsize010">
<input type="button" onclick="submitForm(); return false;" value="pesquisar" class="button inline"/>
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
<span id='loading'>Pesquisando...</span>
</div>
</body>
</html>
<?php
} // fim else
?>
Muito obrigado desde já...
Abraços à todos e parabéns mais uma vez
Rodrigo