Generate Voucher Auto Pilot

beginTransaction(); // Ambil data paket $stmt = $pdo->prepare("SELECT radius_data,durasi,nama_profile,harga_paket FROM profile_paket WHERE id = :idp"); $stmt->execute([':idp' => $_POST['idp']]); $paket = $stmt->fetch(PDO::FETCH_ASSOC); // ====== KIRIM KE API MIKROTIK ====== $stmt = $pdo->prepare("SELECT ip_address,username,password,port_api,radius_nas_data FROM setting_mikrotik WHERE id = :id"); $stmt->execute([':id' => $_POST['idm']]); $mikrotik = $stmt->fetch(PDO::FETCH_ASSOC); $dataMik = json_decode($mikrotik['radius_nas_data']); if (!$paket) { throw new Exception("Paket tidak ditemukan."); } $data = json_decode($paket['radius_data']); $kode = $data ? 'VR' : 'VM'; // VR = Radius, VM = MikroTik $jenis = $data ? 'sv-radius' : 'sv-mikrotik'; $karakter = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890"; $str = $paket['durasi']; $jumlah = intval($_POST['jumlah']); $date = date('Y-m-d H:i:s'); // Validasi jumlah if ($jumlah < 1 || $jumlah > 200) { throw new Exception("Jumlah voucher harus antara 1-200."); } // Generate voucher unik $voucherList = []; while (count($voucherList) < $jumlah) { $kodevoucher = $str . substr(str_shuffle($karakter), 0, 7) . $kode; // Pastikan tidak duplikat di DB & array $cek = $pdo->prepare("SELECT COUNT(*) FROM ganerate_voucher WHERE voucher = :voucher"); $cek->execute([':voucher' => $kodevoucher]); if ($cek->fetchColumn() == 0 && !in_array($kodevoucher, $voucherList)) { $voucherList[] = $kodevoucher; } } // Kirim ke Radius atau MikroTik $successVoucher = []; $failVoucher = []; if ($data) { // ====== KIRIM KE RADIUS ====== $radius = new CrudRadiusServer(); $apiResponse = $radius->request('add_user', 'POST', [ 'jenis' => 'Hotspot', 'username' => $voucherList, 'password' => $voucherList, 'groupname' => $data->groupname, 'nasgroupname' => $dataMik->data->{'nasgroupname'} ]); foreach ($apiResponse['results'] as $res) { if ($res['status'] === 'success') { $successVoucher[] = $res['username']; } else { $failVoucher[] = $res['username']; } } if (empty($successVoucher)) { throw new Exception("Tidak ada voucher yang berhasil dibuat di Radius."); } } else { // require('router_api/routeros_api.class.php'); $API = new RouterosAPI(); $API->debug = false; if (!$API->connect2($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password'], $mikrotik['port_api'])) { throw new Exception("Gagal konek ke API MikroTik."); } foreach ($voucherList as $vcr) { $result = $API->comm('/ip/hotspot/user/add', [ "name" => $vcr, "password" => $vcr, "profile" => $paket['nama_profile'], // pastikan field profile ada di DB "server" => "all" ]); if (isset($result['!trap'])) { $failVoucher[] = $vcr; } else { $successVoucher[] = $vcr; } } $API->disconnect(); if (empty($successVoucher)) { throw new Exception("Tidak ada voucher yang berhasil dibuat di MikroTik."); } } // Insert ke DB hanya yang sukses $values = []; $params = []; foreach ($successVoucher as $voucher) { $values[] = "(?, ?, ?, ?, ?, ?, ?)"; $params[] = $_POST['ids']; // id_data_server $params[] = $_POST['idm']; // id_setting_mikrotik $params[] = $_POST['idp']; // id_profile_paket $params[] = $voucher; // voucher $params[] = $paket['harga_paket']; // harga $params[] = $jenis; // jenis $params[] = $date; // create_time } $sql = "INSERT INTO ganerate_voucher (id_data_server, id_setting_mikrotik, id_profile_paket, voucher, harga, jenis, create_time) VALUES " . implode(", ", $values); $stmt = $pdo->prepare($sql); $stmt->execute($params); // Commit transaksi $pdo->commit(); $totalSuccess = count($successVoucher); $totalError = count($failVoucher); sweetAlert("$totalSuccess voucher berhasil dibuat. Gagal: $totalError", "success"); } catch (Exception $e) { $pdo->rollBack(); sweetAlert("Gagal membuat voucher: " . $e->getMessage(), "error"); } } ?>

Akumulasi Keuangan Voucher

0

Total Penjualan

0

Saldo Ditahan

0

Saldo Tersedia

Akumulasi Penjualan Voucher

0

Transaksi Success

0

Transaksi Pending

0

Transaksi Cancel

0

Voucher Tersedia

0

Voucher Active

0

Voucher Expired

Riwayat Pencairan Dana

Server Dibuat Nominal User Status Diproses Action

Voucher List

Server Voucher Harga Biaya Saldo Status Dibuat Aktif Expired
prepare($SQLCek); $stmt->execute([':idsv' => $_POST['idgetSaldo']]); $rek_data = $stmt->fetch(PDO::FETCH_ASSOC); // ✅ fetch single row if (!empty($rek_data['rekening_nama'])) { if ($rek_data['rekening_status'] == 'verificated') { $nominal = preg_replace("/[^0-9]/", "", $_POST['nominal']); $SQLCarikan = "INSERT INTO transaksi_withdraw (id_data_server, start_time, nominal, user_create, status, jenis) VALUES (:id_data_server, :start_time, :nominal, :user_create, 'pending', 'hotspot_auto')"; $stmt = $pdo->prepare($SQLCarikan); $stmt->bindValue(':id_data_server', $_POST['idgetSaldo'], PDO::PARAM_INT); $stmt->bindValue(':start_time', date('Y-m-d H:i:s')); // ✅ pakai bindValue $stmt->bindValue(':nominal', $nominal, PDO::PARAM_INT); $stmt->bindValue(':user_create', $SvNama, PDO::PARAM_STR); // pastikan $SvNama ada $stmt->execute(); $Pesanwarek = "*PERMINTAAN PENCAIRAN DANA* Server : " . $rek_data['nama_server'] . " BANK : " . strtoupper($rek_data['rekening_bank']) . " Rekening : *" . $rek_data['rekening_nomor'] . "* Nama Rek : " . $rek_data['rekening_nama'] . " Nominal : *" . $_POST['nominal'] . "* _# Manja ~ Notif_ "; $nomorWArek = ["6281298698422", "6285655548738"]; $APIwa = new PesanWA(); $APIwa->Send_Pesan('1','sendMessage',$nomorWArek,$Pesanwarek); sweetAlert("BERHASIL.! Pencairan akan segera diproses, mohon tunggu.", "success"); } else { sweetAlert("GAGAL.! Rekening anda sedang diverifikasi mohon ditunggu.", "error"); } } else { sweetAlert("GAGAL.! Tidak ada rekening yang tersedia, silahkan isi rekening di Profile Master.", "error"); } } ?>