Files
wevads-platform/scripts/api_bounce-handler.php
2026-02-26 04:53:11 +01:00

62 lines
3.0 KiB
PHP
Executable File

<?php
header('Content-Type: application/json');
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
$pdo->exec("CREATE TABLE IF NOT EXISTS admin.bounces (id SERIAL PRIMARY KEY, email VARCHAR(255), bounce_type VARCHAR(50), reason TEXT, campaign_id INTEGER, received_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
$pdo->exec("CREATE TABLE IF NOT EXISTS admin.suppressions (id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE, reason VARCHAR(100), added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
$action = $_POST['action'] ?? $_GET['action'] ?? '';
switch ($action) {
case 'report':
$stmt = $pdo->prepare("INSERT INTO admin.bounces (email, bounce_type, reason, campaign_id) VALUES (?, ?, ?, ?)");
$stmt->execute([$_POST['email'], $_POST['type'] ?? 'hard', $_POST['reason'] ?? '', $_POST['campaign_id'] ?? 0]);
if ($_POST['type'] == 'hard') {
$pdo->prepare("INSERT INTO admin.suppressions (email, reason) VALUES (?, ?) ON CONFLICT (email) DO NOTHING")->execute([$_POST['email'], 'hard_bounce']);
}
echo json_encode(['success' => true]);
break;
case 'check':
$stmt = $pdo->prepare("SELECT * FROM admin.suppressions WHERE email = ?");
$stmt->execute([$_GET['email']]);
$suppressed = $stmt->fetch(PDO::FETCH_ASSOC);
echo json_encode(['suppressed' => (bool)$suppressed, 'data' => $suppressed]);
break;
case 'list':
$bounces = $pdo->query("SELECT * FROM admin.bounces ORDER BY received_at DESC LIMIT 100")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['bounces' => $bounces]);
break;
case 'suppressions':
$list = $pdo->query("SELECT * FROM admin.suppressions ORDER BY added_at DESC LIMIT 500")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['suppressions' => $list, 'count' => count($list)]);
break;
case 'add_suppression':
$stmt = $pdo->prepare("INSERT INTO admin.suppressions (email, reason) VALUES (?, ?) ON CONFLICT (email) DO NOTHING");
$stmt->execute([$_POST['email'], $_POST['reason'] ?? 'manual']);
echo json_encode(['success' => true]);
break;
case 'remove_suppression':
$pdo->prepare("DELETE FROM admin.suppressions WHERE email = ?")->execute([$_POST['email']]);
echo json_encode(['success' => true]);
break;
case 'stats':
echo json_encode([
'total_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces")->fetchColumn(),
'hard_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces WHERE bounce_type = 'hard'")->fetchColumn(),
'soft_bounces' => $pdo->query("SELECT COUNT(*) FROM admin.bounces WHERE bounce_type = 'soft'")->fetchColumn(),
'suppressions' => $pdo->query("SELECT COUNT(*) FROM admin.suppressions")->fetchColumn()
]);
break;
default:
echo json_encode(['actions' => ['report', 'check', 'list', 'suppressions', 'add_suppression', 'remove_suppression', 'stats']]);
}