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],
]);

Выполнить команду


Для локальной разработки. Не используйте в интернете!