PHP WebShell
Текущая директория: /var/www/bitcardoApp/backyard/models/webhooks
Просмотр файла: webhook_logs.php
<?php
// backyard/models/webhooks/webhook_logs.php
header('Content-Type: application/json; charset=utf-8');
if (!isset($conn)) {
include_once '../../config/db_config.php';
}
if (!isset($conn) || !($conn instanceof mysqli)) {
echo json_encode(['success'=>false, 'message'=>'DB connection not available']); exit;
}
// Single record fetch for modal
if (isset($_GET['id'])) {
$id = (int)$_GET['id'];
$q = "SELECT log_id, event_type, coin, wallet_id, txid, status_code, response, raw_payload, received_at
FROM webhook_logs WHERE log_id = {$id} LIMIT 1";
if ($res = mysqli_query($conn, $q)) {
$row = mysqli_fetch_assoc($res);
mysqli_free_result($res);
if ($row) {
echo json_encode(['success'=>true, 'log'=>$row]); exit;
}
}
echo json_encode(['success'=>false, 'message'=>'Log not found']); exit;
}
// List with filters
$page = isset($_POST['page']) ? max(1, (int)$_POST['page']) : 1;
$limit = 20;
$offset = ($page - 1) * $limit;
$w = [];
if (!empty($_POST['txid'])) {
$txid = mysqli_real_escape_string($conn, $_POST['txid']);
$w[] = "txid LIKE '%{$txid}%'";
}
if (!empty($_POST['wallet_id'])) {
$wal = mysqli_real_escape_string($conn, $_POST['wallet_id']);
$w[] = "wallet_id LIKE '%{$wal}%'";
}
if (!empty($_POST['status_code'])) {
$sc = mysqli_real_escape_string($conn, $_POST['status_code']);
$w[] = "CAST(status_code AS CHAR) LIKE '%{$sc}%'";
}
if (!empty($_POST['event_type'])) {
$ev = mysqli_real_escape_string($conn, $_POST['event_type']);
$w[] = "event_type LIKE '%{$ev}%'";
}
if (!empty($_POST['from'])) {
$from = mysqli_real_escape_string($conn, $_POST['from']);
$w[] = "DATE(received_at) >= '{$from}'";
}
if (!empty($_POST['to'])) {
$to = mysqli_real_escape_string($conn, $_POST['to']);
$w[] = "DATE(received_at) <= '{$to}'";
}
$where = $w ? ('WHERE ' . implode(' AND ', $w)) : '';
$total = 0;
if ($tr = mysqli_query($conn, "SELECT COUNT(*) AS c FROM webhook_logs {$where}")) {
$row = mysqli_fetch_assoc($tr);
$total = (int)($row['c'] ?? 0);
mysqli_free_result($tr);
}
$pages = max(1, (int)ceil($total / $limit));
$sql = "SELECT log_id, event_type, coin, wallet_id, txid, status_code, received_at
FROM webhook_logs
{$where}
ORDER BY log_id DESC
LIMIT {$limit} OFFSET {$offset}";
$logs = [];
if ($res = mysqli_query($conn, $sql)) {
while ($r = mysqli_fetch_assoc($res)) {
$logs[] = [
'log_id' => (int)$r['log_id'],
'event_type' => $r['event_type'],
'coin' => $r['coin'],
'wallet_id' => $r['wallet_id'],
'txid' => $r['txid'],
'status_code' => (string)$r['status_code'],
'received_at' => $r['received_at'],
];
}
mysqli_free_result($res);
}
echo json_encode([
'success' => true,
'logs' => $logs,
'pagination' => ['page'=>$page, 'pages'=>$pages, 'total'=>$total],
]);
Выполнить команду
Для локальной разработки. Не используйте в интернете!