<?php
// Tam yol belirtme
define('ROOT_PATH', dirname(__DIR__));
require_once ROOT_PATH . "/config.php";
require_once ROOT_PATH . "/functions.php";
require_once ROOT_PATH . "/includes/Shopier.php";
// Debug için
error_log('Callback başladı');
error_log('POST verisi: ' . print_r($_POST, true));
try {
// Shopier'dan gelen verileri al
$post = $_POST;
// Shopier doğrulama
$shopier = new Shopier($settings['shopier_api_key'], $settings['shopier_api_secret']);
error_log('Shopier nesnesi oluşturuldu');
if($shopier->verifyPayment($post)) {
error_log('Ödeme doğrulandı');
// Sipariş bilgilerini al
$order_id = $post['platform_order_id'];
$payment_id = $post['payment_id'];
$status = $post['status'];
if ($status === 'success') {
// Ödeme başarılı
$payment_query = mysqli_query($conn, "SELECT * FROM payments WHERE transaction_id = '$order_id' LIMIT 1");
$payment = mysqli_fetch_assoc($payment_query);
if ($payment) {
// Kullanıcı bakiyesini güncelle
$user_id = $payment['user_id'];
$amount = $payment['amount'];
mysqli_query($conn, "UPDATE users SET balance = balance + $amount WHERE id = $user_id");
mysqli_query($conn, "UPDATE payments SET status = 'completed', transaction_id = '$payment_id' WHERE id = {$payment['id']}");
error_log('Bakiye güncellendi');
// Başarılı sayfasına yönlendir
header("Location: ../?sayfa=payment_success");
exit;
}
} else {
error_log('Ödeme başarısız: ' . $status);
// Ödeme başarısız
header("Location: ../?sayfa=payment_failed");
exit;
}
} else {
error_log('İmza doğrulaması başarısız');
// İmza doğrulaması başarısız
header("Location: ../?sayfa=payment_failed");
exit;
}
} catch (Exception $e) {
error_log('Hata: ' . $e->getMessage());
header("Location: ../?sayfa=payment_failed");
exit;
}callback sayfam böyleadd balance sayfam da şöyle
<?php
if(!isset($_SESSION['user_id'])) {
header("Location: ?sayfa=login");
exit;
}
// Kullanıcı bilgilerini çek
$user = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM users WHERE id = {$_SESSION['user_id']}"));
// Ayarları veritabanından çek
$settings_query = mysqli_query($conn, "SELECT * FROM settings");
$settings = [];
while($row = mysqli_fetch_assoc($settings_query)) {
$settings[$row['name']] = $row['value'];
}
// Shopier sınıfını dahil et
require_once 'includes/Shopier.php';
// Bakiye yükleme işlemi
if(isset($_POST['add_balance'])) {
$amount = (float)$_POST['amount'];
$min_payment = (float)$settings['min_payment'];
$max_payment = (float)$settings['max_payment'];
if($amount < $min_payment || $amount > $max_payment) {
$error = "Yükleme tutarı {$min_payment} ₺ ile {$max_payment} ₺ arasında olmalıdır.";
} else {
// Shopier API anahtarlarını kontrol et
if(empty($settings['shopier_api_key']) || empty($settings['shopier_api_secret'])) {
$error = "Ödeme sistemi ayarları eksik. Lütfen site yöneticisi ile iletişime geçin.";
} else {
try {
// Ödeme kaydı oluştur
$order_id = time() . rand(1, 9999);
mysqli_query($conn, "INSERT INTO payments (user_id, amount, payment_method, transaction_id, status)
VALUES ({$user['id']}, $amount, 'shopier', '$order_id', 'pending')");
// Shopier nesnesi oluştur
$shopier = new Shopier(
$settings['shopier_api_key'],
$settings['shopier_api_secret'],
$settings['shopier_test_mode'] == 1
);
// Kullanıcı bilgileri
$buyer = [
'id' => $user['id'],
'name' => $user['username'],
'email' => $user['email'],
'phone' => '5555555555' // Telefon numarası 10 haneli olmalı
];
// Site URL'ini kontrol et ve https kullan
$site_url = !empty($settings['site_url']) ? $settings['site_url'] :
"https://$_SERVER[HTTP_HOST]";
// Debug için
error_log('Site URL: ' . $site_url);
error_log('Order ID: ' . $order_id);
error_log('Amount: ' . $amount);
// Ödeme sayfasına yönlendir
$shopier->goToPayment(
$order_id,
$amount,
$site_url . "/shopier/callback.php",
$buyer
);
} catch (Exception $e) {
$error = "Ödeme işlemi başlatılamadı: " . $e->getMessage();
// Hata durumunda ödeme kaydını sil
mysqli_query($conn, "DELETE FROM payments WHERE transaction_id = '$order_id' AND status = 'pending'");
}
}
}
}
// Eğer API anahtarları eksikse admin için uyarı göster
if(isset($_SESSION['is_admin']) && $_SESSION['is_admin'] && (empty($settings['shopier_api_key']) || empty($settings['shopier_api_secret']))) {
$warning = 'Shopier API anahtarları ayarlanmamış. <a href="admin/?sayfa=settings">Buradan ayarlayabilirsiniz</a>.';
}
?>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h3 class="card-title text-center mb-4">Bakiye Yükle</h3>
<?php if(isset($error)): ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<!-- Uyarı mesajını göster -->
<?php if(isset($warning)): ?>
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<?php echo $warning; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<?php endif; ?>
<!-- Mevcut Bakiye -->
<div class="text-center mb-4">
<div class="h5 text-muted mb-2">Mevcut Bakiye</div>
<div class="h2 text-primary"><?php echo number_format($user['balance'], 2); ?> ₺</div>
</div>
<!-- Bakiye Yükleme Formu -->
<form method="POST" class="add-balance-form">
<div class="mb-4">
<label class="form-label">Yüklenecek Tutar</label>
<div class="input-group">
<input type="number" name="amount" class="form-control form-control-lg"
min="<?php echo $settings['min_payment']; ?>"
max="<?php echo $settings['max_payment']; ?>"
step="1" required>
<span class="input-group-text">₺</span>
</div>
<small class="text-muted">
Min: <?php echo number_format($settings['min_payment']); ?> ₺ -
Max: <?php echo number_format($settings['max_payment']); ?> ₺
</small>
</div>
<!-- Hızlı Tutar Seçimi -->
<div class="quick-amounts mb-4">
<div class="row g-2">
<?php
$amounts = [10, 20, 50, 100, 250, 500];
foreach($amounts as $amount):
?>
<div class="col-4">
<button type="button" class="btn btn-outline-primary w-100 amount-btn"
data-amount="<?php echo $amount; ?>">
<?php echo $amount; ?> ₺
</button>
</div>
<?php endforeach; ?>
</div>
</div>
<!-- Ödeme Yöntemi -->
<div class="payment-method mb-4">
<div class="d-flex align-items-center p-3 bg-light rounded">
<img src="images/shopier-logo.png" alt="Shopier" height="30">
<div class="ms-3">
<div class="fw-bold">Shopier</div>
<small class="text-muted">Güvenli Ödeme</small>
</div>
<div class="ms-auto">
<i class="fas fa-check-circle text-success"></i>
</div>
</div>
</div>
<button type="submit" name="add_balance" class="btn btn-primary btn-lg w-100">
<i class="fas fa-plus-circle me-2"></i>Bakiye Yükle
</button>
</form>
</div>
</div>
<!-- Son İşlemler -->
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Son İşlemler</h5>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Tarih</th>
<th>Tutar</th>
<th>Durum</th>
</tr>
</thead>
<tbody>
<?php
$payments = mysqli_query($conn, "
SELECT * FROM payments
WHERE user_id = {$user['id']}
ORDER BY id DESC LIMIT 5
");
while($payment = mysqli_fetch_assoc($payments)):
?>
<tr>
<td><?php echo date('d.m.Y H:i', strtotime($payment['created_at'])); ?></td>
<td><?php echo number_format($payment['amount'], 2); ?> ₺</td>
<td>
<span class="badge bg-<?php
echo $payment['status'] == 'completed' ? 'success' :
($payment['status'] == 'pending' ? 'warning' : 'danger');
?>">
<?php echo ucfirst($payment['status']); ?>
</span>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.add-balance-form .amount-btn {
padding: 0.75rem;
font-weight: 500;
}
.add-balance-form .amount-btn:hover {
background: var(--primary-color);
color: white;
border-color: var(--primary-color);
}
.payment-method {
border: 2px solid #eee;
border-radius: 10px;
cursor: not-allowed;
}
@media (max-width: 768px) {
.amount-btn {
padding: 0.5rem;
font-size: 0.9rem;
}
}
</style>
<script>
// Hızlı tutar seçimi
$('.amount-btn').click(function() {
$('input[name="amount"]').val($(this).data('amount'));
});
</script>
