Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Celso Leandro Palma

Frete Correios PHP + Webservice

Recommended Posts

Olá, eu estou com uma bela dúvida aqui.

 

Estou a realizar o cálculo de frete dos correios.

 

Após várias pesquisas, encontrei alguns métodos de como obter respostas dos correios e todos até que funcionam relativamente bem.

 

O meu grande problema é o seguinte:

 

Se em meu Carrinho possui 1 único produto o valor retornado vem certinho, porém se o meu carrinho possuí mais de um produto, como eu posso realizar corretamente o cálculo?

 

Vamos aos exemplos:

 

Se eu estiver em um site (Exemplo: http://www.ultrafarma.com.br), seleciono 1 produto qualquer (no caso: http://www.ultrafarma.com.br/produto/detalhes-18334/centrum_select_com_150_comprimidos.html), digito o CEP: 13012-000, ele me retornou a seguinte informação:

Entrega Expressa: de 2 a 3 dias úteis - Via Sedex | Frete: R$ 6,33

 

Show de bola até aí... Se eu aumento de 1 produto, para 2 produtos, o valor ficará R$ 10,26, se eu aumento para 10 produtos, o valor será de R$ 15,39.

 

Ou seja o cálculo não é feito sobre 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 10

Mas sim pelo volume da caixa (Volume) para o envio Certo?

 

1ª Pergunta é: como que se realize este cálculo do volume?

Obviamente que neste exemplo eu utilizei uma forma simples, ou seja, ele calculou o mesmo produto 10x, mas e se no caso fossem 10 produtos totalmente diferentes, como adequar o cálculo por volume?

 

2ª EU percebi, que na parte superior do carrinho deles, eles informam a quantidade de gramas e se eu selecionar 1 produto ele me dá o resultado de 290 gramas;

Se eu seleciono 10 produtos ele me dá 2.900 gramas (óbivio)

Sabemos pela documentação dos correios, que o peso MÁXIMO estipulado por eles, é de 30 Kg (30.000 Gramas), sendo assim, se selecionamos mais de 103 produtos, a quantidade em peso ultrapassaria a quantidade permitida pelos correios...

Como solucionar isso?

 

Vamos supor que, eu tenha 6 produtos:

1 - 30 Kg

2 - 15 kg

3 - 16 Kg

4 - 8 Kg

5 - 11 kg

6 - 11 Kg

Total: 91 Kg

 

Em meu carrinho, como que eu posso distribuir isso de uma forma correta para que a requisição dê o valor correto (ou muito aproximado do correto) como resposta?

 

A mesma pergunta vale para os outros quesitos, que são, profundidade, largura e altura?

 

Como resolver isso?

 

Fico no aguardo e agradeço a quem puder me auxiliar.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você ler o manual dos correios verá que o cálculo leva em conta 2 coisas:

1 - Peso;

2 - Cubagem

Prevalecerá o que tiver maior valor. Por este motivo você deve passar para os correios o peso total do pacote bem como as dimensões dele. Lembrando que o peso máximo que os correios transportam é de 30kg e existem limitações no tamanho do pacote também, estas informações você vai encontrar em:

http://www.correios.com.br/para-voce/correios-de-a-a-z/pdf/calculador-remoto-de-precos-e-prazos/manual-de-implementacao-do-calculo-remoto-de-precos-e-prazos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você ler o manual dos correios verá que o cálculo leva em conta 2 coisas:

1 - Peso;

2 - Cubagem

Prevalecerá o que tiver maior valor. Por este motivo você deve passar para os correios o peso total do pacote bem como as dimensões dele. Lembrando que o peso máximo que os correios transportam é de 30kg e existem limitações no tamanho do pacote também, estas informações você vai encontrar em:

http://www.correios.com.br/para-voce/correios-de-a-a-z/pdf/calculador-remoto-de-precos-e-prazos/manual-de-implementacao-do-calculo-remoto-de-precos-e-prazos

Olá ESerra, isso sim, eu tenho acesso a estas informações e já me debrucei sobre este manual..

 

A questão, não é o que ele pega e suas limitações, isto já está mais do que esclarecido. O que eu preciso saber é como fazer o sistema se comportar quando se trata mais do que 1 produto... e como gerar o valor mais aproximado possível, para que não tenha tanto problema ao cliente, quando o valor total do peso e cubagem for ultrapassado por conta de ter vários produtos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso basta usar o raciocínio lógico...

 

1 - 30 Kg

2 - 15 kg

3 - 16 Kg

4 - 8 Kg

5 - 11 kg

6 - 11 Kg

Total: 91 Kg

 

Pegue o valor total e divida por 30 (peso máximo), você terá 3,alguma_coisa, multiplique a parte inteira (3) por 30, terá 90, subtraia o total (91) pelo que encontrou (90), terá 1.

Então você sabe que terá que calcular o valor total do frete baseado em:

30 kg e pegar o valor e multiplicar por 3 (já que serão 3 pacotes de 30kg).

1 kg (que será o "quebrado").

 

Quanto as dimensões, novamente basta usar a cabeça, como você monta um pacote que contêm vários tamanhos diferentes? Usando o bom senso você vai começar colocando embaixo o pacote que for mais largo e mais comprido, pronto, você já tem 2 dimensões para enviar aos correios, a altura do pacote será o somatório do total das alturas de todos os produtos. Sempre respeitando o que prevê o manual dos correios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • 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 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 DuRodrig
      Pessoal, bom dia! 
      Estou fazendo uma página com um cálculo simples de porcentagem.
      Existe um formuário que coloco o valor da venda, a comissão é fixa em 13% e a tarifa é um valor que você coloca também.
      Exemplo: (valor da venda) R$ 100,00 - (comissão 13%) - (tarifa) R$ 8,50 = (resultado) R$ 78,50, só que está gerando o resultado de R$ 79,00.
      Como faço para corrgir esse problema?
      Segue o código:

       
      $(function(){ $('#valorVenda').on('input', function() { calculate(); }); $('#tarifa').on('input', function() { calculate(); }); function calculate(){ var pPos = parseFloat($('#valorVenda').val()); var tar = parseFloat($('#tarifa').val()); var result = " "; if(isNaN(pPos) || isNaN(tar)){ }else{ result = ((pPos - ((13.00 * pPos) / 100.00)) - tar).toFixed(2); } $('#total').val(result); } });  
      Desde já agradeço.
×

Informação importante

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