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
- Catálogo de produtos (#5);
- SEO (#5) para preenchimento das coordenadas;
Configurações gerais:
- CEP da loja: CEP oficial de onde irá sair os produtos;
- Frete grátis para toda a loja: configuração global que desabilita todas as formas de envio;
- Frete acima de um valor: Configuração global para oferecer frete grátis assim que o total da compra ultrapassa determinado valor;
- Frete grátis até determinado preço: Valor máximo em kilos para habilitar frete grátis em compras até determinado peso;
- Frete grátis por distância: Valor em quilometros para frete grátis; ⚠️ pode ter limitações caso não encontre o CEP no OpenStreet;
- Limite de entrega: Valor em quilometros para limitar a entrega;⚠️ pode ter limitações caso não encontre o CEP no OpenStreet;
- Tabela de estados: Ao habilitar essa opção o usuário terá o cálculo baseado no preenchimento da tabela de Estados no Painel da extensão;
- peso e medidas padrão: Dados essenciais para o funcionamento. Sempre que um produto não tiver medidas ou peso cadastrados, será utilizado este valor padrão;
🚨 É 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.