borsatti 2 Denunciar post Postado Junho 9, 2010 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
JJeJJe 0 Denunciar post Postado Junho 10, 2010 Muito, parabéns. Testando :) Compartilhar este post Link para o post Compartilhar em outros sites
gapaiva44 0 Denunciar post Postado Agosto 24, 2010 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
Maykonn 6 Denunciar post Postado Agosto 26, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Agosto 26, 2010 Ta fora do ar os links de consulta , pelo que eu soube , eles querem resolver isso ateh o final desse mes... vamos ver ne :mellow: Compartilhar este post Link para o post Compartilhar em outros sites
CajuCLC 1 Denunciar post Postado Agosto 27, 2010 Pq nao demitem logo o pessoal de ti dos correios? Esse webservice so vive fora do ar. Compartilhar este post Link para o post Compartilhar em outros sites
gapaiva44 0 Denunciar post Postado Agosto 30, 2010 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
Guilherme_90 33 Denunciar post Postado Novembro 20, 2010 PQP! que f***.. Código muito doido, parabéns. Compartilhar este post Link para o post Compartilhar em outros sites
espanka 0 Denunciar post Postado Abril 2, 2011 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