Extensão #9 Envios e cálculos de frete

Extensão que utiliza a Fretnet, Correios, controle por estados e configurações gerais para controle de envios

Introdução

Esta extensão permite gerenciar configurações relacionadas à envios com peso e medidas dos produtos para fazer cálculos de fretes. Divisão das configurações e possibilidades:


Pré-requisitos


Configurações gerais:

🚨 É importante que a loja utilize OU Fretnet OU Correios OU Controle por estados. Não é possível utilizar mais de um.

🚨 Em ordem, a loja busca primeiro A configuração global (frete grátis e distâncias), depois Fretnet, depois Correios, depois Controle por estados, entretanto, é importante desabilitar os não utilizados.



🚚 FRETNET

É a integração recomendada, basta adicionar o token e fazer as configurações na plataforma da Fretnet. É o mais preciso. 

Veja como pegar o token da Fretnet

Veja o site oficial da Fretnet

⚠️ Tempo adicional em dias para as entregas: Valor em dias para somar à estimativa, por exemplo, ao colocar o valor 3 será somado 3 dias em todas as opções. Pode ser utilizado como tempo de fabricação.


✉️ CORREIOS (simplificado)

A integração com o Correios fornece cálculos para SEDEX e PAC. Funciona bem para 1 produto mas pode ser impreciso para mais produtos. 

⚠️ As dimensões dos produtos e pesos são somados para gerar o cálculo. Há uma chance grande do valor ser maior que o real pago. 


🛣️ CONTROLE POR ESTADOS

Permite controlar por estado se o frete é grátis e seu respectivo valor fixo. ⚡ Por ser uma tabela simples, esse cálculo é muito rápido.

Onde é exibido?

Página do produto: Na página do produto é necessário  colocar o script e elementos do DOM para fazer o cálculo de estimativa individual.

No carrinho/sacola de compras: Os cálculos estão incorporados no cart2.js para estimar o frete para múltiplos produtos. Utiliza o localStorage:products para coletar os produtos (assim como o carrinho de compras).

Como utilizar no site

As configurações podem ser invocadas no Layout do catálogo a qualquer momento, com as funções:

objeto com as configurações globais:


$shippingData = shippingData();

$shippindData['cep'];
$shippindData['allFree'];
$shippindData['allFreeMessage'];
$shippindData['allFreePrice'];
$shippindData['allFreePriceValue'];
$shippindData['allFreeWeight'];
$shippindData['allFreeWeightValue'];
$shippindData['allFreeForRange'];
$shippindData['allFreeRangeValue'];
$shippindData['limitRange'];
$shippindData['limitRangeValue'];
$shippindData['useBRStates'];
$shippindData['defaultWeight'];
$shippindData['defaultWidth'];
$shippindData['defaultHeight'];
$shippindData['defaultLenght '];



objeto com os dados por estado


$shippingBRStates = shippingBRStatesData();

$shippingBRStates['SP']['configbrstatesAllFree'];
$shippingBRStates['SP']['configbrstatesMinvalueForFree'];
$shippingBRStates['SP']['configbrstatesFixedPrice'];
$shippingBRStates['SP']['configbrstatesDeliveryTime'];


Ps.: equivalente para todos os UFs


objeto com os dados da Fretnet


$fretnetData = shippingThirdPartyData('Fretnet');
$fretnetData['useFretnet'];
$fretnetData['fretnetDeliveryTime'];


objeto com os dados dos Correios


$correiosData = shippingThirdPartyData('Correios');
$correiosData['useCorreios'];
$correiosData['PAC'];
$correiosData['SEDEX'];
$correiosData['showService'];
$correiosData['correiosDeliveryTime'];


objeto para trazer as medidas e + dados de cada produto


$productMeasures = shippingEachProductData($productData['productId']);
$productMeasures['width'];
$productMeasures['height'];
$productMeasures['length'];
$productMeasures['fragile'];


objeto e script que traz todas as informações necessárias para o script de cálculos funcionar


$shippingDataForScript = shippingDataSet();

