Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado.

CSS, Expressões Regulares, HTML, Internet, Javascript, PHP, Sites 33 Comments » Marcelo Korjenioski

Estava pre­ci­sando cal­cu­lar o envio de SEDEX para ven­der alguns pro­du­tos no mer­cado livre e fui pro­cu­rar no Goo­gle se alguem já tinha cri­ado algo para sim­pli­fi­car o cal­culo para agi­li­zar para o usuá­rio.
Entrei um código no fórum http://forum.prestashopbr.com e fiz alguma alte­ra­ções para se encai­xar no que eu pre­ci­sava. Estou com­par­ti­lhando o código.

Exem­plo fun­ci­o­nando.

<?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("<a href="http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico">http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico</a>=" . $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 = '81010210';// 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 = 30;
        // ALTURA: altura do volume em centímetros - somente número de 2 a 60
        $altura = 15;
        // LARGURA: largura do volume em centimetros - somente número de 5 a 60
        $largura = 20;
        $fretes = frete('41106,40010',$cep_origem,$cep_destino,$peso,$comprimento,$altura,$largura);

        foreach ($fretes as $servico => $campos ) {
            $valor = str_replace(",", ".", $campos['Valor']);
            $valor = $valor  + 4.00;
            $valor = number_format($valor,2, ',', '');
            if($servico == '41106') {
                echo " Valor PAC " . $valor  . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
            } elseif ($servico == '40010') {
                echo " Valor SEDEX " . $valor  . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
            }
        }
    }

} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link href="<a href="http://demo.phaneronsoft.com/img/favicon.ico">http://demo.phaneronsoft.com/img/favicon.ico</a>" rel="shortcut icon" type="image/x-icon" />
        <title>Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
        <script src="<a href="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js">http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js</a>" 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="9" 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

?>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

<?php

//script original pego em http://forum.prestashopbr.com/viewtopic.php?f=9&amp;t=322&amp;start=30

#####################################
# Código dos Serviços dos Correios  #
#    FRETE PAC = 41106       #
#    FRETE SEDEX = 40010       #
#    FRETE SEDEX 10 = 40215       #
#    FRETE SEDEX HOJE = 40290    #
#    FRETE E-SEDEX = 81019       #
#    FRETE MALOTE = 44105       #
#    FRETE NORMAL = 41017       #
#   SEDEX A COBRAR = 40045       #
#####################################
if($_POST) {
// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['servico']) {
$cod_servico = $_POST['servico'];
}
// CEP de Origem, em geral o CEP da Loja
$cep_origem = '81010210';
// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário

$cep_destino = $_POST['cep-destino'];

$cep_destino = eregi_replace("([^0-9])","",$cep_destino);

// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
$peso = '0.300';
// URL de Consulta dos Correios
$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&amp;cepOrigem=".$cep_origem."&amp;cepDestino=".$cep_destino."&amp;peso=".$peso."&amp;MaoPropria=N&amp;avisoRecebimento=N&amp;resposta=xml";

// Capta as informações da página dos Correios
$correios_info = file($correios);
// Processa as informações vindas do site dos correios em um Array
foreach($correios_info as $info){
// Busca a informação do Preço da Postagem
if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){
$embalagem = 4.00; // Aqui você  pode colocar o valor da embalagem para envio do produto
$total = $tarifa[1] + $embalagem;
}
}

// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($cod_servico) {
case 41106:
$nome_servico = "Valor do frete via PAC ";
break;
case 40010:
$nome_servico = "Valor do frete via SEDEX ";
break;
}

// Caso venha valor de resposta é numerio e maior que o custo da embalagem senão ocorreu algum erro na solicitação.
if(is_numeric($total) &amp;&amp; ($total > $embalagem)) {
// Quando encontra o valor da postagem, exibe na página formatando em padrão de moeda 10,89
// Caso você não queira formatar basta comentar a linha abaixo que será exibido assim 10.89 e basta executar o comando abaixo
$total = number_format($total,2,',','.');
echo $nome_servico . $total;
} else {
echo 'Erro ao consultar verifique se CEP esta correto';
}
} else {
?>
<html>
<head>
<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(form) {
/*
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
*/
form.request({
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)  {
$('value').innerHTML = transport.responseText;
} else {
form.reset();
$('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;
}

.formMain .select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}

.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}

.formMain label {
display:block;
float:left;
margin-right:4px;
padding-bottom:5px !important;
}

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

.formMain .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:100%;
}

.formMain .inline {
margin:15px 0 0 !important;
}

.formMain .text, .formMain .select, .formMain .textarea, .formMain .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}

