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) { $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($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(); } ?>