Jump to content
Caio Vargas

Calcular frete correios

Recommended Posts

Olá pessoa tudo beleza

Estou criando um ecommerce porém estou com uma dúvida de como posso calcular o frete altura largura e comprimento de vários produtos no carrinho fiz a comparação do site dos correios e está dando diferença mínima de 4 reais alguém pode me ajudar ?

Share this post


Link to post
Share on other sites

Tem que calcular a cubagem do total de itens no carrinho.

Segue uma lógica:

 

 

/**
 * Calcular cubagem de produto(s) no carrinho
 * @param  array $carrinho_lista carrinho de compras
 * @return [type]                [description]
 */
function calculaCubagemProduto($produto_lista = array())
{

	$qtde = 0;
	$peso = 0;
	$total_peso = 0;

	$total_cubagem = 0;
	$raiz_cubica = 0;

	foreach ($produto_lista as $key => $carrinho) {

		$peso = $carrinho['peso'];

		$qtde = $carrinho['qtde'];
		$altura = $carrinho['altura'];
		$largura = $carrinho['largura'];
		$comprimento = $carrinho['comprimento'];

		echo 'QTDE ' . $qtde . '<br >';
		echo 'PESO ' . $peso . '<br >';
		$total_cubagem += ($altura * $largura * $comprimento * $qtde);
		echo 'TOTAL CUBAGEM ' . $total_cubagem . '<br /><br />';


		/*
        echo '<br />Qtde: '. $qtde;
        echo '<br />Produto Peso: '. $peso;
        echo '<br />Produto Altura: '. $altura;
        echo '<br />Produto largura: '. $largura;
        echo '<br />Produto Comprimento: '. $comprimento;
        echo '<br />--------------------------------------------------------';
        echo "<br /><br />Centimetro cubico por produto: " . $total_cubagem;
        echo "<br />Centimetro cubico total: " . $total_cubagem * $qtde;
        echo "<br /><br />Raiz cubica por produto: " . $raiz_cubica_produto . '<br />';
        echo "<strong>Raiz cubica total: <strong>" . $raiz_cubica . '<br />';
        */

	}

	$raiz_cubica += round(pow($total_cubagem, (1 / 3)));
	$total_peso = round($total_peso); // em kilos

	if ($raiz_cubica < 16) {
		$omprimento = 16; // em centimetros
	} else {
		$comprimento = $raiz_cubica;
	}

	if ($raiz_cubica < 11) {
		$largura = 11; // em centimetros
	} else {
		$largura = $raiz_cubica;
	}

	$altura = round($total_cubagem / ($comprimento * $largura)); // em centimetros

	echo "Total qte {$qtde} <br />";
	echo "Total cubagem {$total_cubagem} <br />";
	echo "Total peso {$total_peso} <br />";
	echo "Total comprimento {$comprimento} <br />";
	echo "Total largura {$largura} <br />";
	echo "Total altura {$altura} <br />";


}

Na época, a lógica e a implemtentação foi baseada neste post.

http://www.dothcom.net/blog/comercio-eletronico/calculo-de-frete-com-multiplos-volumes-dos-correios/

Se nada mudou, a lógica é esta!

Share this post


Link to post
Share on other sites

Williams Duarte

Obrigado por ajudar ...

Testei o seu código aqui e está dando algo diferente do meu .... Vou postar o meu aqui 

 

