Pisah server penyimpanan dan update payment gateway

This commit is contained in:
WD - Dev
2025-11-10 17:44:35 +07:00
parent 6017dfd369
commit 4a7c248fff
3044 changed files with 1586515 additions and 481 deletions
+58 -24
View File
@@ -1,10 +1,11 @@
const { exec } = require('child_process');
const path = require('path');
const fs = require('fs');
// Jalur ke executable PHP
// === Konfigurasi dasar ===
const phpExecutablePath = '/www/server/php/74/bin/php';
// Daftar jalur ke file PHP
// Daftar file PHP utama
const phpScriptPaths = [
path.join(__dirname, 'load_pesan.php'),
path.join(__dirname, 'load_tagihan_flip.php'),
@@ -12,47 +13,80 @@ const phpScriptPaths = [
path.join(__dirname, 'load_tagihan_paydisini.php'),
];
// --- File tambahan setiap 1 detik ---
// File tambahan (jalan tiap 1 detik)
const loadWAOfficialPath = path.join(__dirname, 'load_pesan_official.php');
// Fungsi untuk menjalankan 1 file PHP (Promise)
// === Pengaturan Log ===
const LOG_DIR = path.join(__dirname, 'logs');
const LOG_FILE = path.join(LOG_DIR, 'service.log');
const MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB per file
// Pastikan folder logs ada
if (!fs.existsSync(LOG_DIR)) fs.mkdirSync(LOG_DIR);
// Fungsi menulis log efisien (rotasi otomatis)
function writeLog(message, isError = false) {
const timestamp = new Date().toISOString();
const formatted = `[${timestamp}] ${isError ? '[ERROR]' : '[INFO] '} ${message}\n`;
try {
// Cek ukuran file log
if (fs.existsSync(LOG_FILE) && fs.statSync(LOG_FILE).size > MAX_LOG_SIZE) {
const old = LOG_FILE.replace('.log', `_${Date.now()}.log`);
fs.renameSync(LOG_FILE, old);
}
fs.appendFileSync(LOG_FILE, formatted, { encoding: 'utf8' });
} catch (e) {
console.error('Log write failed:', e.message);
}
}
// Fungsi menjalankan file PHP
function runPhpScript(phpScriptPath) {
return new Promise((resolve) => {
console.log(`Running command: ${phpExecutablePath} ${phpScriptPath}`);
exec(`${phpExecutablePath} ${phpScriptPath}`, (error, stdout, stderr) => {
const cmd = `${phpExecutablePath} ${phpScriptPath}`;
writeLog(`Running command: ${cmd}`);
exec(cmd, { maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
if (error) {
console.error(`Error executing PHP script ${phpScriptPath}: ${error.message}`);
} else if (stderr) {
console.error(`PHP script ${phpScriptPath} stderr: ${stderr}`);
} else {
console.log(`PHP script ${phpScriptPath} output: ${stdout}`);
writeLog(`Error executing PHP script ${phpScriptPath}: ${error.message}`, true);
} else if (stderr && stderr.trim()) {
writeLog(`PHP script ${phpScriptPath} stderr: ${stderr.trim()}`, true);
} else if (stdout && stdout.trim()) {
// Batasi panjang log agar efisien
const output = stdout.trim().substring(0, 300);
writeLog(`PHP script ${phpScriptPath} output: ${output}${stdout.length > 300 ? '...' : ''}`);
}
resolve(); // tetap resolve biar lanjut meskipun error
resolve();
});
});
}
// Fungsi utama
// Fungsi utama untuk load semua script (515 detik)
async function runPhpScripts() {
// Jalankan semua script secara paralel
await Promise.all(phpScriptPaths.map(runPhpScript));
// Random delay 515 detik
const nextDelay = Math.floor(Math.random() * (10000 - 5000 + 1)) + 5000;
console.log(`Next run in ${nextDelay / 1000} seconds\n`);
// Jalankan lagi setelah delay
writeLog(`Next run in ${nextDelay / 1000} seconds`);
setTimeout(runPhpScripts, nextDelay);
}
// Fungsi loop cepat (1 detik)
function runLoadWAOfficial() {
runPhpScript(loadWAOfficialPath).then(() => {
setTimeout(runLoadWAOfficial, 1000);
});
// Fungsi loop khusus loadWAOfficial (tiap 1 detik)
async function runLoadWAOfficial() {
try {
await runPhpScript(loadWAOfficialPath);
await new Promise(resolve => setTimeout(resolve, 1000));
runLoadWAOfficial();
} catch (error) {
writeLog(`Error saat menjalankan loadWAOfficial: ${error.message}`, true);
setTimeout(runLoadWAOfficial, 5000);
}
}
// Tangani error global agar tidak crash
process.on('unhandledRejection', err => writeLog(`Unhandled Rejection: ${err.message}`, true));
process.on('uncaughtException', err => writeLog(`Uncaught Exception: ${err.message}`, true));
// Jalankan pertama kali
runPhpScripts();
runLoadWAOfficial();
+7 -2
View File
@@ -71,12 +71,16 @@ try {
$sekarang = date('Y-m-d');
if ($sekarang === $cektanggal) {
$keteranganName = ucwords(strtolower(preg_replace('/[^a-zA-Z\s]/', '', $data['nama'])));
$keteranganFlip = str_replace('Layanan Internet ', '', $data['keterangan']) . " (an. " . $keteranganName . ")";
// Buat link payment gateway
require '../payment/flip/Flip/Transaction.php';
$flip = new FlipPaymentGateway($apiKey, $apiUrl);
$response = $flip->createBill(
sanitizeString($data['keterangan']),
sanitizeString($keteranganFlip),
sanitizeString($data['verifikasi_tagihan']),
$data['email'],
sanitizeString($data['nama']),
@@ -100,8 +104,9 @@ try {
':transaction_status' => $transaction_status,
':idtag' => $data['id']
]);
echo "[SUCCESS] {$data['nama']} ({$data['id']}) link dibuat.\n";
echo "[SUCCESS] {$data['nama']} ({$data['id']}) Server Id :{$data['id_data_server']} , link dibuat.\n";
$linkCreated = true; // Set penanda ada link dibuat
} else {
error_log("[ERROR] Flip API gagal untuk tagihan ID {$data['id']}");
+121 -117
View File
@@ -1,117 +1,121 @@
[16:00:01] [OK] 103.26.176.81
[16:00:01] [OK] 103.188.169.123
[16:00:01] [OK] 103.26.176.85
[16:00:01] [OK] 103.188.169.121
[16:00:01] [OK] 103.26.176.83
[16:00:01] [OK] 103.155.198.185
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] 103.188.169.127
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] 157.20.128.231
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] tunnel.manjapro.net
[16:00:02] [OK] 103.155.196.145
[16:00:02] [OK] 103.26.176.93
[16:00:03] [OK] 103.242.104.69
[16:00:03] [OK] tunnel.manjapro.net
[16:00:03] [OK] 103.94.10.112
[16:00:03] [OK] tunnel.manjapro.net
[16:00:03] [OK] 103.31.233.237
[16:00:03] [OK] tunnel.manjapro.net
[16:00:03] [OK] 103.18.79.171
[16:00:04] [OK] 103.26.176.87
[16:00:04] [OK] 103.155.199.191
[16:00:04] [OK] tunnel.manjapro.net
[16:00:04] [OK] tunnel.manjapro.net
[16:00:04] [OK] tunnel.manjapro.net
[16:00:05] [OK] 103.236.190.109
[16:00:05] [OK] 103.242.106.56
[16:00:05] [FAIL] 103.67.80.126
[16:00:06] [FAIL] tunnel.bilspro.com
[16:00:06] [FAIL] tunnel.bilspro.com
[16:00:07] [FAIL] 103.94.10.240
[16:00:07] [FAIL] 103.94.10.240
[16:00:08] [FAIL] 103.94.10.240
[16:00:08] [OK] tunnel.manjapro.net
[16:00:08] [FAIL] tunnel.bilspro.com
[16:00:09] [FAIL] infinnet.cloud
[16:00:09] [OK] tunnel.manjapro.net
[16:00:09] [OK] tunnel.manjapro.net
[16:00:09] [FAIL] 103.155.198.109
[16:00:09] [OK] tunnel.manjapro.net
[16:00:10] [OK] tunnel.manjapro.net
[16:00:10] [OK] tunnel.manjapro.net
[16:00:10] [OK] tunnel.manjapro.net
[16:00:10] [OK] tunnel.manjapro.net
[16:00:10] [OK] tunnel.manjapro.net
[16:00:11] [FAIL] infinnet.cloud
[16:00:11] [FAIL] tunnel.bilspro.com
[16:00:11] [OK] tunnel.manjapro.net
[16:00:14] [FAIL] tunnel.manjapro.net
[16:00:15] [FAIL] 103.103.147.225
[16:00:15] [FAIL] 157.20.12
[16:00:15] [FAIL] 114.141.51.12
[16:00:17] [FAIL] 114.141.51.12
[2025-10-18 16:00:17] Semua child selesai. Mulai update DB...
[16:00:17] [UPDATE DB] 03FK-Q7XE1
[16:00:17] [UPDATE DB] IDLF-SK944
[16:00:17] [UPDATE DB] TYF0-3RP75
[16:00:18] [UPDATE DB] 0YDS-EI1V6
[16:00:18] [UPDATE DB] C7CU-PGT97
[16:00:18] [UPDATE STATUS] 7FZH-WIBI8 (Disconnected -> Disconnected)
[16:00:19] [UPDATE DB] YHVJ-ZN9V9
[16:00:20] [UPDATE DB] C7CU-PGT910
[16:00:20] [UPDATE DB] MPK0-Q43P11
[16:00:20] [UPDATE DB] S9QL-XRJ512
[16:00:21] [UPDATE DB] HHJH-UFWL14
[16:00:21] [UPDATE DB] 03FK-Q7XE15
[16:00:21] [UPDATE DB] DG7B-JP4218
[16:00:21] [UPDATE DB] XXWL-VMH419
[16:00:21] [UPDATE DB] 03FK-Q7XE20
[16:00:21] [UPDATE DB] C7CU-PGT922
[16:00:21] [UPDATE DB] 8FHL-TXVS23
[16:00:21] [UPDATE DB] Q23C-IE2524
[16:00:21] [UPDATE DB] Q4D5-ATUM25
[16:00:21] [UPDATE DB] HHJH-UFWL28
[16:00:21] [UPDATE DB] 11P4-SII029
[16:00:21] [UPDATE DB] CUAA-CD2K30
[16:00:21] [UPDATE DB] S1Z8-TK6932
[16:00:21] [UPDATE DB] H67G-R4AK33
[16:00:21] [UPDATE STATUS] 9RV7-3W5U34 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] 32PA-DAZ435
[16:00:21] [UPDATE STATUS] LJQ6-KDDJ37 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] 0TW0-J74U38
[16:00:21] [UPDATE DB] L7TJ-IF2G39
[16:00:21] [UPDATE DB] RWDJ-NXBZ40
[16:00:21] [UPDATE DB] A26W-ART341
[16:00:21] [UPDATE STATUS] RE5H-G12Y42 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] 03FK-Q7XE43 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] Q96U-20UZ44 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] D3TU-JN5745
[16:00:21] [UPDATE DB] 7SDF-17X546
[16:00:21] [UPDATE DB] HMAZ-3HSX51
[16:00:21] [UPDATE STATUS] PQJB-HG8V53 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] PMA9-QC7654 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] 7ZCI-NFCI62 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] 0E73-PABK63 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] 4MZF-SFTR65 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] PJC8-K0EG66 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] 351D-5NCH67 (Disconnected -> Disconnected)
[16:00:21] [UPDATE STATUS] A0S7-K2IC69 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] G9Z1-HRLY70
[16:00:21] [UPDATE STATUS] C7CU-PGT972 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] 66AU-Z7I573
[16:00:21] [UPDATE DB] S9QL-XRJ575
[16:00:21] [UPDATE DB] ABMS-YBP776
[16:00:21] [UPDATE DB] C7CU-PGT977
[16:00:21] [UPDATE DB] C7CU-PGT978
[16:00:21] [UPDATE DB] HHJH-UFWL81
[16:00:21] [UPDATE DB] 83
[16:00:21] [UPDATE STATUS] RNS6-DB3N84 (Disconnected -> Disconnected)
[16:00:21] [UPDATE DB] C7CU-PGT987
[16:00:21] [UPDATE DB] ZMVC-KAFH88
[2025-10-18 16:00:21] Update DB selesai. OK: 57, FAIL: 0
[2025-10-18 16:00:21] Lama eksekusi: 19.82 detik
[17:42:01] [OK] 103.26.176.81
[17:42:01] [OK] 103.188.169.123
[17:42:01] [OK] 103.26.176.85
[17:42:01] [OK] 103.188.169.121
[17:42:01] [OK] 103.26.176.83
[17:42:01] [OK] tunnel.manjapro.net
[17:42:01] [OK] tunnel.manjapro.net
[17:42:01] [OK] tunnel.manjapro.net
[17:42:01] [OK] tunnel.manjapro.net
[17:42:01] [OK] 103.155.198.185
[17:42:01] [OK] 103.188.169.127
[17:42:01] [OK] tunnel.manjapro.net
[17:42:02] [OK] tunnel.manjapro.net
[17:42:02] [OK] 103.26.176.87
[17:42:02] [OK] tunnel.manjapro.net
[17:42:02] [OK] 103.236.190.109
[17:42:02] [OK] tunnel.manjapro.net
[17:42:02] [OK] 103.26.176.93
[17:42:02] [OK] 103.155.196.145
[17:42:02] [OK] 103.242.104.69
[17:42:02] [OK] 103.31.233.237
[17:42:02] [OK] gusjampang.xyz
[17:42:03] [OK] tunnel.manjapro.net
[17:42:03] [OK] tunnel.manjapro.net
[17:42:03] [OK] 103.18.79.171
[17:42:03] [OK] 103.155.199.191
[17:42:04] [OK] tunnel.manjapro.net
[17:42:04] [OK] 103.242.106.56
[17:42:05] [FAIL] 103.67.80.126
[17:42:05] [FAIL] 157.20.128.231
[17:42:05] [OK] tunnel.manjapro.net
[17:42:06] [FAIL] tunnel.bilspro.com
[17:42:06] [FAIL] tunnel.bilspro.com
[17:42:06] [FAIL] 103.94.10.240
[17:42:06] [OK] tunnel.manjapro.net
[17:42:07] [FAIL] 103.94.10.240
[17:42:07] [FAIL] 103.94.10.240
[17:42:07] [OK] tunnel.manjapro.net
[17:42:08] [FAIL] tunnel.bilspro.com
[17:42:09] [FAIL] infinnet.cloud
[17:42:09] [OK] tunnel.manjapro.net
[17:42:09] [OK] tunnel.manjapro.net
[17:42:09] [OK] tunnel.manjapro.net
[17:42:10] [OK] tunnel.manjapro.net
[17:42:10] [OK] tunnel.manjapro.net
[17:42:10] [OK] tunnel.manjapro.net
[17:42:10] [OK] tunnel.manjapro.net
[17:42:10] [OK] tunnel.manjapro.net
[17:42:11] [FAIL] infinnet.cloud
[17:42:11] [FAIL] tunnel.bilspro.com
[17:42:11] [FAIL] 103.155.198.109
[17:42:11] [OK] tunnel.manjapro.net
[17:42:15] [FAIL] tunnel.manjapro.net
[17:42:16] [FAIL] 157.20.12
[17:42:16] [FAIL] tunnel.manjapro.net
[17:42:16] [FAIL] 114.141.51.12
[17:42:16] [FAIL] 114.141.51.12
[17:42:17] [FAIL] 103.103.147.225
[17:42:20] [FAIL] tunnel.manjapro.net
[2025-11-10 17:42:20] Semua child selesai. Mulai update DB...
[17:42:20] [UPDATE DB] 03FK-Q7XE1
[17:42:20] [UPDATE DB] IDLF-SK944
[17:42:20] [UPDATE DB] TYF0-3RP75
[17:42:20] [UPDATE DB] 0YDS-EI1V6
[17:42:20] [UPDATE DB] C7CU-PGT97
[17:42:20] [UPDATE STATUS] 7FZH-WIBI8 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] YHVJ-ZN9V9
[17:42:20] [UPDATE DB] C7CU-PGT910
[17:42:20] [UPDATE DB] MPK0-Q43P11
[17:42:20] [UPDATE DB] S9QL-XRJ512
[17:42:20] [UPDATE DB] HHJH-UFWL14
[17:42:20] [UPDATE DB] 03FK-Q7XE15
[17:42:20] [UPDATE DB] DG7B-JP4218
[17:42:20] [UPDATE DB] XXWL-VMH419
[17:42:20] [UPDATE DB] 03FK-Q7XE20
[17:42:20] [UPDATE DB] C7CU-PGT922
[17:42:20] [UPDATE DB] 8FHL-TXVS23
[17:42:20] [UPDATE DB] Q23C-IE2524
[17:42:20] [UPDATE STATUS] Q4D5-ATUM25 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] 03FK-Q7XE28
[17:42:20] [UPDATE DB] 11P4-SII029
[17:42:20] [UPDATE DB] CUAA-CD2K30
[17:42:20] [UPDATE DB] 03FK-Q7XE32
[17:42:20] [UPDATE DB] H67G-R4AK33
[17:42:20] [UPDATE STATUS] 9RV7-3W5U34 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] 32PA-DAZ435
[17:42:20] [UPDATE STATUS] LJQ6-KDDJ37 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] 0TW0-J74U38
[17:42:20] [UPDATE DB] L7TJ-IF2G39
[17:42:20] [UPDATE DB] RWDJ-NXBZ40
[17:42:20] [UPDATE DB] A26W-ART341
[17:42:20] [UPDATE STATUS] RE5H-G12Y42 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] 03FK-Q7XE43 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] Q96U-20UZ44 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] D3TU-JN5745
[17:42:20] [UPDATE DB] 7SDF-17X546
[17:42:20] [UPDATE DB] HMAZ-3HSX51
[17:42:20] [UPDATE STATUS] PQJB-HG8V53 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] PMA9-QC7654 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] 7ZCI-NFCI62 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] 0E73-PABK63 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] 4MZF-SFTR65 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] PJC8-K0EG66 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] 351D-5NCH67 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] A0S7-K2IC69 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] G9Z1-HRLY70
[17:42:20] [UPDATE STATUS] C7CU-PGT972 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] 66AU-Z7I573
[17:42:20] [UPDATE DB] S9QL-XRJ575
[17:42:20] [UPDATE DB] ABMS-YBP776
[17:42:20] [UPDATE DB] C7CU-PGT977
[17:42:20] [UPDATE DB] C7CU-PGT978
[17:42:20] [UPDATE DB] HHJH-UFWL81
[17:42:20] [UPDATE DB] 83
[17:42:20] [UPDATE STATUS] RNS6-DB3N84 (Disconnected -> Disconnected)
[17:42:20] [UPDATE STATUS] C7CU-PGT987 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] ZMVC-KAFH88
[17:42:20] [UPDATE STATUS] L5BR-E8QA89 (Disconnected -> Disconnected)
[17:42:20] [UPDATE DB] XNEQ-GB6L90
[2025-11-10 17:42:20] Update DB selesai. OK: 59, FAIL: 0
[2025-11-10 17:42:20] Lama eksekusi: 19.57 detik
+1 -1
View File
@@ -1 +1 @@
[2025-10-18 16:00:01] Tidak ada remote expired.
[2025-11-10 17:40:02] Remote port 12911 berhasil ditutup.
+1 -1
View File
@@ -1 +1 @@
[2025-10-17 23:50:02] 0 data telah dihapus. Data tersisa sejak 2025-09-01 00:00:00 sampai sekarang.
[2025-11-09 23:50:02] 0 data telah dihapus. Data tersisa sejak 2025-10-01 00:00:00 sampai sekarang.
+117
View File
@@ -0,0 +1,117 @@
<?php
// /**
// * File: /www/wwwroot/bilspro/cron/flip_auto_inactive.php
// * Jalankan via cron: */10 * * * * php /www/wwwroot/bilspro/cron/flip_auto_inactive.php >/dev/null 2>&1
// */
ini_set('max_execution_time', 60);
ini_set('memory_limit', '256M');
date_default_timezone_set('Asia/Jakarta');
require "/www/wwwroot/bilspro/config/connect.php";
require "/www/wwwroot/bilspro/payment/flip/Flip/Transaction.php";
try {
// Ambil maksimum 5 data agar ringan
$sql = "
SELECT
a.id,
a.transaction_id,
b.apikey_payment_gateway,
b.url_payment_gateway
FROM
tagihan a
LEFT JOIN
data_server b ON a.id_data_server = b.id
WHERE
a.status = 'lewat'
AND a.transaction_id != ''
AND a.transaction_status = 'ACTIVE'
AND b.payment_gateway = 'flip'
AND b.status_payment_gateway = 'ACTIVE'
AND (
YEAR(a.limit_pembayaran) < YEAR(NOW())
OR (
YEAR(a.limit_pembayaran) = YEAR(NOW())
AND MONTH(a.limit_pembayaran) < MONTH(NOW())
)
)
ORDER BY a.limit_pembayaran ASC
LIMIT 5
";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($data)) {
exit; // tidak ada data, langsung keluar biar hemat resource
}
$logFile = "/www/wwwroot/bilspro/load/cronjob/flip_auto_inactive.log";
if (!file_exists(dirname($logFile))) {
mkdir(dirname($logFile), 0777, true);
}
$results = [];
foreach ($data as $row) {
try {
$flip = new FlipPaymentGateway($row['apikey_payment_gateway'], $row['url_payment_gateway']);
$response = $flip->getBillStatus($row['transaction_id']);
if (!is_array($response) || empty($response['link_id'])) {
$results[] = [
'id' => $row['id'],
'transaction_id' => $row['transaction_id'],
'status' => 'error',
'message' => 'Invalid or missing response from Flip API'
];
continue;
}
$delete = $flip->editBill(
$response['link_id'],
'INACTIVE',
$response['title'] ?? '',
$response['amount'] ?? 0
);
$results[] = [
'id' => $row['id'],
'transaction_id' => $row['transaction_id'],
'flip_response' => $delete
];
if ($delete) {
$update = $pdo->prepare("UPDATE tagihan SET transaction_status = 'INACTIVE' WHERE id = :id");
$update->execute([':id' => $row['id']]);
}
// Delay 1 detik antar request agar tidak membanjiri Flip API
sleep(1);
} catch (Exception $e) {
$results[] = [
'id' => $row['id'],
'transaction_id' => $row['transaction_id'],
'status' => 'error',
'message' => $e->getMessage()
];
}
}
// Simpan hasil ke log file, bukan echo ke output
file_put_contents(
$logFile,
"[" . date('Y-m-d H:i:s') . "] " . json_encode($results, JSON_UNESCAPED_SLASHES) . PHP_EOL,
FILE_APPEND
);
} catch (Throwable $e) {
// Tangkap semua error (PDO/Exception)
file_put_contents(
"/www/wwwroot/bilspro/load/cronjob/flip_auto_inactive_error.log",
"[" . date('Y-m-d H:i:s') . "] ERROR: " . $e->getMessage() . PHP_EOL,
FILE_APPEND
);
}
+1 -1
View File
@@ -1 +1 @@
2025-10-18 16:00:06 ✅ Summary updated, rows affected: 1627
2025-11-10 17:30:07 ✅ Summary updated, rows affected: 1784
+11
View File
@@ -0,0 +1,11 @@
Voucher: PG12HJNHP8KQ<br>Aktif => 2025-11-10 06:54:16<br>Format durasi tidak valid.<br>PHP Fatal error: Uncaught Exception: DateInterval::__construct(): Unknown or bad format () in /www/wwwroot/bilspro/load/hotspot_update.php:70
Stack trace:
#0 /www/wwwroot/bilspro/load/hotspot_update.php(70): DateInterval->__construct()
#1 {main}
thrown in /www/wwwroot/bilspro/load/hotspot_update.php on line 70
Fatal error: Uncaught Exception: DateInterval::__construct(): Unknown or bad format () in /www/wwwroot/bilspro/load/hotspot_update.php:70
Stack trace:
#0 /www/wwwroot/bilspro/load/hotspot_update.php(70): DateInterval->__construct()
#1 {main}
thrown in /www/wwwroot/bilspro/load/hotspot_update.php on line 70
+17 -15
View File
@@ -1,23 +1,23 @@
SV_Cikembar_Utama Data pelanggan tidak ada
2025-10-18 15:30:01SV_BojongKerta Data pelanggan tidak ada
2025-10-18 15:30:01RO Bima Net Data pelanggan tidak ada
2025-10-18 15:30:01SV_Kingnet_Cibadak Data pelanggan tidak ada
2025-10-18 15:30:01SV_CC-Net_Cipicung Data pelanggan tidak ada
2025-10-18 15:30:01SV_Nusaina_Cibadak Data pelanggan tidak ada
2025-10-18 15:30:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:12:01SV_BojongKerta Data pelanggan tidak ada
2025-11-10 17:12:01RO Bima Net Data pelanggan tidak ada
2025-11-10 17:12:01SV_Kingnet_Cibadak Data pelanggan tidak ada
2025-11-10 17:12:01SV_CC-Net_Cipicung Data pelanggan tidak ada
2025-11-10 17:12:01SV_Nusaina_Cibadak Data pelanggan tidak ada
2025-11-10 17:12:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia.
SV_22P Net Cibadak Data pelanggan tidak ada
2025-10-18 15:30:01SV_Nettizen_Segaranten Data pelanggan tidak ada
2025-10-18 15:00:01SV-DNY-Net-1 Data pelanggan tidak ada
2025-10-18 15:40:01SV_NTA_2_PSW_1 Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:12:01SV_Nettizen_Segaranten Data pelanggan tidak ada
2025-11-10 16:42:01SV-DNY-Net-1 Data pelanggan tidak ada
2025-11-10 17:22:01SV_NTA_2_PSW_1 Status koneksi tidak aktif atau interval tidak tersedia.
SV_NTA_1 Status koneksi tidak aktif atau interval tidak tersedia.
SV-Cicukang Status koneksi tidak aktif atau interval tidak tersedia.
RO-Bumdes-Mekarmanah Status koneksi tidak aktif atau interval tidak tersedia.
RO-Pak-Kholiq Data pelanggan tidak ada
2025-10-18 15:45:01RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:27:01RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia.
LJN.NS.CSR.NET Status koneksi tidak aktif atau interval tidak tersedia.
IVVINET-CBD Data pelanggan tidak ada
2025-10-18 15:30:01QONNET Data pelanggan tidak ada
2025-10-18 15:30:01Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:12:01QONNET Data pelanggan tidak ada
2025-11-10 17:12:01Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_BSW_1 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_Alea Status koneksi tidak aktif atau interval tidak tersedia.
STANG Status koneksi tidak aktif atau interval tidak tersedia.
@@ -37,16 +37,16 @@ RO_Wargasari Status koneksi tidak aktif atau interval tidak tersedia.
LJN_AGUNG Status koneksi tidak aktif atau interval tidak tersedia.
RNET-CMS Status koneksi tidak aktif atau interval tidak tersedia.
DCN-GB-CCR Data pelanggan tidak ada
2025-10-18 15:30:01412NET Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:12:01412NET Status koneksi tidak aktif atau interval tidak tersedia.
brf Status koneksi tidak aktif atau interval tidak tersedia.
BMSNET Status koneksi tidak aktif atau interval tidak tersedia.
purabaya Status koneksi tidak aktif atau interval tidak tersedia.
DCN-CO-GX4 Data pelanggan tidak ada
2025-10-18 15:30:01MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:12:01MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia.
RO - Netborhood Wifi Status koneksi tidak aktif atau interval tidak tersedia.
Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
SV-DNY-Net-2 Data pelanggan tidak ada
2025-10-18 15:40:01DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
2025-11-10 17:22:01DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
RO_TTO Status koneksi tidak aktif atau interval tidak tersedia.
AP - NET Status koneksi tidak aktif atau interval tidak tersedia.
GAS NET Status koneksi tidak aktif atau interval tidak tersedia.
@@ -55,3 +55,5 @@ chr tencent Status koneksi tidak aktif atau interval tidak tersedia.
DamarisNet Status koneksi tidak aktif atau interval tidak tersedia.
Triunsa Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik GR 3 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_Kenzinet Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik Distribusi Status koneksi tidak aktif atau interval tidak tersedia.
+4 -4
View File
@@ -8,14 +8,14 @@ Successfully started background process for IP: 103.155.199.191 PERWASIM-NETWORK
Successfully started background process for IP: tunnel.manjapro.net SV_NTA_2_PSW_1
Successfully started background process for IP: tunnel.manjapro.net SV-Cicukang
Successfully started background process for IP: tunnel.manjapro.net SV_NTA_1
Successfully started background process for IP: 103.94.10.112 STANG
Successfully started background process for IP: 157.20.128.231 QONNET
Successfully started background process for IP: 103.155.198.185 SV_Cikembar_Utama
Successfully started background process for IP: 103.155.196.145 UNIX-NET
Successfully started background process for IP: 103.26.176.81 SV_CC-Net_Cipicung
Successfully started background process for IP: tunnel.manjapro.net SV-DNY-Net-2
Successfully started background process for IP: tunnel.manjapro.net Mikrotik_X86
Successfully started background process for IP: tunnel.manjapro.net SV_NTA_2_PSW_2
Successfully started background process for IP: tunnel.manjapro.net Triunsa
Successfully started background process for IP: tunnel.manjapro.net SV_Diamond Net
Started parallel processes for checking vouchers. => 2025-10-18 16:00:02
Successfully started background process for IP: tunnel.manjapro.net RO_Wargasari
Successfully started background process for IP: tunnel.manjapro.net RO_Sukasari
Successfully started background process for IP: tunnel.manjapro.net GAS NET
Started parallel processes for checking vouchers. => 2025-11-10 17:30:02
+10 -5
View File
@@ -27,8 +27,8 @@ foreach ($whatsapp as $waKey) {
$access_token = $waKey['token_access'];
$phone_number_id = $waKey['number_id'];
$url = "https://graph.facebook.com/v17.0/$phone_number_id/messages";
$data = json_decode($pesan['pesan'], true);
$url = "https://graph.facebook.com/v20.0/$phone_number_id/messages";
$reply = json_decode($pesan['pesan'], true);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
@@ -37,7 +37,7 @@ foreach ($whatsapp as $waKey) {
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($reply));
$response = curl_exec($ch);
@@ -57,10 +57,15 @@ foreach ($whatsapp as $waKey) {
}
}
echo "<pre>";
print_r($responseData);
echo "</pre>";
// kirim ke aplikasi 2
forwardToApp2([
"data" => $data,
"respon" => $response
"data" => $reply,
"phone_id" => $phone_number_id,
"respon" => $response
]);
curl_close($ch);
+18 -4
View File
@@ -1,7 +1,7 @@
<?php
// Aktifkan error log
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/load_tagihan_flip.log');
@@ -12,7 +12,7 @@ include "../config/whatsapp_api.php";
try {
// Ambil data tagihan sukses maksimal 5
$datetime = date('Y-m-d H:i:s', time() - 60);
$datetime = date('Y-m-d H:i:s', time() - 360);
$stmt = $pdo->prepare("
SELECT * FROM v_tagihan_flip_lunas
WHERE last_mikrotik_connect > :datetime
@@ -106,11 +106,23 @@ try {
imagestring($img, 5, 50, 350, '______________________________', $orange);
$invoicePath = '../invoice/' . $invoice;
$invoicePathMinio = 'invoice/' . $invoice;
require '../controller/uploadMinioFiles.php';
ob_start();
imagepng($img);
$imageData = ob_get_clean();
if (!imagepng($img, $invoicePath)) {
throw new Exception("Gagal menyimpan kwitansi ke $invoicePath");
}
// Upload file ke Minio
$responMinio = uploadToMinioStorageRaw($imageData,$invoicePathMinio);
imagedestroy($img);
echo $responsMinio;
// Aktifkan user Mikrotik
$API = new RouterosAPI();
$API->debug = false;
@@ -162,7 +174,9 @@ try {
// Kirim WhatsApp dengan kwitansi
$nomor = explode(',', $tagihan['nomor_whatsapp']);
$urlInvoice = 'https://manjapro.net/invoice/' . $invoice;
// $urlInvoice = 'https://manjapro.net/invoice/' . $invoice;
$urlInvoice = $responMinio;
// Cek transaksi dengan id tagihan
$stmt = $pdo->prepare("SELECT id_tagihan FROM transaksi WHERE id_tagihan = :id AND metode_pembayaran = :metode");
+11
View File
@@ -113,9 +113,20 @@ try {
imagestring($img, 5, 50, 350, '______________________________', $orange);
$invoicePath = '../invoice/' . $invoice;
$invoicePathMinio = 'invoice/' . $invoice;
require '../controller/uploadMinioFiles.php';
ob_start();
imagepng($img);
$imageData = ob_get_clean();
if (!imagepng($img, $invoicePath)) {
throw new Exception("Gagal menyimpan kwitansi ke $invoicePath");
}
// Upload file ke Minio
uploadToMinioStorageRaw($imageData,$invoicePathMinio);
imagedestroy($img);
// Aktifkan user Mikrotik
+19542
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -21,6 +21,7 @@ Mikrotik_X86 =><br>
Mikrotik_BSW_1 =><br>
Mikrotik_Alea =><br>
STANG =><br>
UNIX-NET =><br>
SV_NTA_2_TBL =><br>
MULYANAJAYA =><br>
PERWASIM-NETWORK =><br>
@@ -49,7 +50,7 @@ RO_TTO =><br>
AP - NET =><br>
GAS NET =><br>
SV_NTA_2_PSW_2 =><br>
chr tencent =><br>
DamarisNet =><br>
Triunsa =><br>
Mikrotik GR 3 =><br>
Mikrotik_Kenzinet =><br>
+1 -1
View File
@@ -1 +1 @@
Tidak perlu update untuk ID: 2 Rp.200,000<br>Harga khusus untuk ID: 3 Rp.250,000<br>Tidak perlu update untuk ID: 4 Rp.300,000<br>Tidak perlu update untuk ID: 5 Rp.300,000<br>Tidak perlu update untuk ID: 6 Rp.200,000<br>Harga khusus untuk ID: 7 Rp.200,000<br>Tidak perlu update untuk ID: 8 Rp.200,000<br>Tidak perlu update untuk ID: 9 Rp.200,000<br>Tidak perlu update untuk ID: 10 Rp.200,000<br>Tidak perlu update untuk ID: 12 Rp.750,000<br>Tidak perlu update untuk ID: 13 Rp.750,000<br>Tidak perlu update untuk ID: 14 Rp.450,000<br>Tidak perlu update untuk ID: 15 Rp.450,000<br>Tidak perlu update untuk ID: 16 Rp.300,000<br>Harga khusus untuk ID: 17 Rp.300,000<br>Tidak perlu update untuk ID: 18 Rp.300,000<br>Tidak perlu update untuk ID: 19 Rp.450,000<br>Tidak perlu update untuk ID: 20 Rp.200,000<br>Tidak perlu update untuk ID: 21 Rp.300,000<br>Tidak perlu update untuk ID: 22 Rp.300,000<br>Tidak perlu update untuk ID: 23 Rp.450,000<br>Tidak perlu update untuk ID: 24 Rp.200,000<br>Tidak perlu update untuk ID: 25 Rp.250,000<br>Tidak perlu update untuk ID: 26 Rp.200,000<br>Tidak perlu update untuk ID: 28 Rp.200,000<br>Tidak perlu update untuk ID: 29 Rp.300,000<br>Tidak perlu update untuk ID: 30 Rp.200,000<br>Tidak perlu update untuk ID: 31 Rp.300,000<br>Tidak perlu update untuk ID: 32 Rp.200,000<br>Tidak perlu update untuk ID: 33 Rp.200,000<br>Tidak perlu update untuk ID: 34 Rp.200,000<br>Tidak perlu update untuk ID: 35 Rp.200,000<br>Tidak perlu update untuk ID: 36 Rp.200,000<br>Tidak perlu update untuk ID: 37 Rp.300,000<br>Tidak perlu update untuk ID: 38 Rp.200,000<br>Tidak perlu update untuk ID: 39 Rp.200,000<br>Harga khusus untuk ID: 40 Rp.1,000,000<br>Tidak perlu update untuk ID: 41 Rp.200,000<br>Tidak perlu update untuk ID: 42 Rp.200,000<br>Harga khusus untuk ID: 43 Rp.100,000<br>Tidak perlu update untuk ID: 44 Rp.200,000<br>Tidak perlu update untuk ID: 45 Rp.300,000<br>Tidak perlu update untuk ID: 46 Rp.200,000<br>Tidak perlu update untuk ID: 47 Rp.200,000<br>Tidak perlu update untuk ID: 48 Rp.200,000<br>Tidak perlu update untuk ID: 49 Rp.200,000<br>Tidak perlu update untuk ID: 50 Rp.200,000<br>Tidak perlu update untuk ID: 51 Rp.200,000<br>Tidak perlu update untuk ID: 52 Rp.1,000,000<br>Tidak perlu update untuk ID: 53 Rp.200,000<br>Tidak perlu update untuk ID: 54 Rp.200,000<br>Tidak perlu update untuk ID: 55 Rp.200,000<br>Tidak perlu update untuk ID: 56 Rp.200,000<br>Tidak perlu update untuk ID: 57 Rp.200,000<br>Tidak perlu update untuk ID: 58 Rp.200,000<br>Tidak perlu update untuk ID: 59 Rp.200,000<br>Tidak perlu update untuk ID: 60 Rp.200,000<br>Tidak perlu update untuk ID: 61 Rp.300,000<br>Tidak perlu update untuk ID: 62 Rp.200,000<br>Tidak perlu update untuk ID: 63 Rp.200,000<br>Tidak perlu update untuk ID: 64 Rp.200,000<br>Tidak perlu update untuk ID: 65 Rp.200,000<br>Tidak perlu update untuk ID: 66 Rp.200,000<br>Tidak perlu update untuk ID: 67 Rp.200,000<br>Harga khusus untuk ID: 68 Rp.200,000<br>Harga khusus untuk ID: 69 Rp.200,000<br>Tidak perlu update untuk ID: 70 Rp.200,000<br>Tidak perlu update untuk ID: 71 Rp.200,000<br>Tidak perlu update untuk ID: 72 Rp.200,000<br>Tidak perlu update untuk ID: 73 Rp.200,000<br>Harga khusus untuk ID: 74 Rp.0<br>Harga khusus untuk ID: 75 Rp.0<br>Harga khusus untuk ID: 76 Rp.0<br>Tidak perlu update untuk ID: 77 Rp.200,000<br>Harga khusus untuk ID: 78 Rp.200,000<br>Harga khusus untuk ID: 79 Rp.200,000<br>1601 data pesan sebelum 3 hari terakhir berhasil dihapus.<br>
Tidak perlu update untuk ID: 2 Rp.200,000<br>Harga khusus untuk ID: 3 Rp.250,000<br>Tidak perlu update untuk ID: 4 Rp.300,000<br>Tidak perlu update untuk ID: 5 Rp.300,000<br>Tidak perlu update untuk ID: 6 Rp.200,000<br>Harga khusus untuk ID: 7 Rp.200,000<br>Tidak perlu update untuk ID: 8 Rp.200,000<br>Tidak perlu update untuk ID: 9 Rp.200,000<br>Tidak perlu update untuk ID: 10 Rp.200,000<br>Tidak perlu update untuk ID: 12 Rp.750,000<br>Tidak perlu update untuk ID: 13 Rp.750,000<br>Tidak perlu update untuk ID: 14 Rp.450,000<br>Tidak perlu update untuk ID: 15 Rp.450,000<br>Tidak perlu update untuk ID: 16 Rp.300,000<br>Harga khusus untuk ID: 17 Rp.300,000<br>Tidak perlu update untuk ID: 18 Rp.300,000<br>Tidak perlu update untuk ID: 19 Rp.450,000<br>Tidak perlu update untuk ID: 20 Rp.200,000<br>Tidak perlu update untuk ID: 21 Rp.300,000<br>Tidak perlu update untuk ID: 22 Rp.300,000<br>Tidak perlu update untuk ID: 23 Rp.450,000<br>Tidak perlu update untuk ID: 24 Rp.200,000<br>Tidak perlu update untuk ID: 25 Rp.250,000<br>Tidak perlu update untuk ID: 26 Rp.200,000<br>Tidak perlu update untuk ID: 28 Rp.200,000<br>Tidak perlu update untuk ID: 29 Rp.300,000<br>Tidak perlu update untuk ID: 30 Rp.200,000<br>Tidak perlu update untuk ID: 31 Rp.300,000<br>Tidak perlu update untuk ID: 32 Rp.200,000<br>Tidak perlu update untuk ID: 33 Rp.200,000<br>Tidak perlu update untuk ID: 34 Rp.200,000<br>Tidak perlu update untuk ID: 35 Rp.200,000<br>Tidak perlu update untuk ID: 36 Rp.200,000<br>Tidak perlu update untuk ID: 37 Rp.300,000<br>Tidak perlu update untuk ID: 38 Rp.200,000<br>Tidak perlu update untuk ID: 39 Rp.200,000<br>Harga khusus untuk ID: 40 Rp.1,000,000<br>Tidak perlu update untuk ID: 41 Rp.200,000<br>Harga harus diupdate untuk ID Data Server: 42 Rp.300,000<br>Harga khusus untuk ID: 43 Rp.100,000<br>Tidak perlu update untuk ID: 44 Rp.200,000<br>Tidak perlu update untuk ID: 45 Rp.300,000<br>Tidak perlu update untuk ID: 46 Rp.200,000<br>Tidak perlu update untuk ID: 47 Rp.200,000<br>Tidak perlu update untuk ID: 48 Rp.200,000<br>Tidak perlu update untuk ID: 49 Rp.200,000<br>Tidak perlu update untuk ID: 50 Rp.200,000<br>Tidak perlu update untuk ID: 51 Rp.200,000<br>Tidak perlu update untuk ID: 52 Rp.1,000,000<br>Tidak perlu update untuk ID: 53 Rp.200,000<br>Tidak perlu update untuk ID: 54 Rp.200,000<br>Tidak perlu update untuk ID: 55 Rp.200,000<br>Tidak perlu update untuk ID: 56 Rp.200,000<br>Tidak perlu update untuk ID: 57 Rp.200,000<br>Tidak perlu update untuk ID: 58 Rp.200,000<br>Tidak perlu update untuk ID: 59 Rp.200,000<br>Tidak perlu update untuk ID: 60 Rp.200,000<br>Tidak perlu update untuk ID: 61 Rp.300,000<br>Tidak perlu update untuk ID: 62 Rp.200,000<br>Tidak perlu update untuk ID: 63 Rp.200,000<br>Tidak perlu update untuk ID: 64 Rp.200,000<br>Tidak perlu update untuk ID: 65 Rp.200,000<br>Tidak perlu update untuk ID: 66 Rp.200,000<br>Tidak perlu update untuk ID: 67 Rp.200,000<br>Harga khusus untuk ID: 68 Rp.200,000<br>Harga khusus untuk ID: 69 Rp.200,000<br>Tidak perlu update untuk ID: 70 Rp.200,000<br>Tidak perlu update untuk ID: 71 Rp.200,000<br>Tidak perlu update untuk ID: 72 Rp.200,000<br>Tidak perlu update untuk ID: 73 Rp.200,000<br>Harga khusus untuk ID: 74 Rp.0<br>Harga khusus untuk ID: 75 Rp.0<br>Tidak perlu update untuk ID: 76 Rp.200,000<br>Tidak perlu update untuk ID: 77 Rp.200,000<br>Harga khusus untuk ID: 78 Rp.200,000<br>Harga khusus untuk ID: 79 Rp.200,000<br>Harga khusus untuk ID: 80 Rp.200,000<br>Harga khusus untuk ID: 81 Rp.300,000<br>
+13 -13
View File
@@ -56,22 +56,22 @@ try {
}
}
$sekarang = date('Y-m-d H:i:s');
$harilalu = date('Y-m-d H:i:s', strtotime("$sekarang -3 days"));
// $sekarang = date('Y-m-d H:i:s');
// $harilalu = date('Y-m-d H:i:s', strtotime("$sekarang -3 days"));
// Hitung jumlah data yang akan dihapus
$sqlCount = "SELECT COUNT(id) AS jumid FROM master_pesan WHERE waktu <= :harilalu";
$stmtCount = $pdo->prepare($sqlCount);
$stmtCount->execute(['harilalu' => $harilalu]);
$pp = $stmtCount->fetch(PDO::FETCH_ASSOC);
$jumlahHapus = $pp['jumid'] ?? 0;
// // Hitung jumlah data yang akan dihapus
// $sqlCount = "SELECT COUNT(id) AS jumid FROM master_pesan WHERE waktu <= :harilalu";
// $stmtCount = $pdo->prepare($sqlCount);
// $stmtCount->execute(['harilalu' => $harilalu]);
// $pp = $stmtCount->fetch(PDO::FETCH_ASSOC);
// $jumlahHapus = $pp['jumid'] ?? 0;
// Hapus data
$sqlDelete = "DELETE FROM master_pesan WHERE waktu <= :harilalu";
$stmtDelete = $pdo->prepare($sqlDelete);
$stmtDelete->execute(['harilalu' => $harilalu]);
// // Hapus data
// $sqlDelete = "DELETE FROM master_pesan WHERE waktu <= :harilalu";
// $stmtDelete = $pdo->prepare($sqlDelete);
// $stmtDelete->execute(['harilalu' => $harilalu]);
echo $jumlahHapus . " data pesan sebelum 3 hari terakhir berhasil dihapus.<br>";
// echo $jumlahHapus . " data pesan sebelum 3 hari terakhir berhasil dihapus.<br>";
} catch (PDOException $e) {
// Tangani kesalahan koneksi atau query