Ir para conteúdo
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 ?

Compartilhar este post


Link para o post
Compartilhar em outros 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!

Compartilhar este post


Link para o post
Compartilhar em outros 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;

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 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);
    • Por 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
       
       
    • Por 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(){     }  
    • Por 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?
    • Por mbolzanes
      Olá.
       
      Preciso alterar o nome do meu tema na tray de MINHA SACOLA para MEU CARRINHO
      Alguém que possa ajudar?

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.