update baru apk manjapro

This commit is contained in:
root
2026-10-01 14:24:41 +07:00
parent b0d901260b
commit 4daf4d0024
28 changed files with 11930 additions and 154 deletions
+338 -70
View File
@@ -1,78 +1,346 @@
<?php
include '../config/connect.php';
$response = ["success" => false, "message" => "Terjadi kesalahan"];
header('Content-Type: application/json; charset=utf-8');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = intval($_POST['id'] ?? 0);
$response = [
"success" => false,
"message" => "Terjadi kesalahan"
];
if ($id <= 0) {
echo json_encode(["success" => false, "message" => "ID tidak valid"]);
exit;
}
if (!isset($_FILES['bukti_success']) || $_FILES['bukti_success']['error'] !== UPLOAD_ERR_OK) {
echo json_encode(["success" => false, "message" => "File gambar tidak ditemukan"]);
exit;
}
$uploadDir = __DIR__ . "/../img/bukti_success/";
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$ext = pathinfo($_FILES['bukti_success']['name'], PATHINFO_EXTENSION);
$fileName = "bukti_" . $id . "_" . time() . "." . strtolower($ext);
$filePath = $uploadDir . $fileName;
if (move_uploaded_file($_FILES['bukti_success']['tmp_name'], $filePath)) {
// Update status transaksi withdraw
$sql = "UPDATE transaksi_withdraw
SET status = 'success', bukti_success = :bukti, update_time = :update_time
WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
":bukti" => "img/bukti_success/" . $fileName,
":update_time" => date('Y-m-d H:i:s'),
":id" => $id
]);
// Ambil data transaksi_withdraw yang baru saja diupdate
$stmt = $pdo->prepare("SELECT * FROM transaksi_withdraw WHERE id = :id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC); // hanya satu baris
if ($row) {
// Generate nomor unik 10 digit
$numid = date('Y_md').$id;
$keterangan = "Withdraw Pendapatan Voucher Auto Pilot reff_" . $numid;
// Cek apakah transaksi dengan keterangan tsb sudah ada
$stmt = $pdo->prepare("SELECT keterangan FROM transaksi WHERE keterangan = :keterangan");
$stmt->bindParam(':keterangan', $keterangan, PDO::PARAM_STR);
$stmt->execute();
$tagid = $stmt->fetchColumn();
if ($tagid === false) {
$sql = "INSERT INTO transaksi
(id_data_server, keterangan, pemasukan, start_time, metode_pembayaran, status)
VALUES (:idds, :keterangan, :pemasukan, :start_time, :metode, 'Pendapatan Hotspot')";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':idds', $row['id_data_server'], PDO::PARAM_INT);
$stmt->bindParam(':keterangan', $keterangan, PDO::PARAM_STR);
$stmt->bindParam(':pemasukan', $row['nominal'], PDO::PARAM_STR);
$stmt->bindValue(':start_time', date('Y-m-d H:i:s'));
$stmt->bindValue(':metode', 'API Payment');
$stmt->execute();
}
}
$response = ["success" => true, "message" => "Update berhasil"];
} else {
$response = ["success" => false, "message" => "Gagal upload file"];
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode([
"success" => false,
"message" => "Method tidak diizinkan"
]);
exit;
}
echo json_encode($response);
$id = intval($_POST['id'] ?? 0);
if ($id <= 0) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "ID tidak valid"
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Validasi upload
|--------------------------------------------------------------------------
*/
if (
!isset($_FILES['bukti_success']) ||
!is_array($_FILES['bukti_success']) ||
$_FILES['bukti_success']['error'] !== UPLOAD_ERR_OK
) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "File gambar tidak ditemukan atau gagal diupload"
]);
exit;
}
$file = $_FILES['bukti_success'];
/*
|--------------------------------------------------------------------------
| Pastikan benar-benar file hasil HTTP upload
|--------------------------------------------------------------------------
*/
if (!is_uploaded_file($file['tmp_name'])) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "File upload tidak valid"
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Batasi ukuran file - maksimal 5 MB
|--------------------------------------------------------------------------
*/
$maxFileSize = 5 * 1024 * 1024;
if ($file['size'] <= 0 || $file['size'] > $maxFileSize) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "Ukuran gambar maksimal 5 MB"
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Validasi MIME berdasarkan ISI FILE
| Jangan percaya extension / Content-Type dari browser
|--------------------------------------------------------------------------
*/
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($file['tmp_name']);
$allowedMimeTypes = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/webp' => 'webp',
];
if (!isset($allowedMimeTypes[$mimeType])) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "Format file tidak diizinkan. Gunakan JPG, PNG, atau WEBP."
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Pastikan file memang dapat dibaca sebagai gambar
|--------------------------------------------------------------------------
*/
$imageInfo = @getimagesize($file['tmp_name']);
if ($imageInfo === false) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "File bukan gambar yang valid"
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Tentukan folder upload
|--------------------------------------------------------------------------
*/
$uploadDir = __DIR__ . '/../img/bukti_success/';
if (!is_dir($uploadDir)) {
if (!mkdir($uploadDir, 0755, true)) {
http_response_code(500);
echo json_encode([
"success" => false,
"message" => "Folder upload tidak dapat dibuat"
]);
exit;
}
}
/*
|--------------------------------------------------------------------------
| Nama file dibuat SERVER
| Extension berasal dari MIME hasil pemeriksaan server
|--------------------------------------------------------------------------
*/
$extension = $allowedMimeTypes[$mimeType];
try {
$randomName = bin2hex(random_bytes(16));
} catch (Exception $e) {
http_response_code(500);
echo json_encode([
"success" => false,
"message" => "Gagal membuat nama file"
]);
exit;
}
$fileName = 'bukti_' . $id . '_' . $randomName . '.' . $extension;
$filePath = $uploadDir . $fileName;
/*
|--------------------------------------------------------------------------
| Simpan file
|--------------------------------------------------------------------------
*/
if (!move_uploaded_file($file['tmp_name'], $filePath)) {
http_response_code(500);
echo json_encode([
"success" => false,
"message" => "Gagal upload file"
]);
exit;
}
/*
|--------------------------------------------------------------------------
| Permission file hasil upload
|--------------------------------------------------------------------------
*/
chmod($filePath, 0644);
/*
|--------------------------------------------------------------------------
| Update transaksi withdraw
|--------------------------------------------------------------------------
*/
try {
$sql = "UPDATE transaksi_withdraw
SET status = 'success',
bukti_success = :bukti,
update_time = :update_time
WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
":bukti" => "img/bukti_success/" . $fileName,
":update_time" => date('Y-m-d H:i:s'),
":id" => $id
]);
/*
|--------------------------------------------------------------------------
| Ambil transaksi yang baru diupdate
|--------------------------------------------------------------------------
*/
$stmt = $pdo->prepare(
"SELECT * FROM transaksi_withdraw WHERE id = :id"
);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$numid = date('Y_md') . $id;
$keterangan =
"Withdraw Pendapatan Voucher Auto Pilot reff_" . $numid;
/*
|--------------------------------------------------------------------------
| Cek transaksi duplikat
|--------------------------------------------------------------------------
*/
$stmt = $pdo->prepare(
"SELECT keterangan
FROM transaksi
WHERE keterangan = :keterangan"
);
$stmt->bindParam(
':keterangan',
$keterangan,
PDO::PARAM_STR
);
$stmt->execute();
$tagid = $stmt->fetchColumn();
if ($tagid === false) {
$sql = "INSERT INTO transaksi
(
id_data_server,
keterangan,
pemasukan,
start_time,
metode_pembayaran,
status
)
VALUES
(
:idds,
:keterangan,
:pemasukan,
:start_time,
:metode,
'Pendapatan Hotspot'
)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(
':idds',
$row['id_data_server'],
PDO::PARAM_INT
);
$stmt->bindParam(
':keterangan',
$keterangan,
PDO::PARAM_STR
);
$stmt->bindParam(
':pemasukan',
$row['nominal'],
PDO::PARAM_STR
);
$stmt->bindValue(
':start_time',
date('Y-m-d H:i:s')
);
$stmt->bindValue(
':metode',
'API Payment'
);
$stmt->execute();
}
}
$response = [
"success" => true,
"message" => "Update berhasil"
];
} catch (Throwable $e) {
/*
|--------------------------------------------------------------------------
| DB gagal → hapus file yang tadi sudah terupload
|--------------------------------------------------------------------------
*/
if (is_file($filePath)) {
unlink($filePath);
}
http_response_code(500);
$response = [
"success" => false,
"message" => "Terjadi kesalahan saat menyimpan data"
];
}
echo json_encode($response);