$item .= '<script id="shippingScriptTag" '.$shippingDataForScript.' src="https://www.interago.com.br/App/Extensions/9/tag/shipping.js" data-t="'.$mainData['siteDomainToken'].'" data-w="'.$mainData['siteId'].'" loading="lazy"></script>
<script>
 shippingForProduct();
</script>';


DOM necessário na página de produto



//shipping
 $shippingData = shippingData();
 $shippingProductData = shippingEachProductData($productData['productId']);
 $shippingWeight = ''; //to get weight from shipping settings if productData is equal to zero
 if($productData['productWeight'] == '0.0') {
 $shippingWeight = $shippingData['defaultWeight'];
 }
 else {
 $shippingWeight = $productData['productWeight'];
 }

$item .= '<div id="shippingEstimativeContent" data-product-width="'.$shippingProductData['width'].'" data-product-height="'.$shippingProductData['height'].'" data-product-length="'.$shippingProductData['length'].'" data-product-fragile="'.$shippingProductData['fragile'].'" data-product-weight="'.$shippingWeight.'" data-sku="'.$productData['productSKU'].'" data-category="'.$productData['categoryId'].'" data-price="'.$productData['productPrice'].'" data-internal-id="'.$productData['productId'].'"></div>';


☝️ Todo o esquema de cálculo será carregado dentro do #shippingEstimativeContent


Estilo padrão necessário para exibição dos cálculos


/*shipping*/

 #shippingEstimativeContent {
 margin-top:30px;
 }

 #shippingEstimativesInput {
 width: 50%;
 font-size: 15px;
 display: inline-block;
 border: 1px solid #dedede;
 border-radius: 5px;
 padding: 4px;
 }
 #shippingEstimativesInputButton {
 background-color: #055ed0;
 color: #fff;
 padding: 5px 5px;
 box-shadow: 0 2px 2px #dedede;
 border-radius: 5px;
 font-size: 14px;
 cursor: pointer;
 transition: 0.3s ease;
 text-align: center;
 width: 45%;
 display: inline-block;
 max-width: 100px;
 }
 #shippingEstimativesGeoLocation {
 cursor:pointer;
 font-size: 12px;
 color: #055ed0;
 display:block;
 }

 .shippingResultWireFrame {
 width: 100%;
 height: 10px;
 background-color: #dfdfdf;
 border-radius: 5px;
 margin-top: 10px;
 }
 .shippingResultHalfWireFrame {
 width:30%;
 height: 10px;
 background-color: #dfdfdf;
 border-radius: 5px;
 margin-top: 10px;
 }
 .shippingEstimativeResultContent {
 font-size: 13px;
 color: #666;
 margin-bottom: 10px;
 }
 #shippingEstimativesResult {
 margin-top:10px;
 }
 .shippingEstimativeResultPrice strong{
 display:inline-block;
 }



🛒 O estilo para o carrinho de compras já vem por padrão no cart2.js. Para alterar basta chamar o atributo style.

Você também pode gostar de ler

Guia completo para o catálogo de produtos (Extensão)

Em 14/06/2022 às 13h38 - Atualizado em 11/04/2025 às 13h17

Guia da Extensão #11 Promoções

Em 04/09/2023 às 10h41 - Atualizado em 12/02/2025 às 09h16

Carrinho de compras cart2.js

Em 29/11/2022 às 12h54 - Atualizado em 03/02/2025 às 11h54

Buscas e Pesquisas no Catálogo de produtos

Em 01/03/2023 às 09h23 - Atualizado em 16/12/2024 às 11h48

Checkout e Pedidos - Extensão #10

Em 01/06/2023 às 14h35 - Atualizado em 18/08/2023 às 08h36

Estoque do Catálogo de Produtos - Layout, Uso e Consultas

Em 13/02/2023 às 14h40 - Atualizado em 07/08/2023 às 22h28

Catálogo de Produtos - Listar Produtos com AJAX

Em 09/08/2022 às 11h03 - Atualizado em 26/12/2022 às 09h37

001. Catálogo em Lista - Formato Imobiliária

Em 29/06/2022 às 11h22 - Atualizado em 16/08/2022 às 09h09