Ir para conteúdo

Arquivado

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

Giuliano Santos

Erro com código que calcula frete dos correios

Recommended Posts

Pesquisando na internet consegui um código que faz o calculo de fretes do correio, porem esta dando erro comigo e não consigo resolver.

o erro que aparece é:

Notice: Trying to get property of non-object in C:\xampp\htdocs\correios\calculando-frete.php on line 47

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\correios\calculando-frete.php on line 47

A linha 47 que apresenta o erro é a seguinte:

foreach($dados->cServico as $linhas) {

Segue o código:

<?php
	$parametros = array();
	
	// C�digo e senha da empresa, se voc� tiver contrato com os correios, se n�o tiver deixe vazio.
	$parametros['nCdEmpresa'] = '';
	$parametros['sDsSenha'] = '';
	
	// CEP de origem e destino. Esse parametro precisa ser num�rico, sem "-" (h�fen) espa�os ou algo diferente de um n�mero.
	$parametros['sCepOrigem'] = '12238572';
	$parametros['sCepDestino'] = '12285810';
	
	// O peso do produto dever� ser enviado em quilogramas, leve em considera��o que isso dever� incluir o peso da embalagem.
	$parametros['nVlPeso'] = '1';
	
	// O formato tem apenas duas op��es: 1 para caixa / pacote e 2 para rolo/prisma.
	$parametros['nCdFormato'] = '1';
	
	// O comprimento, altura, largura e diametro dever� ser informado em cent�metros e somente n�meros
	$parametros['nVlComprimento'] = '16';
	$parametros['nVlAltura'] = '5';
	$parametros['nVlLargura'] = '15';
	$parametros['nVlDiametro'] = '0';
	
	// Aqui voc� informa se quer que a encomenda deva ser entregue somente para uma determinada pessoa ap�s confirma��o por RG. Use "s" e "n".
	$parametros['sCdMaoPropria'] = 's';
	
	// O valor declarado serve para o caso de sua encomenda extraviar, ent�o voc� poder� recuperar o valor dela. Vale lembrar que o valor da encomenda interfere no valor do frete. Se n�o quiser declarar pode passar 0 (zero).
	$parametros['nVlValorDeclarado'] = '200';
	
	// Se voc� quer ser avisado sobre a entrega da encomenda. Para n�o avisar use "n", para avisar use "s".
	$parametros['sCdAvisoRecebimento'] = 'n';
	
	// Formato no qual a consulta ser� retornada, podendo ser: Popup � mostra uma janela pop-up | URL � envia os dados via post para a URL informada | XML � Retorna a resposta em XML
	$parametros['StrRetorno'] = 'xml';
	
	// C�digo do Servi�o, pode ser apenas um ou mais. Para mais de um apenas separe por virgula.
	$parametros['nCdServico'] = '40010,41106';
	
	
	$parametros = http_build_query($parametros);
	$url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx';
	$curl = curl_init($url.'?'.$parametros);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	$dados = curl_exec($curl);
	$dados = simplexml_load_string($dados);
	
	foreach($dados->cServico as $linhas) {
		if($linhas->Erro == 0) {
			echo $linhas->Codigo.'</br>';
			echo $linhas->Valor .'</br>';
			echo $linhas->PrazoEntrega.' Dias </br>';
		}else {
			echo $linhas->MsgErro;
		}
		echo '<hr>';
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que esse link não esteja correto:

Erro no processamento de XML: nenhum elemento encontrado
Posição: http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx
Número da linha 1, coluna 1:

A ECT disponibiliza um web service para isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que esse link não esteja correto:

A ECT disponibiliza um web service para isso

Entrei no site dos correios e peguei o manual de implementação para conferir e esta betendo tanto o link como os parametros.

o link que peguei o manual é esse: https://www.correios.com.br/para-voce/correios-de-a-a-z/pdf/calculador-remoto-de-precos-e-prazos/manual-de-implementacao-do-calculo-remoto-de-precos-e-prazos/view

O que mais poderia ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O link correto é: http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx

O seu está com aspx.

Se você adicionar o sufixo ?WSDL, vai ter o link correto para usar a biblioteca SOAP:

http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL

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.