Files
manjapro_v6/load/create_link_flip.php
2025-11-11 12:57:39 +07:00

139 lines
6.1 KiB
PHP

<?php
// Aktifkan error log (minimalis)
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/create_link_flip.log');
// Fungsi sanitasi string
function sanitizeString($input) {
$str01 = preg_replace('/[^a-zA-Z0-9\s]/', ' ', $input);
$str02 = preg_replace('/\s+/', ' ', $str01);
return trim($str02);
}
include "../config/connect.php";
include "../config/tanggal_indo.php";
try {
$linkCreated = false; // Penanda apakah ada link yang berhasil dibuat
// Ambil semua server dengan payment gateway aktif
$sqlData = "SELECT id, apikey_payment_gateway, url_payment_gateway
FROM data_server
WHERE status_payment_gateway = 'ACTIVE'
AND apikey_payment_gateway != ''
AND tokenkey_payment_gateway != ''
AND url_payment_gateway != ''";
$stmtData = $pdo->query($sqlData);
while ($dataambil = $stmtData->fetch(PDO::FETCH_ASSOC)) {
$idds = $dataambil['id'];
$apiKey = $dataambil['apikey_payment_gateway'];
$apiUrl = $dataambil['url_payment_gateway'];
// Ambil hanya 1 profile_tagihan untuk server ini
$sqlProfil = "SELECT id, kirim_tagihan
FROM profile_tagihan
WHERE id_data_server = :id_data_server
LIMIT 1";
$stmtProfil = $pdo->prepare($sqlProfil);
$stmtProfil->bindParam(':id_data_server', $idds, PDO::PARAM_INT);
$stmtProfil->execute();
if ($dataprofil = $stmtProfil->fetch(PDO::FETCH_ASSOC)) {
// Ambil hanya 1 tagihan yang valid
$sql = "SELECT * FROM v_tagihan
WHERE id_data_server = :idds
AND id_profile_tagihan = :idpt
AND status = 'buat'
AND transaction_id IS NULL
AND transaction_link IS NULL
AND transaction_status IS NULL
AND verifikasi_tagihan > 1000
AND RIGHT(email, 10) = '@gmail.com'
ORDER BY id ASC
LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':idds' => $idds,
':idpt' => $dataprofil['id']
]);
if ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
try {
if (!empty($data['limit_pembayaran'])) {
$day = str_pad($dataprofil['kirim_tagihan'], 2, '0', STR_PAD_LEFT);
$cekkirim = substr($data['limit_pembayaran'], 0, 8) . $day;
$date = new DateTime($cekkirim);
$date->modify('-1 day');
$cektanggal = $date->format('Y-m-d');
$sekarang = date('Y-m-d');
if ($sekarang === $cektanggal) {
$namaclean = ucwords(strtolower(preg_replace('/[^a-zA-Z\s]/', '', $data['nama'])));
$keteranganFlip = "Tagihan " . formatIndo($data['limit_pembayaran'], 'F Y') . ' an ' . $namaclean . ' id ' . $data['akun'];
// Buat link payment gateway
require '../payment/flip/Flip/Transaction.php';
$flip = new FlipPaymentGateway($apiKey, $apiUrl);
$response = $flip->createBill(
sanitizeString($keteranganFlip),
sanitizeString($data['verifikasi_tagihan']),
$data['email'],
sanitizeString($data['nama']),
sanitizeString($data['nomor_whatsapp']),
sanitizeString($data['alamat'])
);
if (!empty($response['link_id']) && !empty($response['link_url']) && !empty($response['status'])) {
$transaction_id = $response['link_id'];
$transaction_link = $response['link_url'];
$transaction_status = $response['status'];
$update = $pdo->prepare("UPDATE tagihan
SET transaction_id = :transaction_id,
transaction_link = :transaction_link,
transaction_status = :transaction_status
WHERE id = :idtag");
$update->execute([
':transaction_id' => $transaction_id,
':transaction_link' => $transaction_link,
':transaction_status' => $transaction_status,
':idtag' => $data['id']
]);
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']}");
}
}
}
} catch (Exception $e) {
error_log("[EXCEPTION] {$e->getMessage()} untuk tagihan ID {$data['id']}");
}
}
}
}
// Jika tidak ada satupun link yang dibuat
if (!$linkCreated) {
// error_log("[INFO] Tidak ada tagihan yang perlu dibuat link Flip.");
echo "[INFO] Tidak ada tagihan yang perlu dibuat link.\n";
}
echo "[DONE] Proses selesai pada " . date('Y-m-d H:i:s') . "\n";
} catch (PDOException $e) {
error_log('[DB ERROR] ' . $e->getMessage());
echo "[DB ERROR] " . $e->getMessage();
} catch (Exception $e) {
error_log('[GENERAL ERROR] ' . $e->getMessage());
echo "[ERROR] " . $e->getMessage();
}
?>