Carrinho de Compras
CÓDIGO |
PRODUTO |
PREÇO |
QUANTIDADE |
SUBTOTAL |
REMOVER |
if (!empty($_SESSION['login'])) {
// Usuário logado → pega tanto pelo login quanto pela sessão
$sql_meu_carrinho = "
SELECT c.*, p.estoque AS estoque_real
FROM tbl_carrinho c
INNER JOIN tbl_produtos p ON p.cod = c.cod
WHERE (c.sessao = '".session_id()."'
OR c.login = '".$_SESSION['login']."')
ORDER BY c.nome ASC
";
}
else {
// Usuário NÃO logado → pega só pela sessão
$sql_meu_carrinho = "
SELECT c.*, p.estoque AS estoque_real
FROM tbl_carrinho c
INNER JOIN tbl_produtos p ON p.cod = c.cod
WHERE c.sessao = '".session_id()."'
ORDER BY c.nome ASC
";
}
$exec_meu_carrinho = mysqli_query($conexao, $sql_meu_carrinho);
$qtd_meu_carrinho = mysqli_num_rows($exec_meu_carrinho);
if ($qtd_meu_carrinho == 0) {
echo "
Seu carrinho está vazio
Você ainda não adicionou nenhum produto.
Que tal continuar suas compras?
Ver produtos
";
?>
exit;
}
if ($qtd_meu_carrinho > 0)
{
$soma_carrinho = 0;
while ($row_rs_produto_carrinho = mysqli_fetch_assoc($exec_meu_carrinho))
{
$qtd_carrinho = (int)$row_rs_produto_carrinho['qtd'];
$estoque_real = (int)$row_rs_produto_carrinho['estoque_real'];
// ❌ Sem estoque → remove item
if ($estoque_real <= 0)
{
$sql_delete = "DELETE FROM tbl_carrinho WHERE id = ?";
$stmt_delete = mysqli_prepare($conexao, $sql_delete);
$id_carrinho = (int)$row_rs_produto_carrinho['id'];
mysqli_stmt_bind_param(
$stmt_delete,
"i",
$id_carrinho
);
mysqli_stmt_execute($stmt_delete);
mysqli_stmt_close($stmt_delete);
echo "
Estoque Insuficiente.
❌ O Item {$row_rs_produto_carrinho['nome']} foi removido do Carrinho (sem estoque).
Ver produtos
";
continue; // pula esse item
}
// ⚠️ Estoque menor que a quantidade
if ($qtd_carrinho > $estoque_real)
{
$sql_update = "UPDATE tbl_carrinho
SET qtd = ?
WHERE id = ?";
$stmt_update = mysqli_prepare($conexao, $sql_update);
$id_carrinho = (int)$row_rs_produto_carrinho['id'];
$qtd_ajustada = (int)$estoque_real;
mysqli_stmt_bind_param(
$stmt_update,
"ii",
$qtd_ajustada,
$id_carrinho
);
mysqli_stmt_execute($stmt_update);
mysqli_stmt_close($stmt_update);
$qtd_carrinho = $estoque_real;
echo "
Estoque Insuficiente.
⚠️ O Item a seguir teve sua quantidade ajustada conforme a disponibilidade: {$row_rs_produto_carrinho['nome']}.
Ver produtos
";
}
// ✅ SOMENTE AGORA entra nos cálculos
$soma_carrinho += ($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd']);
$soma_cartao += ($row_rs_produto_carrinho['precoc']*$row_rs_produto_carrinho['qtd']);
$soma_desconto += ($row_rs_produto_carrinho['precos']*$row_rs_produto_carrinho['qtd']);
$soma_frete += ($row_rs_produto_carrinho['peso']*$row_rs_produto_carrinho['qtd'])*1000;
$soma_seguro += ($row_rs_produto_carrinho['seguro']*$row_rs_produto_carrinho['qtd']);
$v_produtos .= $row_rs_produto_carrinho['nome']."
";
$v_qtde .= $row_rs_produto_carrinho['qtd']."
";
$v_valoru .= number_format($row_rs_produto_carrinho['preco'],2,",",".")."
";
$v_subt .= number_format($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd'],2,",",".")."
";
//escolher entre calculo por cubagem ou calculo por medidas maximas
//calculo por cubagem dos correios
//include_once ("cal_cubagem.php");
//calculo por medidas maximas dos correios
include_once ("cal_medidas.php");
?>
Warning: Undefined variable $row_rs_produto_carrinho in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 939
Warning: Trying to access array offset on null in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 939
|
Warning: Undefined variable $row_rs_produto_carrinho in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 941
Warning: Trying to access array offset on null in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 941
|
}
if (!empty($alertas)) {
echo "";
}
// ====================================================
// CONFIGURAÇÕES DOS SERVIÇOS (centralizadas)
// ====================================================
$servicos_correio = [
'03298' => ['nome' => 'PAC', 'servico_add' => '064'],
'03220' => ['nome' => 'SEDEX', 'servico_add' => '019'],
];
// ====================================================
// FASE 1: CALCULAR FRETE (apenas CEP informado)
// ====================================================
$calcular_frete = false;
$selecionar_servico = false;
$resultados_frete = [];
$erro_frete = '';
// Verifica se veio requisição de calcular (apenas CEP)
if (isset($_POST['pesquisar']) && $_POST['pesquisar'] === 'Calcular' && !empty($cepdes)) {
$calcular_frete = true;
}
// Verifica se o cliente escolheu um serviço após ver os resultados
if (isset($_POST['servico_escolhido']) && !empty($_POST['servico_escolhido'])) {
$selecionar_servico = true;
$servicocor = $_POST['servico_escolhido'];
$_SESSION['servicocor'] = $servicocor;
// Recarrega frete salvo na sessão para exibir o finalizar
$resultados_frete = $_SESSION['resultados_frete'] ?? [];
$vl_frete_escolhido = $_SESSION['vl_frete_escolhido'] ?? 0;
$prazo_escolhido = $_SESSION['prazo_escolhido'] ?? '';
$cepdes = $_SESSION['cepdes'] ?? '';
}
// ====================================================
// CÁLCULO DOS CORREIOS (PAC + SEDEX juntos)
// ====================================================
if ($calcular_frete) {
// --- 1. Obter token ---
$curl_token = curl_init();
curl_setopt_array($curl_token, [
CURLOPT_URL => 'https://api.correios.com.br/token/v1/autentica/cartaopostagem',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"numero": "'.$cartao_postagem.'"}',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: ' . $auth_correios
],
]);
$resp_token = curl_exec($curl_token);
curl_close($curl_token);
$json_token = json_decode($resp_token, true);
$bearer = $json_token['token'] ?? '';
if (empty($bearer)) {
$erro_frete = 'Não foi possível autenticar nos Correios. Tente novamente.';
} else {
// --- 2. Montar array com os dois serviços para uma única chamada de preço ---
$params_preco = [];
$num_req = 1;
foreach ($servicos_correio as $coProduto => $info) {
$params_preco[] = [
'coProduto' => $coProduto,
'nuRequisicao' => (string)$num_req,
'nuContrato' => '9912397340',
'nuDR' => 64,
'cepDestino' => $cepdes,
'cepOrigem' => '95183000',
'psObjeto' => (string)$soma_frete,
'tpObjeto' => '2',
'servicosAdicionais'=> [[
'coServAdicional' => $info['servico_add'],
'tpServAdicional' => 'string',
'pcServicoAdicional'=> 'string',
]],
'vlDeclarado' => '50',
'comprimento' => (string)$compfrete,
'largura' => (string)$larfrete,
'altura' => (string)$altfrete,
];
$num_req++;
}
// --- 3. Chamar API de preço (um único POST com os dois serviços) ---
$body_preco = json_encode(['idLote' => '1', 'parametrosProduto' => $params_preco]);
$curl_preco = curl_init();
curl_setopt_array($curl_preco, [
CURLOPT_URL => 'https://api.correios.com.br/preco/v1/nacional',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $body_preco,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $bearer,
],
]);
$resp_preco = curl_exec($curl_preco);
curl_close($curl_preco);
$json_preco = json_decode($resp_preco, true);
// --- 4. Chamar API de prazo (também os dois juntos) ---
$params_prazo = [];
$num_req = 1;
foreach ($servicos_correio as $coProduto => $info) {
$params_prazo[] = [
'coProduto' => $coProduto,
'nuRequisicao'=> (string)$num_req,
'cepOrigem' => '95183000',
'cepDestino' => $cepdes,
];
$num_req++;
}
$body_prazo = json_encode(['idLote' => '1', 'parametrosPrazo' => $params_prazo]);
$curl_prazo = curl_init();
curl_setopt_array($curl_prazo, [
CURLOPT_URL => 'https://api.correios.com.br/prazo/v1/nacional',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $body_prazo,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $bearer,
],
]);
$resp_prazo = curl_exec($curl_prazo);
curl_close($curl_prazo);
$json_prazo = json_decode($resp_prazo, true);
// --- 5. Buscar cidade/UF pelo CEP ---
$curl_cep = curl_init();
curl_setopt_array($curl_cep, [
CURLOPT_URL => 'https://api.correios.com.br/cep/v2/enderecos/' . $cepdes,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $bearer],
]);
$resp_cep = curl_exec($curl_cep);
curl_close($curl_cep);
$json_cep = json_decode($resp_cep, true);
$cidade_cep = $json_cep['localidade'] ?? '';
$uf_cep = $json_cep['uf'] ?? '';
$_SESSION['cidade_cep'] = $cidade_cep;
$_SESSION['uf_cep'] = $uf_cep;
// --- 6. Montar resultados indexados por coProduto ---
$codigos = array_keys($servicos_correio);
foreach ($json_preco as $idx => $item_preco) {
$cod = $codigos[$idx] ?? null;
if (!$cod) continue;
$txErro = $item_preco['txErro'] ?? '';
if (!empty($txErro)) continue; // serviço indisponível — pula
$valor_bruto = (float)str_replace(',', '.', $item_preco['pcFinal'] ?? 0);
$valor_corrigido = $valor_bruto * 1.15; // sua margem de 15%
$prazo_dias = $json_prazo[$idx]['prazoEntrega'] ?? '-';
$resultados_frete[$cod] = [
'nome' => $servicos_correio[$cod]['nome'],
'valor' => $valor_corrigido,
'prazo' => $prazo_dias,
'cidade' => $cidade_cep,
'uf' => $uf_cep,
];
}
// Salva na sessão para usar quando o cliente escolher
$_SESSION['resultados_frete'] = $resultados_frete;
$_SESSION['cepdes'] = $cepdes;
if (empty($resultados_frete)) {
$erro_frete = 'Não foi possível calcular o frete pelos Correios para este CEP. Utilize a opção Transportadora ou Retirar na Loja.';
}
}
}
// ====================================================
// FASE 2: CLIENTE ESCOLHEU UM SERVIÇO → gravar sessão
// ====================================================
if ($selecionar_servico) {
if (isset($resultados_frete[$servicocor])) {
// Serviço dos Correios escolhido
$vl_frete_escolhido = $resultados_frete[$servicocor]['valor'];
$prazo_escolhido = $resultados_frete[$servicocor]['prazo'];
} else {
// Retirar na loja ou Transportadora
$vl_frete_escolhido = 0;
$prazo_escolhido = '';
}
$_SESSION['vl_frete_escolhido'] = $vl_frete_escolhido;
$_SESSION['prazo_escolhido'] = $prazo_escolhido;
$_SESSION['fret_export'] = $vl_frete_escolhido;
}
// ====================================================
// VARIÁVEIS PARA EXIBIÇÃO DOS TOTAIS
// (usa o frete escolhido se já houver seleção)
// ====================================================
$vl_frete = $vl_frete_escolhido ?? 0;
$cidade_cep = $_SESSION['cidade_cep'] ?? '';
$uf_cep = $_SESSION['uf_cep'] ?? '';
$desconto_cartao = $soma_carrinho - $soma_cartao;
$desconto = $soma_carrinho - $soma_desconto;
$soma_normal = $vl_frete + $soma_carrinho;
$soma_geral = $vl_frete + $soma_carrinho - $desconto;
$soma_geral_bruto = $vl_frete + $soma_carrinho - $desconto_cartao;
$_SESSION['fret_export'] = $vl_frete;
//opções do cartão e boleto
$boleto = $soma_geral_bruto;
$cartão = number_format($soma_geral_bruto,2,",",".");
$cartão2 = number_format(($soma_geral_bruto * 1.0451),2,",",".");
$cartão3 = number_format(($soma_geral_bruto * 1.0604),2,",",".");
$cartão4 = number_format(($soma_geral_bruto * 1.0759),2,",",".");
$cartão5 = number_format(($soma_geral_bruto * 1.0915),2,",",".");
$cartão6 = number_format(($soma_geral_bruto * 1.1072),2,",",".");
$cartão7 = number_format(($soma_geral_bruto * 1.1231),2,",",".");
$cartão8 = number_format(($soma_geral_bruto * 1.1392),2,",",".");
$cartão9 = number_format(($soma_geral_bruto * 1.1554),2,",",".");
$cartão10 = number_format(($soma_geral_bruto * 1.1717),2,",",".");
$cartão11 = number_format(($soma_geral_bruto * 1.1882),2,",",".");
$cartão12 = number_format(($soma_geral_bruto * 1.2048),2,",",".");
//parcelas de pagamento conforme opção
$cartãop2 = number_format((($soma_geral_bruto * 1.0451)/2),2,",",".");
$cartãop3 =number_format((($soma_geral_bruto * 1.0604)/3),2,",",".");
$cartãop4 =number_format((($soma_geral_bruto * 1.0759)/4),2,",",".");
$cartãop5 =number_format((($soma_geral_bruto * 1.0915)/5),2,",",".");
$cartãop6 =number_format((($soma_geral_bruto * 1.1072)/6),2,",",".");
$cartãop7 =number_format((($soma_geral_bruto * 1.1231)/7),2,",",".");
$cartãop8 =number_format((($soma_geral_bruto * 1.1392)/8),2,",",".");
$cartãop9 =number_format((($soma_geral_bruto * 1.1554)/9),2,",",".");
$cartãop10 =number_format((($soma_geral_bruto * 1.1717)/10),2,",",".");
$cartãop11 =number_format((($soma_geral_bruto * 1.1882)/11),2,",",".");
$cartãop12 =number_format((($soma_geral_bruto * 1.2048)/12),2,",",".");
$cp2 = (($soma_geral_bruto * 1.0451)/2);
$cp3 =(($soma_geral_bruto * 1.0604)/3);
$cp4 =(($soma_geral_bruto * 1.0759)/4);
$cp5 =(($soma_geral_bruto * 1.0915)/5);
$cp6 =(($soma_geral_bruto * 1.1072)/6);
$cp7 =(($soma_geral_bruto * 1.1231)/7);
$cp8 =(($soma_geral_bruto * 1.1392)/8);
$cp9 =(($soma_geral_bruto * 1.1554)/9);
$cp10 =(($soma_geral_bruto * 1.1717)/10);
$cp11 =(($soma_geral_bruto * 1.1882)/11);
$cp12 =(($soma_geral_bruto * 1.2048)/12);
//*final da inclusão do frete fecha php
}
?>
*TOTAL: |
R$
Warning: Undefined variable $soma_carrinho in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1198
0,00 |
|
|
*O desconto será concedido na tela de finalização do pedido conforme modalidade de pagamento escolhida.
Frete
if ($vl_frete > 0)
echo "
*Importante: O Prazo de entrega do serviço ".$nome_servico." para o CEP ".$cepdes."-".$cidade_cep."-".$uf_cep." é de ".$prazo." dias úteis a contar da data da postagem.
";
else
echo
"
";
?>
| VALOR DO FRETE: | R$
Warning: Undefined variable $vl_frete in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1339
0,00 |
Total
| TOTAL GERAL: | R$
Warning: Undefined variable $soma_normal in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1344
0,00 |
Cartão de Crédito ou Boleto com desconto de (R$
Warning: Undefined variable $desconto_cartao in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1345
0,00) |
Total R$
Warning: Undefined variable $boleto in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1346
0,00 |
| Boleto: | R$
Warning: Undefined variable $boleto in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1347
0,00
|
//variavel para aparecer a opção de cartão caso contrario não aparece
if($soma_geral_bruto > 5)
echo
"|
Cartão de crédito: |
R$ $cartão |
";
if($cp2 > 5)
echo"
| Parcelado Cartão 2X = (R$ $cartãop2) | R$ $cartão2 |
";
if($cp3 > 5)
echo"
| Parcelado Cartão 3X = (R$ $cartãop3) | R$ $cartão3 |
";
if($cp4 > 5)
echo"
| Parcelado Cartão 4X = (R$ $cartãop4) | R$ $cartão4 |
";
if($cp5 > 5)
echo"
| Parcelado Cartão 5X = (R$ $cartãop5) | R$ $cartão5 |
";
if($cp6 > 5)
echo"
| Parcelado Cartão 6X = (R$ $cartãop6) | R$ $cartão6 |
";
if($cp7 > 5)
echo"
| Parcelado Cartão 7X = (R$ $cartãop7) | R$ $cartão7 |
";
if($cp8 > 5)
echo"
| Parcelado Cartão 8X = (R$ $cartãop8) | R$ $cartão8 |
";
if($cp9 > 5)
echo"
| Parcelado Cartão 9X = (R$ $cartãop9) | R$ $cartão9 |
";
if($cp10 > 5)
echo"
| Parcelado Cartão 10X = (R$ $cartãop10) | R$ $cartão10 |
";
if($cp11 > 5)
echo"
| Parcelado Cartão 11X = (R$ $cartãop11) | R$ $cartão11 |
";
if($cp12 > 5)
echo"
| Parcelado Cartão 12X = (R$ $cartãop12) | R$ $cartão12 |
";
?>
Depósito Bancario com desconto de (R$
Warning: Undefined variable $desconto in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1428
0,00) = TOTAL GERAL: | R$
Warning: Undefined variable $soma_geral in /home/u620617588/domains/lojaupracing.com.br/public_html/carrinho.php on line 1428
0,00 |
| Formas de Pagamento Disponiveis. |
 |
 |
 |
