Evandro Oliveira 331 Denunciar post Postado Março 3, 2010 os formatos de saída são claros, nenhum dos dois vai te retornar o endereço. se forem informados os serviços de mão-própria e aviso de recebimento, os valores serão informados nos respectivos nós XML como eu disse, para processar melhor as informações, leia o arquivo de retorno com a biblioteca simpleXML EDIT vamos voltar láaaaa no começo??? Você abriu o tópico dizendo que tinha 3 dúvidas. numerou a primeira como sendo o código, pra mim isso não é uma dúvida... está bem formado só está utilizando as funções erradas perguntou na segunda, o que fazer caso o site dos correios esteja offline if(!$dados_correios = simplexml_load_file($correios)) echo "O site dos correios está offline. Como não é possível calcular o frete, sua encomenda será enviada com o <b>frete grátis!</b>"; claro que isto é apenas uma sugestão ^^ na terceira, perguntou sobre as dimensões da embalagem. informe as medidas mínimas, apenas para cálculos, a menos que vá comprar a embalagem na agência - interfere no custo total, pois cada caixote tem um preço. No post #2, quis saber como manipular erros vindos de consultas inválidas, por exemplo CEP inexistentes informados. Trabalhando com a simpleXML, verifique assim: $erros = $dados_correios->xpath('erro'); if($erros[0] > 0) { $msg = $dados_correios->xpath('msgErro'); echo $msg[0]; } o uso de XPath, responde todas as suas dúvidas até o post #8 no post #9 pediu comentou sobre pegar o valor de CidadeOrigem e CidadeDestino desconheço os campos. Em nenhuma das duas URL foi exibido. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Ok, entendi. Experimentei assim e não imprimi nada. Onde esta o erro? $correios = "..................."; $xml = simplexml_load_file($correios); foreach($xml->Item as $campo) { $Valor = $campo->Valor; $Erro = $campo->Erro; print "o Valor é: " . $Valor; print "O erro é: " . $Erro; } e tb assim não imprime nada $dados_correios = simplexml_load_file($correios); $erros = $dados_correios->xpath('erro'); if($erros[0] > 0) { $msg = $dados_correios->xpath('msgErro'); echo $msg[0]; } To quase chegando lá hein! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 3, 2010 dois erros meus: 1 - o caminho, troque 'erro' por 'cServico/Erro'. atente para maiúsculas e minúsculas 2 - os erros conhecidos, são dados por valores negativos, na condicional colocamos apenas maiores que 0. Troque > 0 por != 0 uma dica <?php $xmlData = <<<XML <Servicos> <cServico> <Codigo> 41106 </Codigo> <Valor> 0,00 </Valor> <PrazoEntrega> 0 </PrazoEntrega> <ValorMaoPropria> 0,00 </ValorMaoPropria> <ValorAvisoRecebimento> 0,00 </ValorAvisoRecebimento> <ValorValorDeclarado> 0,00 </ValorValorDeclarado> <EntregaDomiciliar/> <EntregaSabado/> <Erro> -18 </Erro> <MsgErro> A altura nao pode ser inferior a 2 cm. </MsgErro> </cServico> </Servicos> XML; $myXML = simplexml_load_string($xmlData); $erro = $myXML->xpath('cServico/Erro'); echo $erro[0]; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Assim? $dados_correios = simplexml_load_file($correios); $erros = $dados_correios->xpath('cServico/Erro'); if($erros[0] != 0) { $msg = $dados_correios->xpath('MsgErro'); echo $msg[0]; } Tabem não imprime nada! Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Rapaz, tentei assim: <?php $correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=36855000&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=S&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nCdServico=40010&nVlDiametro=0&StrRetorno=xml"; $xml = simplexml_load_file($correios); // print_r($xml); $Valor = $xml->Valor; print_r($Valor); ?> Retornou o seguinte: SimpleXMLElement Object ( ) Mas o valor não rertorna. Caso eu cole a url no browsere, o browser mostra o retorno do xml certinho com os valores. Onde esta o erro? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 3, 2010 Assim? $dados_correios = simplexml_load_file($correios); $erros = $dados_correios->xpath('cServico/Erro'); if($erros[0] != 0) { $msg = $dados_correios->xpath('MsgErro'); echo $msg[0]; } Tabem não imprime nada! se não tiver erro, não imprime nada mesmo ;) na hora de montar a variável $correios, experimente deixar algum valor em branco, ou como 0. aí sim vamos testar Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Cara, deixei o cep de origem em branco e retornou em branco de novo. vê ai: <?php $correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=S&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nCdServico=40010&nVlDiametro=0&StrRetorno=xml"; $dados_correios = simplexml_load_file($correios); $erros = $dados_correios->xpath('cServico/Erro'); if($erros[0] != 0) { $msg = $dados_correios->xpath('MsgErro'); echo $msg[0]; } ?> Cria um arquivo php só para esse codigo e testa ai fazendo um favor. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 3, 2010 Cara, deixei o cep de origem em branco e retornou em branco de novo. vê ai: <?php $correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=S&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nCdServico=40010&nVlDiametro=0&StrRetorno=xml"; $dados_correios = simplexml_load_file($correios); $erros = $dados_correios->xpath('cServico/Erro'); if($erros[0] != 0) { $msg = $dados_correios->xpath('MsgErro'); echo $msg[0]; } ?> Cria um arquivo php só para esse codigo e testa ai fazendo um favor. aqui deu assim: <?php $correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=S&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nCdServico=40010&nVlDiametro=0&StrRetorno=xml"; $dados_correios = simplexml_load_file($correios); $erro = $dados_correios->cServico[0]->Erro; echo $erro[0]; ?> ele imprime na tela o valor de $erro[0]. agora podemos fazer a checagem, se ele é ou não igual a 0 if($erro[0] != 0) die('um erro ocorreu!'); // aqui o restante do código Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Assim deu <?php $correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=36885000&sCepDestino=36880000&nVlPeso=2&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=S&nCdServico=40010&nVlDiametro=0&StrRetorno=xml"; $dados_correios = simplexml_load_file($correios); $valor = $dados_correios->xpath('cServico/Valor'); $erros = $dados_correios->xpath('cServico/Erro'); print $valor[0]; print "<p>"; print $erros[0]; print "<p>"; if ($erros[0] != 0) { print $erros[0]; } else { print $valor[0]; } ?> Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 3, 2010 Bom, conseguimos, Para quem querr tai: Falta apenas implementar a gosto <?php ##################################### # 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 # ##################################### $nCdEmpresa = ""; $sDsSenha = ""; $nCdServico = $_POST['TENVIO']; $sCepOrigem = 36855000; $sCepDestino = $_POST['TCEP']; $sCepDestino = eregi_replace("([^0-9])","",$sCepDestino); $nVlPeso = $peso_medio; $nCdFormato = 1; $nVlComprimento = 20; $nVlAltura = 20; $nVlLargura = 20; $nVlDiametro = 0; $sCdMaoPropria = "N"; $nVlValorDeclarado = 0; $sCdAvisoRecebimento = "S"; // URL de Consulta dos Correios entregue à variavel $correios $correios ="http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?" ."nCdEmpresa=$nCdEmpresa&" ."sDsSenha=$sDsSenha&" ."sCepOrigem=$sCepOrigem&" ."sCepDestino=$sCepDestino&" ."nVlPeso=$nVlPeso&" ."nCdFormato=$nCdFormato&" ."nVlComprimento=$nVlComprimento&" ."nVlAltura=$nVlAltura&" ."nVlLargura=$nVlLargura&" ."sCdMaoPropria=$sCdMaoPropria&" ."nVlValorDeclarado=$nVlValorDeclarado&" ."sCdAvisoRecebimento=$sCdAvisoRecebimento&" ."nCdServico=$nCdServico&" ."nVlDiametro=$nVlDiametro&" ."StrRetorno=xml"; $dados_correios = simplexml_load_file($correios); //print_r($dados_correios); print "<p>"; $total = $dados_correios->xpath('cServico/Valor'); $total = floatval(str_replace(',', '.', $total[0])); $PrazoEntrega = $dados_correios->xpath('cServico/PrazoEntrega'); $erros = $dados_correios->xpath('cServico/Erro'); $ValorAvisoRecebimento = $dados_correios->xpath('cServico/ValorAvisoRecebimento'); if ($erros[0] != 0) { print $erros[0]; // Tentar outro webservice } else { print "O valor do envio por "; print $nome_servico; print " será de: R$"; print number_format($total, 2, ',', '.'); print "<br>e o prazo de entrega será de "; print $PrazoEntrega[0]; print " dia(s) úteis"; print "<p>"; print "Valor da compra sem o frete R$ "; print number_format($preco_total, 2, ',', '.'); print "<p>"; $valor_final = $total + $preco_total; print "Valor da compra com o frete R$ "; print number_format($valor_final, 2, ',', '.'); } // Neste exemplo estou colocando apenas PAC e SEDEX switch ($nCdServico) { case 41106: $nome_servico = " PAC "; break; case 40010: $nome_servico = " SEDEX "; break; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Jim Joice 0 Denunciar post Postado Maio 26, 2010 Implementei o código acima e ele funcionou local corretamente, porém ao subir o arquivo e tentar calcular o frete novamente o seguinte erro aconteceu: Warning: simplexml_load_file() [function.simplexml-load-file]: URL file-access is disabled in the server configuration in /home/accsolution/public_html/pages/pedidos/car/car.php on line 200 Warning: simplexml_load_file(http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=37901040&sCepDestino=37901040&nVlPeso=1.000&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=S&nCdServico=41106&nVlDiametro=0&StrRetorno=xml) [function.simplexml-load-file]: failed to open stream: no suitable wrapper could be found in /home/accsolution/public_html/pages/pedidos/car/car.php on line 200 Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=37901040&sCepDestino=37901040&nVlPeso=1.000&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=S&nCdServico=41106&nVlDiametro=0&StrRetorno=xml" in /home/accsolution/public_html/pages/pedidos/car/car.php on line 200 Fatal error: Call to a member function xpath() on a non-object in /home/accsolution/public_html/pages/pedidos/car/car.php on line 204 Alguém sabe me informar como posso contornar esse erro? Compartilhar este post Link para o post Compartilhar em outros sites