prepare("SELECT * FROM master_template_pesan WHERE id = :id"); $stmt3->execute([':id' => $page[1]]); $pesan = $stmt3->fetch(PDO::FETCH_ASSOC); $pesanDb = json_decode($pesan['pesan_official'], true); if ($pesan['nama'] == 'Pesan Melunasi Tagihan' OR $pesan['nama'] == 'Pesan Isolir Pelanggan' OR $pesan['nama'] == 'Pesan Peringatan Tagihan' OR $pesan['nama'] == 'Pesan Kirim Tagihan') { $baseVariable = [ [ "key" => "#usr", "label" => "Nama Pelanggan" ], [ "key" => "#add", "label" => "Alamat Pelanggan" ], [ "key" => "#ppp", "label" => "PPPOE Pelanggan / ID Pelanggan" ], [ "key" => "#lyn", "label" => "Paket Berlangganan" ], [ "key" => "#hly", "label" => "Harga Layanan" ], [ "key" => "#jns", "label" => "Jenis Layanan" ], [ "key" => "#ket", "label" => "Keterangan Tagihan" ], [ "key" => "#jum", "label" => "Jumlah Tagihan" ], [ "key" => "#ppn", "label" => "PPN" ], [ "key" => "#unk", "label" => "Kode Unik (for payment gateway)" ], [ "key" => "#tot", "label" => "Total Tagihan" ], [ "key" => "#lmt", "label" => "Limit Pembayaran" ], [ "key" => "#lnk", "label" => "Link Payment Gateway" ], [ "key" => "#kwt_link", "label" => "Url Gambar Kwitansi" ] ]; } else { $baseVariable = [ [ "key" => "#usr", "label" => "Nama Pelanggan" ], [ "key" => "#add", "label" => "Alamat Pelanggan" ], [ "key" => "#ppp", "label" => "PPPOE Pelanggan / ID Pelanggan" ], [ "key" => "#lyn", "label" => "Paket Berlangganan" ], [ "key" => "#hly", "label" => "Harga Layanan" ], [ "key" => "#jns", "label" => "Jenis Layanan" ] ]; } ?>

Setting (WhatsApp Official API)

prepare($sql); $stmt3->execute($ids); $wacapi = $stmt3->fetch(PDO::FETCH_ASSOC); $accessToken = $wacapi['token_access']; $phoneNumberId = $wacapi['waba_id']; // URL endpoint template $url = "https://graph.facebook.com/v17.0/$phoneNumberId/message_templates"; // Request ke Cloud API $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_HTTPHEADER => ["Authorization: Bearer $accessToken"], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15 ]); $response = curl_exec($ch); if (curl_errno($ch)) { throw new Exception("cURL Error: " . curl_error($ch)); } curl_close($ch); // Decode JSON $data = json_decode($response, true); if (!isset($data['data'])) { throw new Exception("Gagal mengambil template dari Cloud API. Response: " . $response); } // Ambil list template $templates = $data['data'] ?? []; // echo "
";
                        // print_r($templates);
                        // echo "
"; // Template yang terpilih (dari GET) $selectedTemplate = $_GET['template'] ?? ''; } catch (Exception $e) { echo "

Error: " . htmlspecialchars($e->getMessage()) . "

"; $templates = []; $selectedTemplate = ''; } ?>

PERHATIAN..!

Untuk memposisikan data dari pelanggan silahkan isi dengan Variabel di bawah ini :

'; } ?>
Variabel Label
' . $base['key'] . ' : ' . $base['label'] . '
WhatsApp Preview
prepare("SELECT * FROM master_template_pesan WHERE id = :id"); $stmt3->execute([':id' => $page[1]]); $pesan = $stmt3->fetch(PDO::FETCH_ASSOC); $stmt3 = $pdo->prepare("SELECT status_payment_gateway FROM data_server WHERE id = :ids"); $stmt3->execute([':ids' => $pesan['id_data_server']]); $server = $stmt3->fetch(PDO::FETCH_ASSOC); // print_r($_SESSION); ?>

Setting

Warning..!!

Untuk memposisikan data dari pelanggan silahkan isi dengan Variabel di bawah ini :
#usr => Nama Pelanggan
#add => Alamat Pelanggan
#ppp => PPPOE Pelanggan / ID Pelanggan
#lyn => Paket Berlangganan
#hly => Harga Layanan
#jns => Jenis Layanan
#ket => Keterangan Tagihan
#jum => Jumlah Tagihan
#ppn => PPN
#unk => Kode Unik (for payment gateway)
#tot => Total Tagihan
#lmt => Limit Pembayaran
#lnk => Link Payment Gateway

Contoh :
*Tagihan layanan internet*
Nama : #usr
Jumlah Tagihan : #jum
PPN 11% : #ppn
Total Tagihan : #tot


PERHATIAN..!!

Jika Status Pesan Aktif dan Interval di isi, maka pelanggan yang aktif dan koneksi nya mati akan di beri pesan otomatis setelah Interval yang telah anda tentukan