|
|---|
if($vl_frete > 0)
echo'
|
';
else
if($servicocor ==="1"){
?>
echo'
Para a opção de Retirar na loja a mercadoria ficará a sua disposição a partir do momento em que for confirmado o pagamento e separação do pedido pela Equipe. A retirada poderá ser feita em horário comercial conforme combinado posteriormente entre as partes.
|
';}
else
if($servicocor ==="2"){
?>
echo'
Para a opção de Transportadora a mercadoria ficará a disposição para coleta a partir do momento em que for confirmado o pagamento e separação do pedido pela equipe operacional. O Acompanhamento do pedido pode ser feito diretamente pelo site. A retirada poderá ser agendada pelo Cliente ou pela equipe Up! Racing conforme combinado posteriormente entre as partes. Ao finalizar o pedido o cliente poderá indicar uma transportadora no campo designado ou a equipe indicará uma que atenda a região pretendida. Neste caso o valor do frete poderá ser a cobrar ou pago antecipado conforme negociado posteriormente.
|
';}
else//este deve ser retirado posteriormente conforme inplantar os correios novamente
if($servicocor ==="3")
echo'
Estamos tendo Instabilidades na ferramenta de calculo de frete pelos Correios PAC ou SEDEX. neste caso sugerimos que finalize o pedido e posteriormente calculamos o frete e informamos para depósito ou pagamento conforme a opção selecionada ao finalizar o pedido. Pedimos a compreensão e esperamos em breve normalizar este processo. Neste caso o valor do frete poderá ser pago juntamente com o pedido ou separadamente conforme negociado posteriormente.
|
';
else
if (($msgErro != "") && ($cepdes !=""))
{$_SESSION['servicocor'] = 2;
echo'
|
';
}else{
echo'
|
';
}
?>