Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#21359
Olá Pessoal, acabei desenvolvendo uma função usando a API do Google maps. Ela tem a função de calcular a distância entre 2 pontos(endereços) que você passa por parametros para o Google.
Estou usando esta mesma função em um projeto meu, usando OpenCart, e resolvi postar, pois talvez alguém esteja precisando...
Espero que gostem, está tudo comentado!
;)
Código: Selecionar todos
<?php   
/* 
 *  Função de busca de Endereço pelo Google 
 *  -   Desenvolvido Julio Alves. http://gnerd.com.br 
 *  -   Utilizando WebService da API do Google. 
 */
 //COLOQUE ESTA FUNCAO EM QUALQUER PARTE DO SEU CÓDIGO, SEJA EM ALGUMA VIEW, MODEL.  
//VALE RESSALTAR QUE OS DADOS PASSADOS DEVEM SER BEM DEFINIDOS COMO NO EXEMPLO: Av. Rio Branco, 62, Fortaleza-CE. Brasil.
//PARA QUE O GOOGLE SEJA O MAIS DETALHISTA O POSSIVEL COM RELAÇÃO AO DADOS PASSADOS.
function buscarEndereco($origem, $destino){

   //FAZENDO REQUISIÇÃO A API DO GOOGLE PARA PASSANDO COMO PARAMETRO: ORIGEM E DESTINO.
   //Os parametros obrigatorios são: origins, destinations e sensor.
    //caso queira saber mais sobre os parametros consulta a API do Google.
   $resultado = simplexml_load_file('http://maps.googleapis.com/maps/api/distancematrix/xml?origins='.$origem.'&destinations='.$destino.'&language=pt-BR&sensor=false');  
    if($resultado == 'OK'){        
      echo $resultado->origin_address . '<br>';
      echo $resultado->destination_address . '<br>';
      echo $resultado->row->element->distance->text . '<br>';
      echo $resultado->row->element->duration->text . '<br>';

      //PEGO OS VALORES DE DISTANCIA VINDOS DO GOOGLE E BASEANDO-SE POR ELES FAÇO OS CÁLCULOS PARA FRETE
      $distanciaValue = $resultado->row->element->distance->value;
      $duracaoValue = $resultado->row->element->duration->value;

      //PREÇO FIXO DO FRETE
      $cost = 5.00;

      //Calculo o frete baseado na distância que eu vou ter que percorrer
      //CASO A DISTANCIA SEJA MAIOR QUE 500m E MENOR QUE 5000m O VALOR DO FRETE MUDA $cost = 7.00 e asim por diante...
      if($distanciaValue >= 500 AND $distanciaValue <= 5000)$cost = 7.00;
      elseif($distanciaValue >= 5001 AND $distanciaValue <= 15000)$cost = 15.00;
      elseif($distanciaValue > 15000)$cost = 15.00;
    }else{
      //Aqui tratamos os possiveis erros que podem acontecer, provenientes do Google Maps.
      switch($resultado){
          case 'INVALID_REQUEST': $alert = 'Solicitação Fornecida Inválida!';break;
          case 'MAX_ELEMENTS_EXCEEDED': $alert = 'O produto(*) das origens e destinos excede o limite!';break;
          case 'OVER_QUERY_LIMIT': $alert = 'O serviço recebeu muitas solicitações!';break;
          case 'REQUEST_DENIED': $alert = 'Serviço Negado!';break;
          case 'UNKNOWN_ERROR': $alert = 'Erro do servidor, Atualize sua página pressionando F5.';break;
          case 'NOT_FOUND': $alert = 'Origem e destino não puderam ser geocodificados. Verifique os locais!';break;
          case 'ZERO_RESULTS': $alert = 'Não foi possivel encontrar nenhum trajeto!';break;
      }
    }
}  
buscarEndereco("Rua José Antonio, 9, Planalto Pici, Fortaleza-CE", "Rua Barão de Sturdat, Aldeota, Fortaleza-CE");  
?>  
#21554
Não querendo desmerecer a excelente colaboração, mas gostaria de complementar que existe um módulo para o OpenCart para cálculo de frete com base no CEP e no peso. Ele pode ser usado para calcular o frete manualmente para transportadoras ou para definir valores de entrega de acordo com as regiões da cidade. Claro que não é nada automático como o módulo acima, mas também não é totalmente manual já que esse módulo pode ser configurado pelo administrador.
#77560
Olá, Wesley, meu OpenCart é o 3.0, e por falta de tempo não consegui criar o tópico explicando. Creio que não serve para o OpenCart 2, pois os arquivos são diferentes. Basicamente eu copiei os arquivos de um dos tipos de frete, renomeei e adicionei meu código, acredito que o processo seja parecido, com diferença nos demais códigos. Eu precisei criar um campo personalizado (custom field) no formulário de cadastro solicitando o número da residência, para calcular melhor a distância. Essa semana ainda tentarei divulgar o tutorial do OpenCart 3, talvez ajude mesmo sendo outra versão.

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]