-
Conteúdo Similar
-
Por Caio Vargas
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 ?
-
Por luannsr12
Olá pessoal, ontem coloquei um repositório em meu GitHub , para quem deseja rastrear encomendas dos correios usando php, a chamada é bem simples, e retorna em JSON:
<?php $obj = "CODIGO DE RASTREIO"; $url = "http://localhost/rastreio/api/obj.php?obj={$obj}"; $rastreio = file_get_contents($url); echo $rastreio; JSON:
{ "0": { "date":"10/06/2019", "hour":"14:14", "location":"SAO PAULO / SP", "action":"Objeto encaminhado", "message":"Objeto encaminhado de Agência dos Correios em SAO PAULO / SP para Unidade de Tratamento em SAO PAULO / SP", "change":"há 2 dias" } } https://github.com/luannsr12/correios-rastreio
Vlw!!
-
Por guinigri
Boa tarde, preciso passar o valor do frete exibido da API dos correios para o pag seguro mas não estou conseguindo!
Exemplo:
O cliente entra no meu site add um produto ao carrinho e verifica o frete no próprio carrinho, seleciona se quer PAC ou SEDEX, e quando apertar no botão de pagamento do Pagseguro, ele envia o valor do frete selecionado para a API do pagseguro
Segue os Codigos:
--> FORM DO FRETE COM RETORNO DO VALOR:
<form method="post" action="#" class="navbar-form navbar-left" role="textbox" id="t1" name="t1"> <div class="form-group"> Simular frete: <input type="text" class="form-control" name="frete" placeholder="Frete" required id="frete"> <input type="hidden" name="vldeclarado" value="<?php echo $exibir['preco'];?>" /> </div> <button class="btn btn-success" type="submit" name="submit"> <span class="glyphicon glyphicon-search"></span> </button> </form> <?php if($_POST):?> <div class="row"> <div class="col-sm-12" style="margin-top: 10px; margin-bottom: 0px; border-style: none; border-top: none; border-color: #CBCBCB; border-width: 3px;"> <?php $frete = trim($_POST['frete']); //echo "<h3>{$frete}</h3>"; require_once 'frete.php'; $table = frete( $frete ); echo $table;?> </div></div><?php endif;//POST ?> --> API DO PAGSEGURO:
<form method="post" target="pagseguro" action="https://pagseguro.uol.com.br/v2/checkout/payment.html"> <!-- Campos obrigatórios --> <input name="receiverEmail" type="hidden" value="EMAIL@gmail.com"> <input name="currency" type="hidden" value="BRL"> <!-- Itens do pagamento (ao menos um item é obrigatório) --> <?php $i = 1; do{ foreach ($_SESSION['carrinho'] as $id_prod => $qnt) { $code_prod = $conexao->query("SELECT * FROM produtos where id = '$id_prod'"); $exi = $code_prod->fetch(PDO::FETCH_ASSOC); $prod = $exi['produto']; $precouni = number_format(($exi['preco']),2,'.',','); ?> <input name="itemId<?php echo $i; ?>" type="hidden" value="<?php echo $id_prod;?>"> <input name="itemDescription<?php echo $i; ?>" type="hidden" value="<?php echo $prod; ?>"> <input name="itemAmount<?php echo $i; ?>" type="hidden" value="<?php echo $precouni; ?>"> <input name="itemQuantity<?php echo $i; ?>" type="hidden" value="<?php echo $qnt; ?>"> <input name="itemWeight<?php echo $i; ?>" type="hidden" value="0"> <?php $i++; } } while($i <= count($_SESSION['carrinho'])); ?> <input name="itemShippingCost1" type="hidden" value="300"> (VALOR DO FRETE AQUI) <!-- Informações de frete (opcionais) --> <input name="shippingType" type="hidden" value=""> (TIPO DE FRETE SELECIONADO AQUI) Desculpe se ficou grande, se alguem puder me ajudar ficaria grato!
-
Por IgorWeldt
Bom dia, galera.
Essa é a minha primeira postagem
Seguinte, estou desenvolvendo um website simples de compra, onde o usuário fará o pagamento pela API do PagSeguro, o problema é que não estou conseguindo usar a calculadora de frete do Correios.
Encontrei diversos códios prontos pela internet, porém, nenhum funciona.
Minha página fica carregando e não sai disso.
Falta basicamente isso para finalizar o projeto, alguém pode me dar uma luz?
<?php $parametros = array(); // Código e senha da empresa, se você tiver contrato com os correios, se não tiver deixe vazio. $parametros['nCdEmpresa'] = ''; $parametros['sDsSenha'] = ''; // CEP de origem e destino. Esse parametro precisa ser numérico, sem "-" (hífen) espaços ou algo diferente de um número. $parametros['sCepOrigem'] = '81810110'; $parametros['sCepDestino'] = '80050530'; // O peso do produto deverá ser enviado em quilogramas, leve em consideração que isso deverá incluir o peso da embalagem. $parametros['nVlPeso'] = '1'; // O formato tem apenas duas opções: 1 para caixa / pacote e 2 para rolo/prisma. $parametros['nCdFormato'] = '1'; // O comprimento, altura, largura e diametro deverá ser informado em centímetros e somente números $parametros['nVlComprimento'] = '16'; $parametros['nVlAltura'] = '5'; $parametros['nVlLargura'] = '15'; $parametros['nVlDiametro'] = '0'; // Aqui você informa se quer que a encomenda deva ser entregue somente para uma determinada pessoa após confirmação por RG. Use "s" e "n". $parametros['sCdMaoPropria'] = 'n'; // O valor declarado serve para o caso de sua encomenda extraviar, então você poderá recuperar o valor dela. Vale lembrar que o valor da encomenda interfere no valor do frete. Se não quiser declarar pode passar 0 (zero). $parametros['nVlValorDeclarado'] = '200'; // Se você quer ser avisado sobre a entrega da encomenda. Para não avisar use "n", para avisar use "s". $parametros['sCdAvisoRecebimento'] = 'n'; // Formato no qual a consulta será retornada, podendo ser: Popup – mostra uma janela pop-up | URL – envia os dados via post para a URL informada | XML – Retorna a resposta em XML $parametros['StrRetorno'] = 'xml'; // Código do Serviço, pode ser apenas um ou mais. Para mais de um apenas separe por virgula. $parametros['nCdServico'] = '40010,41106'; $parametros = http_build_query($parametros); $url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx'; $curl = curl_init($url.'?'.$parametros); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $dados = curl_exec($curl); $dados = simplexml_load_string($dados); ?> <html> <head> <title>Frete Correios Testes</title> </head> <body> <h1>Calculadora de frete dos Correios</h1> <?php foreach($dados->cServico as $linhas) { if($linhas->Erro == 0) { echo $linhas->Codigo.'</br>'; echo $linhas->Valor .'</br>'; echo $linhas->PrazoEntrega.' Dias </br>'; }else { echo $linhas->MsgErro; } echo '<hr>'; } ?> </body> </html>
Obrigado à todos!
-
Por Nerdmonkey
A quanto tempo não posto aqui. As novidades do fórum estão bem bacanas... já volto com uma bomba rs
Estou adaptando um classe para arranjar os produtos do carrinho de um e-comerce em caixas para calcular o frete juntos aos correios.
Gostaria de sugestões dos colegas para implementar, sempre que um caixa atingir o limite, gerar uma nova caixa... a parte da comunicação com a API do correios está bem tranquilo.
O que tá pegando mesmo é essa parte da organização dos itens em várias caixas.
Vou deixar aqui o código completo que estou testando...
/
config.php
<?php define("MIN_LARGURA", 11); define("MAX_LARGURA", 105); define("MIN_ALTURA", 2); define("MAX_ALTURA", 105); define("MIN_COMPRIMENTO", 16); define("MAX_COMPRIMENTO", 105); define("MIN_SOMA_CLA", 29); define("MAX_SOMA_CLA", 200); function dd($data) { echo '<pre>'; var_dump($data); echo '</pre>'; } index.php
<?php require_once 'config.php'; require_once 'Boxes.php'; $cart = [ [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], ]; $boxes = new Boxes($cart); dd($boxes->createBoxes()); Boxes.php
<?php class Boxes { private $cart = []; private $box = []; private $box_properties = []; /** * __construct * * @param array $cart */ public function __construct($cart = []) { $this->cart = $cart; $this->box_properties = [ 'altura' => 0, 'largura' => 0, 'comprimento' => 0, 'qtd_itens' => 0, 'message' => null, 'volume' => 0, 'volume_itens' => 0, 'volume_vazio' => 0, 'comprimento_remanescente' => 0, 'largura_remanescente' => 0, 'altura_remanescente' => 0 ]; } /** * Order items inside the box * * @return array */ public function orderBox() { foreach ($this->cart as $k => $item): $new_height = min($item['A'], $item['L'], $item['C']); $new_length = max($item['A'], $item['L'], $item['C']); $width = [$item['A'], $item['L'], $item['C']]; sort($width) ; array_shift($width); array_pop($width); $item['L'] = isset($width[0]) ? $width[0] : $new_height; $item['A'] = $new_height ; $item['C'] = $new_length ; $item['LC'] = $item['L'] * $item['C'] ; $this->cart[$k] = $item; endforeach; usort($this->cart, function($a, $b){ return $a['LC'] < $b['LC']; }); return $this->cart ; } /** * Create and put items inside the box * * @return array */ public function createBoxes() { $this->cart = $this->orderBox(); $this->box = json_decode(json_encode($this->box_properties,FALSE)); $this->organizeItems(); $this->box->volume = ($this->box->altura * $this->box->largura * $this->box->comprimento); $this->box->volume_vazio = $this->box->volume - $this->box->volume_itens; $this->minSpecifications(); $this->errors(); return $this->box; } private function organizeItems() { foreach ($this->cart as $item): $this->box->qtd_itens++; $this->box->volume_itens += ($item['A'] * $item['L'] * $item['C']); $this->allocateItems($item); $this->box->altura += $item['A']; if($item['L'] > $this->box->largura): $this->box->largura = $item['L']; endif; if ($item['C'] > $this->box->comprimento): $this->box->comprimento = $item['C']; endif; $this->box->comprimento_remanescente = $this->box->comprimento; $this->box->largura_remanescente = $this->box->largura - $item['L']; $this->box->altura_remanescente = $item['A']; endforeach; } private function allocateItems($item) { if($this->box->comprimento_remanescente >= $item['C'] && $this->box->largura_remanescente >= $item['L']): if($item['A'] > $this->box->altura_remanescente): $this->box->altura += $item['A'] - $this->box->altura_remanescente ; endif; if($item['C'] > $this->box->comprimento): $this->box->comprimento = $item['C']; endif; $this->box->comprimento_remanescente = $this->box->comprimento - $item['C']; $this->box->largura_remanescente = $this->box->largura_remanescente - $item['L'] ; $this->box->altura_remanescente = $item['A'] > $this->box->altura_remanescente ? $item['A'] : $this->box->altura_remanescente ; endif; } private function minSpecifications() { if($this->box->altura > 0 && $this->box->altura < MIN_ALTURA): $this->box->altura = MIN_ALTURA ; endif; if($this->box->largura > 0 && $this->box->largura < MIN_LARGURA): $this->box->largura = MIN_LARGURA ; endif; if($this->box->comprimento > 0 && $this->box->comprimento < MIN_COMPRIMENTO): $this->box->comprimento = MIN_COMPRIMENTO ; endif; } private function errors() { if($this->box->altura > MAX_ALTURA): $this->box->message = "Erro: Altura maior que o permitido."; endif; if($this->box->largura > MAX_LARGURA ): $this->box->message = "Erro: Largura maior que o permitido."; endif; if($this->box->comprimento > MAX_COMPRIMENTO ): $this->box->message = "Erro: Comprimento maior que o permitido."; endif; if(($this->box->comprimento + $this->box->comprimento + $this->box->comprimento) < MIN_SOMA_CLA): $this->box->message = "Erro: Soma dos valores C+L+A menor que o permitido."; endif; if(($this->box->comprimento + $this->box->comprimento + $this->box->comprimento) > MAX_SOMA_CLA): $this->box->message = "Erro: Soma dos valores C+L+A maior que o permitido."; endif; } }
-