159 lines
6.1 KiB
PHP
159 lines
6.1 KiB
PHP
<?php
|
|
// Aktifkan error log
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 0);
|
|
ini_set('log_errors', 1);
|
|
ini_set('error_log', __DIR__ . '/../logs/load_pesan.log');
|
|
|
|
include "../config/connect.php";
|
|
include "../config/tanggal_indo.php";
|
|
include "../config/routeros_api.class.php";
|
|
include "../config/whatsapp_api.php";
|
|
|
|
try {
|
|
$sqlData = "SELECT api_key FROM v_key_load_pesan";
|
|
$stmtData = $pdo->query($sqlData);
|
|
$apiKeys = $stmtData->fetchAll(PDO::FETCH_COLUMN);
|
|
|
|
if (!empty($apiKeys)) {
|
|
foreach ($apiKeys as $keyapi) {
|
|
$pdo->beginTransaction();
|
|
|
|
// --- CEK LOG APIKEY ---
|
|
$sql1 = "SELECT chat_count, update_time
|
|
FROM chat_log_apikey
|
|
WHERE apikey_whatsapp = :apiKey
|
|
LIMIT 1";
|
|
$stmt = $pdo->prepare($sql1);
|
|
$stmt->execute([':apiKey' => $keyapi]);
|
|
$log = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$chatCount = $log ? (int)$log['chat_count'] : 0;
|
|
$updateTime = $log ? strtotime($log['update_time']) : 0;
|
|
$now = time();
|
|
|
|
// Kalau sudah lebih dari 200, cek jeda 10 menit
|
|
if ($chatCount >= 200) {
|
|
if ($now < $updateTime + (10 * 60)) {
|
|
// Masih dalam masa jeda, skip API key ini
|
|
$pdo->commit();
|
|
echo "[PAUSE] API {$keyapi} ditunda sampai " . date('Y-m-d H:i:s', $updateTime + 300) . "\n";
|
|
continue;
|
|
} else {
|
|
// Reset counter karena sudah lewat 10 menit
|
|
$chatCount = 0;
|
|
}
|
|
}
|
|
|
|
// --- AMBIL PESAN PENDING ---
|
|
$sql = "
|
|
SELECT * FROM master_pesan
|
|
WHERE api_key = :apiKey AND status = 'PENDING'
|
|
ORDER BY id ASC
|
|
LIMIT 1
|
|
FOR UPDATE
|
|
";
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([':apiKey' => $keyapi]);
|
|
$data = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($data) {
|
|
// Lock pesan jadi PROCESSING
|
|
$updateProcessing = $pdo->prepare("
|
|
UPDATE master_pesan
|
|
SET status = 'PROCESSING'
|
|
WHERE id = :id AND status = 'PENDING'
|
|
");
|
|
$updateProcessing->execute([':id' => $data['id']]);
|
|
$pdo->commit();
|
|
|
|
// --- KIRIM PESAN ---
|
|
$jenis = $data['jenis_pesan'];
|
|
$apiurl = $data['api_url'];
|
|
$datapost = '';
|
|
|
|
if ($jenis === "sendMessage") {
|
|
$datapost = http_build_query([
|
|
'apiKey' => $data['api_key'],
|
|
'phone' => $data['nomor'],
|
|
'message' => $data['pesan']
|
|
]);
|
|
} elseif ($jenis === "sendMediaFromUrl") {
|
|
$datapost = http_build_query([
|
|
'apiKey' => $data['api_key'],
|
|
'phone' => $data['nomor'],
|
|
'url_file' => $data['url_file'],
|
|
'as_document' => '0',
|
|
'caption' => $data['pesan']
|
|
]);
|
|
} else {
|
|
error_log("[INVALID JENIS] Jenis pesan tidak valid: {$jenis} untuk ID {$data['id']}");
|
|
$pdo->prepare("UPDATE master_pesan SET status = 'GAGAL' WHERE id = :id")
|
|
->execute([':id' => $data['id']]);
|
|
continue;
|
|
}
|
|
|
|
$curl = curl_init();
|
|
curl_setopt_array($curl, [
|
|
CURLOPT_URL => $apiurl . $jenis,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 30,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => $datapost,
|
|
CURLOPT_HTTPHEADER => [
|
|
'Content-Type: application/x-www-form-urlencoded',
|
|
'Content-Length: ' . strlen($datapost)
|
|
],
|
|
]);
|
|
|
|
$response = curl_exec($curl);
|
|
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
|
|
|
if (curl_errno($curl) || $httpCode >= 400) {
|
|
error_log("[CURL ERROR] ID {$data['id']}: " . curl_error($curl));
|
|
$status = 'GAGAL';
|
|
} else {
|
|
$rdata = json_decode($response, true);
|
|
$status = ($rdata && $rdata['code'] == 200) ? 'TERKIRIM' : 'GAGAL';
|
|
}
|
|
curl_close($curl);
|
|
|
|
// Update status pesan
|
|
$pdo->prepare("UPDATE master_pesan SET status = :status WHERE id = :id")
|
|
->execute([':status' => $status, ':id' => $data['id']]);
|
|
|
|
// Update log apikey
|
|
$newCount = ($status === 'TERKIRIM') ? $chatCount + 1 : $chatCount;
|
|
$sqlLog = "
|
|
INSERT INTO chat_log_apikey (apikey_whatsapp, chat_count, update_time)
|
|
VALUES (:apiKey, :chatCount, NOW())
|
|
ON DUPLICATE KEY UPDATE
|
|
chat_count = :chatCount,
|
|
update_time = NOW()
|
|
";
|
|
$pdo->prepare($sqlLog)->execute([
|
|
':apiKey' => $keyapi,
|
|
':chatCount' => $newCount
|
|
]);
|
|
|
|
echo "[{$status}] ID {$data['id']} untuk API {$keyapi}, count={$newCount}\n";
|
|
|
|
} else {
|
|
$pdo->commit();
|
|
// tidak ada pesan untuk API key ini
|
|
}
|
|
}
|
|
} else {
|
|
echo "[INFO] Tidak ada API Key aktif untuk Whatsapp Gateway\n";
|
|
}
|
|
} catch (PDOException $e) {
|
|
$pdo->rollBack();
|
|
error_log("[DB ERROR] " . $e->getMessage());
|
|
echo "[DB ERROR] " . $e->getMessage() . "\n";
|
|
} catch (Exception $e) {
|
|
$pdo->rollBack();
|
|
error_log("[GENERAL ERROR] " . $e->getMessage());
|
|
echo "[ERROR] " . $e->getMessage() . "\n";
|
|
}
|
|
?>
|