Menit
Test Kirim Pesan
$maxFileSize ) { sweetAlert("Ukuran gambar maksimal 5 MB", "error"); return; } // ======================================================== // DETEKSI MIME DARI ISI FILE // ======================================================== $finfo = new finfo(FILEINFO_MIME_TYPE); $mimeType = $finfo->file($file['tmp_name']); // Hanya format berikut yang diperbolehkan $allowedMimeTypes = [ 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/webp' => 'webp', ]; if ( $mimeType === false || !isset($allowedMimeTypes[$mimeType]) ) { sweetAlert( "File tidak diizinkan. Hanya JPG, PNG, dan WEBP.", "error" ); return; } // ======================================================== // PASTIKAN BENAR-BENAR GAMBAR // ======================================================== $imageInfo = @getimagesize($file['tmp_name']); if ($imageInfo === false) { sweetAlert("File bukan gambar yang valid", "error"); return; } // MIME hasil getimagesize harus sama if (($imageInfo['mime'] ?? '') !== $mimeType) { sweetAlert("Format gambar tidak valid", "error"); return; } // ======================================================== // EXTENSION DITENTUKAN SERVER // BUKAN DARI NAMA FILE USER // ======================================================== $extension = $allowedMimeTypes[$mimeType]; try { $randomName = bin2hex(random_bytes(16)); } catch (Throwable $e) { sweetAlert("Gagal membuat nama file", "error"); return; } $nameFile = 'kwitansi_' . $randomName . '.' . $extension; // Gunakan absolute filesystem path $targetDir = __DIR__ . '/img/'; // Buat folder jika belum tersedia if (!is_dir($targetDir)) { if (!mkdir($targetDir, 0755, true)) { sweetAlert("Folder upload tidak dapat dibuat", "error"); return; } } $targetFile = $targetDir . $nameFile; // ======================================================== // UPLOAD // ======================================================== if (!move_uploaded_file( $file['tmp_name'], $targetFile )) { sweetAlert("Gagal menyimpan gambar", "error"); return; } // Permission file chmod($targetFile, 0644); $SqlPost = ", backround_kwitansi = :nameFile"; } // ============================================================ // PESAN KONEKSI OFF // ============================================================ if ( isset($pesan['nama']) && $pesan['nama'] === 'Pesan Koneksi Off' ) { $status_koneksi_off = $_POST['status_koneksi_off'] ?? ''; $interval = preg_replace( "/[^0-9]/", "", $_POST['interval'] ?? '' ); $sqlPostOff = " , status_koneksi_off = :status_koneksi_off , interval_koneksi_off = :interval_koneksi_off "; } // ============================================================ // UPDATE DATABASE // ============================================================ $query = " UPDATE master_template_pesan SET pesan = :pesan $SqlPost $sqlPostOff WHERE nama = :nama AND id_data_server IN ($SvId) "; $stmt = $pdo->prepare($query); $stmt->bindValue( ':pesan', $_POST['fpesan'] ?? '', PDO::PARAM_STR ); // Jika gambar berhasil diupload if ($SqlPost !== '') { $stmt->bindValue( ':nameFile', $nameFile, PDO::PARAM_STR ); } // Jika Pesan Koneksi Off if ($sqlPostOff !== '') { $stmt->bindValue( ':status_koneksi_off', $status_koneksi_off, PDO::PARAM_STR ); $stmt->bindValue( ':interval_koneksi_off', $interval, PDO::PARAM_STR ); } $stmt->bindValue( ':nama', $pesan['nama'], PDO::PARAM_STR ); try { $stmt->execute(); $rows = $stmt->rowCount(); if ($rows > 0) { sweetAlert( "Data telah diubah ($rows baris terpengaruh)", "success" ); } else { sweetAlert( "Tidak ada data yang berubah", "info" ); } } catch (PDOException $e) { // Jangan tampilkan detail database ke browser error_log( 'Update master_template_pesan gagal: ' . $e->getMessage() ); sweetAlert( "Gagal memperbarui data", "error" ); } } ?>
prepare("SELECT id FROM pelanggan WHERE status = 'aktif' AND id_data_server = '$SvId'"); $stmt->execute(); $data = $stmt->fetchAll(); $id = $data[0]['id']; $url = ""; $APIwa->Create_Pesan($SvId,$id,$pesan['nama']); } elseif ($pesan['nama'] == 'Pesan Melunasi Tagihan' || $pesan['nama'] == 'Pesan Isolir Pelanggan' || $pesan['nama'] == 'Pesan Peringatan Tagihan' || $pesan['nama'] == 'Pesan Kirim Tagihan') { if($server['status_payment_gateway'] == 'ACTIVE' AND $pesan['nama'] == 'Pesan Kirim Tagihan') { $sqldata = "SELECT id,img_invoice FROM tagihan WHERE transaction_link != '' AND id_data_server = '$SvId'"; } else { $sqldata = "SELECT id,img_invoice FROM tagihan WHERE status = 'lunas' AND id_data_server = '$SvId'"; } $stmt = $pdo->prepare($sqldata); $stmt->execute(); $data = $stmt->fetchAll(); $id = $data[0]['id']; $url = baseurl()."/invoice/".$data[0]['img_invoice']; $APIwa->Create_Pesan($SvId,$id,$pesan['nama'],'tag'); } $Pesan = $APIwa->Get_Pesan(); if ($pesan['nama'] == 'Pesan Melunasi Tagihan') { $APIwa->Send_Pesan($SvId,'sendMediaFromUrl',[$_POST['nomor']],$Pesan, $url); } else { $APIwa->Send_Pesan($SvId,'sendMessage',[$_POST['nomor']],$Pesan); } sweetAlert("Pesan akan segera di kirim ke nomor ".$_POST['nomor'],"success"); } ?>