.formMain 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;
}
</style>

</head>
<body>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" onsubmit="submitForm(this); return false;">
<fieldset>
<legend>Filtrar Referência</legend>
<label for="servico">
<span>Envio</span>
<select id="servico" name="servico" title="Serviços dos Correios" tabindex="1">
<option value="41106">PAC</option>
<option value="40010">SEDEX</option>
</select>
</label>
<label for="cep-destino">
<span>CEP Destino</span>
<input id="cep-destino" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar">
<input type="submit" id="pesquisar" name="pesquisar" tabindex="3"  value="Pesquisar" />
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
</div>
</body>
</html>
<?php
} // fim else
?>

Diferença entre sites .com e .com.br

Internet, Sites No Comments » Marcelo Korjenioski

Qual a dife­rença entre um domí­nio “.com” e um “.com.br”?

Cada país pos­sui um orgão res­pon­sá­vel pelos regis­tro de domí­nios.
No Bra­sil chama-se Fapesp (www.fapesp.br),
Nos EUA, o órgão res­pon­sá­vel chama-se Inter­nic.
Fapesp e Inter­nic são inde­pen­den­tes, e regis­tram domí­nios com ter­mi­na­ções dife­ren­tes.
Vale lem­brar que o paga­mento das taxas cobra­das para Fapesp ou Inter­nic para o regis­tro e manu­ten­ção de domí­nios são de res­pon­sa­bi­li­dade do pro­pri­e­tá­rio do domí­nio.
fonte: http://www.3dwebstudio.com.br/duvidas/6.htm

Sites .com

Os sites que tem a ter­mi­na­ção do seu nome como .com são conhe­ci­dos como domí­nios gené­ri­cos, ou seja, não estão asso­ci­a­dos a nenhum pais em espe­cí­fico.
Sites .com.br

Os sites que tem a ter­mi­na­ção do seu nome como .com.br são domí­nios regi­o­nais e estão asso­ci­a­dos com o Bra­sil, isto é, foram regis­tra­dos no Bra­sil e são man­ti­dos pelo CGI — Comitê Ges­tor da Inter­net no Brasil.

fonte: http://www.luis.blog.br/

.AERO Indús­trias de trans­porte aéreo
.BIZ Busi­ness, geral­mente esco­lhido para negó­cios
.COM Empre­sas comer­ci­ais
.COOP Coo­pe­ra­ti­vas
.EDU Ins­ti­tui­ções edu­ca­ci­o­nais (esco­las e uni­ver­si­da­des)
.GOV Ins­ti­tui­ções gover­na­men­tais
.INT Ins­ti­tui­ções inter­na­ci­o­nais
.INFO Sites infor­ma­ti­vos ou de divul­ga­ção
.MIL Ins­ta­la­ções mili­ta­res
.MUSEUM Museus
.NAME Para indi­ví­duos
.NET Com­pa­nhias ou orga­ni­za­ções que admi­nis­tram gran­des redes
.ORG Orga­ni­za­ções sem fins lucra­ti­vos e/ou que não se enqua­dram em nenhum dos outros casos
.PRO Con­ta­do­res, advo­ga­dos, físi­cos e outros pro­fis­si­o­nais
.TV Sites vol­ta­dos a assun­tos televisivos

fonte: forum.clubedohardware.com.br/

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Informação sobre tráfego da internet brasileira.

Ferramentas, Internet, Sites No Comments » Marcelo Korjenioski

Infor­ma­ção sobre trá­fego da inter­net brasileira.

PTT METRO

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Site com tecnicas de SEO (Search Engine Optimization) SEOMOZ.ORG

Ferramentas, Internet, Sites No Comments » Marcelo Korjenioski

Site com tec­ni­cas de SEO (Search Engine Opti­mi­za­tion) ou em bom por­tu­guês Oti­mi­za­ção para Meca­nis­mos de Pes­quisa (Goo­gle, Yahoo, Cuil e etc). No seomoz.org existe um Cheat Sheet (folha de cola) cha­mado The web deve­lo­pers seo cheat sheet onde con­tem varias téc­ni­cas de oti­mi­za­ção para sites indi­cando o uso cor­reto das tags HTML e Metatags.

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

FTP Online — http://www.net2ftp.com/

Ferramentas, Internet, Sites No Comments » Marcelo Korjenioski

Ótimo site de ftp online com ele é pos­si­vel edi­tar , remo­ver e adi­ci­o­nar seus arquivos.

Para aces­sar cli­que aqui.

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.