prepare("SELECT * FROM apk_payment WHERE order_id = :order_id"); $stmt->bindParam(':order_id', $order_id); $stmt->execute(); $result = $stmt->fetch(); // Generate log file name based on current date and time $logFileName = 'log_' . date('Y-m-d H:i:s') . '.log'; // Prepare log message $logMessage = "[" . date('Y-m-d H:i:s') . "] Received Callback - Order ID: $order_id, Status: $status, Signature: $signature, Expected Signature: $sign\n"; // Write log message to file without opening the file manually (appending mode) // file_put_contents($logFileName, $logMessage, FILE_APPEND); if ($signature != $sign) { $result = array('success' => false); $logMessage = "Signature mismatch, callback ignored.\n"; // file_put_contents($logFileName, $logMessage, FILE_APPEND); } else if ($status == 'Success') { if ($result['jenis'] == 'PPPOE') { //Update Succesc untuk PPPOE ( di gunakan nanati ); } else if($result['jenis'] == 'Hotspot') { // Ambil data voucher berdasarkan order_id $stmt = $pdo->prepare("SELECT * FROM v_voucher_paygw WHERE order_id = :order_id"); $stmt->bindParam(':order_id', $order_id, PDO::PARAM_STR); $stmt->execute(); $vcr = $stmt->fetch(PDO::FETCH_ASSOC); if (!$vcr) { // Tidak ditemukan exit("Voucher tidak ditemukan untuk order_id: $order_id"); } // Konfigurasi koneksi MikroTik $m_ip = $vcr['ip_address']; $m_user = $vcr['username']; $m_pass = $vcr['password']; $m_port = $vcr['port_api']; require('../../../config/routeros_api.class.php'); $API = new RouterosAPI(); $API->debug = false; // Coba koneksi ke MikroTik if ($API->connect2($m_ip, $m_user, $m_pass, $m_port)) { try { // Tambah user ke hotspot $API->comm('/ip/hotspot/user/add', [ "name" => $vcr['voucher'], "password" => $vcr['voucher'], "profile" => $vcr['nama_profile'], "server" => "all" ]); // Update status berhasil $update = $pdo->prepare("UPDATE ganerate_voucher SET status_create = '1' WHERE id = :id"); $update->execute([':id' => $vcr['id']]); // Kirim pesan WhatsApp $nomorList = array_filter(array_map('trim', explode(',', $vcr['nomor_whatsapp']))); $APIwa = new PesanWA(); $Pesan = "Pembelian voucher kamu *BERHASIL!*\n\n" . "Tanggal : " . $vcr['waktu_transaksi'] . "\n" . "Pembayaran : QRIS\n\n" . "Paket : " . $vcr['nama_paket'] . "\n" . "Harga : Rp " . number_format($vcr['harga']) . "\n" . "Kode Voucher : *" . $vcr['voucher'] . "*\n\n" . "_Voucher hanya bisa digunakan pada 1 perangkat / device._\n\n" . "Terima kasih telah menggunakan layanan kami."; if (!empty($nomorList)) { $APIwa->Send_Pesan($vcr['id_data_server'], 'sendMessage', $nomorList, $Pesan); } } catch (Exception $e) { // Jika gagal saat perintah ke router $update = $pdo->prepare("UPDATE ganerate_voucher SET status_create = '0' WHERE id = :id"); $update->execute([':id' => $vcr['id']]); // error_log("Gagal menambahkan user hotspot: " . $e->getMessage()); } finally { $API->disconnect(); } } else { // Jika gagal konek ke MikroTik $update = $pdo->prepare("UPDATE ganerate_voucher SET status_create = '0' WHERE id = :id"); $update->execute([':id' => $vcr['id']]); // error_log("Gagal koneksi ke MikroTik pada IP: $m_ip"); } } else { // Pisahkan dan pastikan hanya angka $idArray = array_map('intval', explode(',', $result['id_data_server'])); $placeholders = implode(',', array_fill(0, count($idArray), '?')); $sql = "UPDATE data_server SET status = 'Aktif', expaired_date = ? WHERE id IN ($placeholders)"; $stmt = $pdo->prepare($sql); $params = array_merge([$result['expaired_time']], $idArray); $stmt->execute($params); } // Update payment status to "LUNAS" $stmt = $pdo->prepare("UPDATE apk_payment SET status = 'LUNAS' WHERE order_id = :order_id"); $stmt->bindParam(':order_id', $order_id); $stmt->execute(); $result = array('success' => true); $logMessage = "Payment success for Order ID: $order_id, Status updated to LUNAS.\n"; // file_put_contents($logFileName, $logMessage, FILE_APPEND); } else if ($status == 'Canceled') { // Update payment status to "CANCELED" $stmt = $pdo->prepare("UPDATE apk_payment SET status = 'CANCELED' WHERE order_id = :order_id"); $stmt->bindParam(':order_id', $order_id); $stmt->execute(); $result = array('success' => true); $logMessage = "Payment canceled for Order ID: $order_id, Status updated to CANCELED.\n"; // file_put_contents($logFileName, $logMessage, FILE_APPEND); } else { $result = array('success' => false); $logMessage = "Invalid status received for Order ID: $order_id\n"; // file_put_contents($logFileName, $logMessage, FILE_APPEND); } } // Set response header and return JSON result header('Content-type: application/json'); echo json_encode($result);