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 Lenon John
      Detalhe importante:
      Se eu digito MINHA_CHAVE_JADLOG incorreta, ai eu recebo um retorno informado que as credenciais estão incorretas.
      Se eu digito MINHA_CHAVE_JADLOG corretamente, não recebo nenhum retorno.

      $dados = [
        'frete' => [
          'cepori' => '29010070',
          'cepdes' => '29300040',
          'frap' => '',
          'peso' => 2,
          'cnpj' => '00000000000100',
          'conta' => '000001',
          'contrato' => '',
          'modalidade' => 4,
          'tpentrega' => 'D',
          'tpseguro' => 'N',
          'vldeclarado' => 100,
          'vlcoleta' => ''
        ]
      ];
      $postfields = http_build_query($dados);
       
      $header = array();
      $header[] = 'Authorization: Bearer MINHA_CHAVE_JADLOG';
      $header[] = 'Content-Type: application/json';
      $header[] = 'description:';
       
      $curl = curl_init('https://www.jadlog.com.br/embarcador/api/frete/valor/');
      curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
       
      $exec = curl_exec($curl);
      $jadlog = json_decode($exec);
       
      curl_close($curl);
       
      print_r($jadlog);
    • By Carlos Antoliv
      Senhores, tudo bem?
       
      Tô numa dúvida aqui... tá matando.
      Estou tentando contar a quantidade de itens do carrinho de compras.
       
      Este aqui é o input que aparece a quantidade de itens:
      <td><input type="text" name="prod[<?php echo $result['id']?>]" value="<?php echo $qtdProd = $result['quantity']?>" size="1"  />                          </td>  
      Aparece normalmente a quantidade de itens. Ex: arroz   2  <<< este 2 fica dentro do input, onde posso alterá-lo.
      Minha ideia é mostrar na tela a quantidade total de itens que estão no carrinho.
       
      To usando esse código aqui pra aparecer o número total.... e até funciona:
       
                         <?php                                     if(isset($_SESSION['carrinho'])){                                     $amount = 0;                                     $count = 0;                                     $size = count($_SESSION['carrinho']);                                                                         foreach($_SESSION['carrinho'] as $data){                                     $count++;                                     $amount += $data['quantity'];                                     if($size == $count){                                     echo "TOTAL = $amount";                                     }                                 }                             }                                 ?>  
      O problema é que está exibindo o seguinte erro:
      Warning: Illegal string offset 'quantity' in C:\...\www\sistema\carrinho-de-compra\carrinho.php on line 90
       
      Erro na linha 90, no caso, neste linha aqui: 
          $amount += $data['quantity'];
       
      Daí travei um pouco.
       
      Alguém que poderia dar força ? Tá osso aqui.
      tmj
       
       
    • By Sapinn
      Opa galera tudo beleza? Estou desenvolvendo um pequeno e-commerce de camisas. Enquanto fazia o carrinho de compras topei com um problema como posso mostrar os produtos no carrinho e como mostrar assim que for inserirdo um novo produto ? Fiz algumas buscas mas nenhuma me ajudou realmente. 
       
      Carrinho de compras:

       
      <!-- ==================================== CARRINHO DE COMPRAS =================================== -->     <div class="offcanvas offcanvas-end areaShoppingCart" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">       <div class="offcanvas-header">         <h4 class="offcanvas-title fw-bold" id="offcanvasNavbarLabel"><i class="bi bi-cart4"></i> Carrinho de Compras         </h4>         <button type="button" class="text-reset closeAreaShoppingCart" data-bs-dismiss="offcanvas" aria-label="Close"><i class="bi bi-x"></i></button>       </div>       <span data-bs-toggle="modal" data-bs-target="#leiaimportante" class="link_text">Leia Importante <i class="bi bi-info-circle"></i></span>       <hr />       <div class="offcanvas-body cart_body">     <!--     <div class="product_content">           <div class="trash_icon"><a href="#" class="link_text"><i class='bx bx-trash ' title="Excluir do carrinho"></i></a></div>           <a href="" class="container_card_product">             <div class="d-flex">               <div class="cart_img_product">                 <img src="../assets/images/camisas/257139328_126851229744515_2923407250030929456_n.webp.jpg" alt="">               </div>               <div class="cart_info_product">                 <div class="cart_name_product">Camisa do Paris San-German Branca</div>                 <div class="cart_price_product">Preço: 120,00</div>               </div>             </div>           </a>           <hr />         </div> -->       </div>     </div>  
      JS:
      let cartShirt = []; let btn = document.querySelector(".btnShoppingCart"); let idShirt = btn.getAttribute('data-product-id') let nameShirt = document.querySelector(".name_shirt").innerText; let priceShirt = document.querySelector(".price_shirt").innerText; let symbol_shirt = document.querySelector(".symbol_shirt").getAttribute('src'); let urlShirt = window.location.href; let infoShirts = {    "id": idShirt,    "name": nameShirt,    "price": priceShirt,    "img": symbol_shirt,    "url": urlShirt, } jsonShirt = JSON.stringify(infoShirts); let productsInCart = JSON.stringify(localStorage.getItem("futprime_cart")); btn.addEventListener('click', () => {    if (productsInCart == '') {       cartShirt.push(jsonShirt);       localStorage.setItem('futprime_cart', cartShirt)    }else{       let obj = productsInCart.concat(jsonShirt);       cartShirt.push(obj.replace(/[\\"]/g, ''))       /* console.log(cartShirt); */       localStorage.setItem('futprime_cart', cartShirt);       /* console.log(localStorage.getItem('futprime_cart')); */    }    insertInCartHTML(); }); console.log(localStorage.getItem('futprime_cart')); /* localStorage.clear(); */ function insertInCartHTML(){     }  
    • By MarceloEBM
      Baixei a tabela do melhorenvio e adaptei para o formato da webcontinental que eles disponibilizam, enviei para o gerente de conta e ele disse que rodou, não atualizou e não tem nenhuma mensagem de erro pra me passar.
       
      Posso estar fazendo errado, alguém tem alguma experiencia com esta tabela de frete?
    • By mbolzanes
      Olá.
       
      Preciso alterar o nome do meu tema na tray de MINHA SACOLA para MEU CARRINHO
      Alguém que possa ajudar?

×

Important Information

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