$CartTotal = 0;//Total
        $HeightTotal = 0;//Altura
        $WidthTotal = 0;//Largura
        $DepthTotal = 0;//Profundidade
        $WeightTotal = 0;//Peso
        $AmountTotal = 0;
        $calc = 0;
        $total = 0;
        foreach ($_SESSION['wc_order'] as $key => itemAmount):
                $CartTotal += ($pdt_offer_price && $pdt_offer_start <= date('Y-m-d H:i:s') && $pdt_offer_end >= date('Y-m-d H:i:s') ? $pdt_offer_price : $pdt_price) * $ItemAmount;
                $HeightTotal += $pdt_dimension_heigth * $ItemAmount;//Pega a quandidade de produtos
                $WidthTotal += $pdt_dimension_width * $ItemAmount;//Pega a Largura configurada
                $DepthTotal += $pdt_dimension_depth * $ItemAmount;//Pega Profundidade
                $WeightTotal += $pdt_dimension_weight * $ItemAmount; //Pega Altura
                $AmountTotal += $ItemAmount;
               
            endif;
        endforeach;
        $jSON['H'] = $HeightTotal;
        $CartTotalShip = number_format($CartTotal, '2', ',', '');
        $WeightTotalShip = floatval($AmountTotal/10);//Peso 
        $HeightTotalShip = ($HeightTotal >= 2 ? $HeightTotal : 2);
        // SE FOR MAIOR ENTÃO RECEBE 2
        $WidthTotalShip = ($WidthTotal / $AmountTotal >= 11 ? $WidthTotal / $AmountTotal : 11);
        // SE FOR MAIOR ENTÃO RECEBE 11
        $DepthTotalShip = ($DepthTotal / $AmountTotal >= 16 ? $DepthTotal / $AmountTotal : 16);
        // SE FOR MAIOR ENTÃO RECEBE 16
        $data['nCdEmpresa'] ='';
        $data['sDsSenha'] = '';
        $data['sCepOrigem'] = "09973220";
        $data['sCepDestino'] = str_replace('-', '', $POST['zipcode']);
        $data['nVlPeso'] = $WeightTotalShip;

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mbolzanes
      Olá.
       
      Preciso alterar o nome do meu tema na tray de MINHA SACOLA para MEU CARRINHO
      Alguém que possa ajudar?

    • By dutopfave
      Boa Tarde, estou criando uma loja virtual, e a questão é voltado para o carrinho de compras, ate agora ta tudo certo, funcionando normal, porém tem produtos que tem vários tamanho, exemplo eu tenho um tênis, e eu posso escolhe se quero tamanho 41 ou 42, blz ate ai ele registra certinho no banco, porém, se por a caso eu também queira compra o do tamanho 41, e dps volto la e compro o 42, invés de cria 2 produto no carrinho ele acaba atualizando o mesmo, pegando o ultimo tamanho q escolhi e na quantidade aumentando pra 2, vou manda o código aki, pq o ideal seria aparece 2 produto no carrinho, pq são 2 tamanho diferente, e isso ta quebrando a cabeça:
      Código:
      if($_GET['acao'] == 'adds'){ $qtds = $_POST['qtds']; $cart_tamanho = $_POST['cart_tamanho']; if(!isset($_SESSION['carrinho'][$id]) && $_SESSION['carrinho'][$id] < $Verifica_qtd_row2){ $_SESSION['carrinho'][$id] = $qtds; $_SESSION['cart_tamanho'][$id] = $cart_tamanho; }elseif($_SESSION['carrinho'][$id] < $Verifica_qtd_row2){ $_SESSION['carrinho'][$id] += $qtds; $_SESSION['cart_tamanho'][$id] = $cart_tamanho; }else{ $_SESSION['carrinho'][$id] = 1; $_SESSION['cart_tamanho'][$id] = $cart_tamanho; } }  
    • By dutopfave
      Galera tenho um carrinho de compras que calcula o frete tudo certinho, faço isso utilizando ajax, dando sucesso ele me retorna na pagina os método PAC e SEDEX com a opção de seleciona qual eu quero, ai q ta o problema, preciso que quando clica um dos dois possa ser carregado a pagina ou carrega em ajax, só que não to conseguindo, segue imagem de como está

    • By Aureo Almeida
      Estou tentando modificar um projeto de carrinho de compras cujo script peguei entre vários que está disponível na internet. Ele funciona bem, porém com uma determinada lógica: a quantidade de itens de um produto é aumentada conforme a quantidade de vezes que o cliente adicionar o produto. Ou seja, se ele for na página do produto para inseri-lo 3 vezes, ele aumenta a quantidade para 3. O problema é que no projeto que estou desenvolvendo os produtos possuem possibilidade de escolha de quantidade, pois podem ser vários e não dá para a pessoa ir e clicar 15 vezes nele.
      E não estou conseguindo mudar está lógica. O que eu gostaria é que quando o cliente selecionasse uma quantidade, e isso não é um problema, essa quantidade fosse recebida na página do carrinho junto com outras informações do produto puxado pela id dele no banco de dados.
      Este é o script básico:
      <?php $item_carrinho = 0; if(count($_SESSION['carrinho']) > 0){ foreach($_SESSION['carrinho'] as $id_produtos_carrinho => $quantidade_produto_carrinho){ $item_carrinho++; $query = "SELECT * FROM psd_produtos WHERE psd_produtos.prd_id = '".$id_produtos_carrinho."'"; $read_produto_carrinho = mysqli_query($conn, $query) or die(mysql_error()); if(mysqli_num_rows($read_produto_carrinho) > 0){ foreach($read_produto_carrinho as $read_produto_carrinho_view); $valor_total_produto_carrinho = $quantidade_produto_carrinho * $read_produto_carrinho_view['prd_valor']; $valor_total_venda += $valor_total_produto_carrinho; } echo ' <tr> <td class="car-item">'.$item_carrinho.'</td> <td class="car-nome">'.$read_produto_carrinho_view['prd_nome'].'</td> <td class="car-valor">'.number_format($read_produto_carrinho_view['prd_valor'], 2, ',', '.').'</td> <td class="car-qtd">'.$quantidade_produto_carrinho.'</td> <td class="car-total">'.number_format($valor_total_produto_carrinho, 2, ',', '.').'</td> <td class="car-opcao"><a href="deletar-prod1.php?id='.$id_produtos_carrinho.'" class="opcao">Excluir<a/></td> </tr> '; } } ?>  
    • By luannsr12
      Olá pessoal, ontem coloquei um repositório em meu GitHub , para quem deseja rastrear encomendas dos correios usando php, a chamada é bem simples, e retorna em JSON:
       
      <?php $obj = "CODIGO DE RASTREIO"; $url = "http://localhost/rastreio/api/obj.php?obj={$obj}"; $rastreio = file_get_contents($url); echo $rastreio; JSON:
      { "0": { "date":"10/06/2019", "hour":"14:14", "location":"SAO PAULO / SP", "action":"Objeto encaminhado", "message":"Objeto encaminhado de Agência dos Correios em SAO PAULO / SP para Unidade de Tratamento em SAO PAULO / SP", "change":"há 2 dias" } } https://github.com/luannsr12/correios-rastreio
      Vlw!!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.