home
/
u529748449
/
domains
/
borabilhete.com
/
public_html
/
public
➕ New
📤 Upload
✎ Editing:
checkout_mp.php
← Back
<?php // public/checkout_mp.php ini_set('display_errors', 1); error_reporting(E_ALL); session_start(); include '../admin/conexao.php'; // Carrega o SDK require __DIR__ . '/../vendor/autoload.php'; // >>> TROQUE pelo seu Access Token de PRODUÇÃO <<< MercadoPago\SDK::setAccessToken('APP_USR-3015882569703700-071711-383174b1d312d3019b1612810d746d03-213132560'); // 1) Valida o ID do pedido $id_pedido = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); if (!$id_pedido) { exit('Pedido inválido.'); } // 2) Busca dados do pedido $stmt = $conn->prepare(" SELECT p.id, p.nome_cliente, p.email, p.token_seguro FROM pedidos p WHERE p.id = ? LIMIT 1 "); $stmt->bind_param("i", $id_pedido); $stmt->execute(); $pedido = $stmt->get_result()->fetch_assoc(); if (!$pedido) { exit('Pedido não encontrado.'); } // 3) Busca itens do pedido (valor_unitario + taxa = preço final unitário) $stmtIt = $conn->prepare(" SELECT i.id_setor, s.nome_setor, i.quantidade, i.valor_unitario, i.taxa FROM pedidos_itens i INNER JOIN setores s ON s.id = i.id_setor WHERE i.id_pedido = ? "); $stmtIt->bind_param("i", $id_pedido); $stmtIt->execute(); $itensRes = $stmtIt->get_result(); $items = []; $total = 0.0; while ($row = $itensRes->fetch_assoc()) { $qtd = (int)$row['quantidade']; $valor_unit = (float)$row['valor_unitario']; $taxa = (float)$row['taxa']; $unit_price_final = round($valor_unit + $taxa, 2); if ($qtd <= 0 || $unit_price_final <= 0) continue; $total += $unit_price_final * $qtd; $item = new MercadoPago\Item(); $item->title = $row['nome_setor']; $item->quantity = $qtd; $item->currency_id = 'BRL'; $item->unit_price = $unit_price_final; $items[] = $item; } if (empty($items) || $total <= 0) { exit('Itens do pedido inválidos.'); } // 4) Monta a Preference (Checkout Pro) $preference = new MercadoPago\Preference(); $preference->items = $items; // >>> AQUI ESTÁ O AJUSTE: usar objeto Payer, não array if (!empty($pedido['nome_cliente']) || !empty($pedido['email'])) { $payer = new MercadoPago\Payer(); if (!empty($pedido['nome_cliente'])) $payer->name = $pedido['nome_cliente']; if (!empty($pedido['email'])) $payer->email = $pedido['email']; $preference->payer = $payer; } // Amarração com seu pedido $preference->external_reference = (string)$id_pedido; $preference->metadata = ['id_pedido' => $id_pedido]; // URLs de retorno (use seu domínio atual) $base = 'https://borabilhete.com'; $preference->back_urls = [ 'success' => $base . '/public/sucesso.php?token=' . urlencode($pedido['token_seguro']), 'pending' => $base . '/public/aguardando.php?token=' . urlencode($pedido['token_seguro']), 'failure' => $base . '/public/aguardando.php?token=' . urlencode($pedido['token_seguro']), ]; $preference->auto_return = 'approved'; // Webhook (confirmação server-to-server) $preference->notification_url = $base . '/webhooks/mercadopago.php'; // (Opcional) limitar meios/parcelas — cuidado: em algumas versões do SDK isso também é objeto. // Deixe comentado até tudo funcionar. // $preference->payment_methods = ['installments' => 12]; try { // 5) Cria e redireciona $preference->save(); if (!empty($preference->init_point)) { header('Location: ' . $preference->init_point); exit; } http_response_code(500); echo 'Não foi possível iniciar o Checkout Pro.'; } catch (Throwable $e) { http_response_code(500); echo 'Erro ao criar Preference: ' . htmlspecialchars($e->getMessage()); // Opcional: logue $e->getTraceAsString() }
💾 Save Changes
Cancel
📤 Upload File
×
Select File
Upload
Cancel
➕ Create New
×
Type
📄 File
📁 Folder
Name
Create
Cancel
✎ Rename Item
×
Current Name
New Name
Rename
Cancel
🔐 Change Permissions
×
Target File
Permission (e.g., 0755, 0644)
0755
0644
0777
Apply
Cancel