update wa official API

This commit is contained in:
WD - Dev
2025-10-07 21:01:15 +07:00
parent efca8f5f80
commit eb13c69431
55 changed files with 138040 additions and 1543 deletions
+618 -65
View File
@@ -1,6 +1,532 @@
<?php if($SvId == 2 ) { ?>
<?php
$aserver = mysqli_query($con,"SELECT $page[1],backround_kwitansi,status_koneksi_off, interval_koneksi_off, status_payment_gateway FROM data_server WHERE id = '$SvId' ");
$server = mysqli_fetch_assoc($aserver);
$stmt3 = $pdo->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" ]
];
} 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" ]
];
}
?>
<section class="content" style="zoom: 90%;">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<div class="row">
<div class="col-sm-6">
<h3 class="card-title">Setting <?php echo $pesan['nama']; ?> <b><i class="text-success">(WhatsApp Official API)</i></b></h3>
</div>
<div class="col-sm-6">
</div>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<?php
try {
// Pastikan $SvId tidak kosong
if (empty($SvId)) {
throw new Exception("Parameter SvId tidak boleh kosong.");
}
// Konversi jadi array (jika ada banyak ID, misalnya "1,2,3")
$ids = array_map('intval', explode(',', $SvId));
$ids = array_filter($ids); // buang ID kosong
if (empty($ids)) {
throw new Exception("ID server tidak valid: $SvId");
}
// Buat placeholder dinamis
$placeholders = implode(',', array_fill(0, count($ids), '?'));
// Query database
$sql = "SELECT * FROM whatsapp_cloud_api WHERE id_data_server IN ($placeholders) LIMIT 1";
$stmt3 = $pdo->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 "<pre>";
// print_r($templates);
// echo "</pre>";
// Template yang terpilih (dari GET)
$selectedTemplate = $_GET['template'] ?? '';
} catch (Exception $e) {
echo "<p style='color:red;'>Error: " . htmlspecialchars($e->getMessage()) . "</p>";
$templates = [];
$selectedTemplate = '';
}
?>
<div class="col-md-3">
<div class="card-body">
<form method="POST" id="templateForm">
<div class="form-group">
<label for="template">Pilih Template:</label>
<select class="form-control" name="template" id="template">
<option value="">-- Pilih Template --</option>
<?php foreach ($templates as $tpl): ?>
<option
value="<?= htmlspecialchars($tpl['name']) ?>"
data-template='<?= json_encode($tpl, JSON_HEX_APOS | JSON_HEX_QUOT) ?>' <?= (htmlspecialchars($tpl['name']) == $pesan['nama_template']) ? 'selected' : '' ?>>
<?= htmlspecialchars($tpl['name']) ?>
</option>
<?php endforeach; ?>
</select>
</div>
</form>
<!-- Form dinamis -->
<div id="paramForm" style="margin-top:20px;"></div>
<hr>
<div class="text-right">
<button id="saveBtn" class="btn btn-success">Simpan</button>
</div>
</div>
</div>
<div class="col-md-2">
<div class="text-danger" style="margin: 20px;">
<h5 class="text-center"><b><u>PERHATIAN..!</u></b></h5>
<p style="text-align: justify;">Untuk memposisikan data dari pelanggan silahkan isi dengan Variabel di bawah ini :</p>
<table class="table table-sm">
<tr>
<th>Variabel</th>
<th></th>
<th>Label</th>
</tr>
<?php
foreach($baseVariable as $base) {
echo '<tr>
<td>' . $base['key'] . '</td>
<td>:</td>
<td>' . $base['label'] . '</td>
<tr>';
}
?>
</table>
</div>
</div>
<div class="col-md-4">
<div class="card-body" style="display:flex;justify-content:center;align-items:center;">
<!-- Preview gaya WhatsApp -->
<div id="waPreview" style="margin-top:20px;max-width:400px;font-family:sans-serif;">
<div style="background:#075E54;color:white;padding:10px;border-radius:8px 8px 0 0;">
WhatsApp Preview
</div>
<div style="border:1px solid #ccc;border-top:0;padding-top:10px;padding-left:10px;padding-right:10px;border-radius:0 0 8px 8px;background:#ECE5DD; padding-bottom: 20px;">
<div style="background:white;padding:8px;border-radius:8px;display:flex;flex-direction:column;gap:0;max-width:90%;margin-bottom:-6px;">
<div id="waHeader"></div>
<div id="waMessage"></div>
<div id="waFooter"></div>
</div>
<div id="waButtons" style="max-width:90%;"></div>
</div>
</div>
</div>
</div>
<div class="col-md-5">
<div class="card-body">
<div id="hasilUntukAPI" style="margin-top:15px;padding:10px;border:1px solid #ccc;border-radius:6px;background:#f9f9f9;"></div>
</div>
</div>
<script>
const templateSelect = document.getElementById("template");
const paramForm = document.getElementById("paramForm");
const waHeader = document.getElementById("waHeader");
const waMessage = document.getElementById("waMessage");
const waFooter = document.getElementById("waFooter");
const waButtons = document.getElementById("waButtons");
const submitBtn = document.getElementById("saveBtn");
// default submitBtn
// submitBtn.disabled = true;
// data dari DB (PHP -> JS)
let pesanDb = <?= json_encode($pesanDb ?? [], JSON_UNESCAPED_SLASHES) ?>;
// fungsi gabungkan Cloud API template dengan data DB
function mergeWithDb(tpl, pesanDb) {
if (!pesanDb || !pesanDb.template || !pesanDb.template.components) return tpl;
let dbComponents = pesanDb.template.components;
tpl.components.forEach((comp) => {
let dbComp = dbComponents.find(c => c.type.toLowerCase() === comp.type.toLowerCase());
if (comp.type === "HEADER" && dbComp?.parameters) {
comp.dbValue = dbComp.parameters[0]?.image?.link || "";
}
if (comp.type === "BODY" && dbComp?.parameters) {
comp.dbParams = dbComp.parameters.map(p => p.text);
}
if (comp.type === "BUTTONS" && comp.buttons) {
comp.buttons.forEach((btn, bi) => {
let dbBtn = dbComponents.find(c =>
c.type.toLowerCase() === "button" && parseInt(c.index) === bi
);
if (dbBtn?.parameters) {
comp.buttons[bi].dbParams = dbBtn.parameters.map(p => p.text);
}
});
}
});
return tpl;
}
// trigger default on load
window.addEventListener("DOMContentLoaded", () => {
let selectedOpt = templateSelect.options[templateSelect.selectedIndex];
let tplJson = selectedOpt.getAttribute("data-template");
if (tplJson) {
renderParamForm(JSON.parse(tplJson));
updatePreview();
}
});
function renderParamForm(tpl) {
tpl = mergeWithDb(tpl, pesanDb); // 🔹 merge dengan DB
paramForm.innerHTML = "";
waHeader.innerHTML = "";
waMessage.innerHTML = "";
waFooter.innerHTML = "";
waButtons.innerHTML = "";
if (!tpl || !tpl.components) return;
let formHtml = "<h5>Parameter Dinamis</h5>";
let previewBody = "";
tpl.components.forEach((comp, ci) => {
if (comp.type === "HEADER") {
if (comp.format === "IMAGE") {
let defaultImg = comp.dbValue || comp.example?.header_handle?.[0] || "";
formHtml += `<div class="form-group">
<label>Header Image URL:</label><br>
<input class="form-control" type="text"
name="header_image"
value="${defaultImg}"
oninput="updateHeaderImage(this)" required>
</div>`;
waHeader.innerHTML = `<img id="header-img-preview"
src="${defaultImg}"
style="max-width:100%;border-radius:6px;"><br>`;
}
}
if (comp.type === "BODY" && comp.text) {
waMessage.setAttribute("data-original", comp.text);
let regex = /\{\{(\d+)\}\}/g;
let match, idx = 0;
while ((match = regex.exec(comp.text)) !== null) {
let paramNum = match[1];
let dbVal = comp.dbParams ? (comp.dbParams[idx] || "") : "";
formHtml += `<div class="form-group">
<label>Body Param ${paramNum}:</label><br>
<input class="form-control" type="text" name="body_${paramNum}"
value="${dbVal}"
oninput="updatePreview()" data-placeholder="{{${paramNum}}}" required>
</div>`;
idx++;
}
// apply formatting ke preview
let text = comp.text
.replace(/\*(.*?)\*/g, "<b>$1</b>")
.replace(/__(.*?)__/g, "<u>$1</u>")
.replace(/_(.*?)_/g, "<i>$1</i>")
.replace(/~(.*?)~/g, "<s>$1</s>")
.replace(/\n/g, "<br>");
previewBody += text + "<br>";
}
if (comp.type === "FOOTER" && comp.text) {
waFooter.innerHTML = `<small class="text-secondary">${comp.text}</small><br>`;
}
if (comp.type === "BUTTONS" && comp.buttons) {
comp.buttons.forEach((btn, bi) => {
if (btn.type === "URL") {
let btnText = btn.text;
let url = btn.url;
let regex = /\{\{(\d+)\}\}/g;
let match, idx = 0;
while ((match = regex.exec(url)) !== null) {
let paramNum = match[1];
let dbVal = btn.dbParams ? (btn.dbParams[idx] || "") : "";
formHtml += `<div class="form-group">
<label>Button ${bi+1} Param ${paramNum}:</label><br>
<input class="form-control" type="text" name="btn_${bi}_${paramNum}"
value="${dbVal}"
oninput="updatePreview()" data-placeholder="{{${paramNum}}}" required>
</div>`;
idx++;
}
waButtons.innerHTML += `<a href="#"
style="display:flex;align-items:center;justify-content:center;
background:#fff;color:green;padding:8px 12px;
border-radius:6px;border-top:1px solid #c0c0c0;
text-decoration:none;position:relative;z-index:10;">
<i class="fa fa-share-square" style="margin-right:8px; font-size:16px;"></i>
<span>${btnText}</span>
</a>`;
}
});
}
});
paramForm.innerHTML = formHtml;
waMessage.innerHTML = previewBody;
}
// update preview teks saat input diisi
function updatePreview() {
let preview = waMessage.getAttribute("data-original"); // simpan text asli
document.querySelectorAll("input[data-placeholder]").forEach(input => {
let ph = input.dataset.placeholder; // contoh {{1}}
let val = input.value || ph; // kalau kosong tetap {{1}}
preview = preview.replace(ph, val);
});
// styling simbol
preview = preview.replace(/\*(.*?)\*/g, "<b>$1</b>");
preview = preview.replace(/__(.*?)__/g, "<u>$1</u>");
preview = preview.replace(/_(.*?)_/g, "<i>$1</i>");
preview = preview.replace(/~(.*?)~/g, "<s>$1</s>");
preview = preview.replace(/\n/g, "<br>");
waMessage.innerHTML = preview;
}
// update header image preview
function updateHeaderImage(input) {
const img = document.getElementById("header-img-preview");
if (img) img.src = input.value || "";
}
// event change
templateSelect.addEventListener("change", function() {
let opt = this.options[this.selectedIndex];
let tplJson = opt.getAttribute("data-template");
if (tplJson) {
renderParamForm(JSON.parse(tplJson));
} else {
paramForm.innerHTML = "";
waHeader.innerHTML = "";
waMessage.innerHTML = "";
waFooter.innerHTML = "";
waButtons.innerHTML = "";
}
});
</script>
<script>
function generatePayload() {
let template = templateSelect.value;
if (!template) {
alert("Pilih template dulu!");
return null;
}
let data = {
messaging_product: "whatsapp",
recipient_type: "individual",
to: "#no_whatsapp",
// <input type="text" id="toNumber" placeholder="628xxxxxx" class="form-control">
// to: document.getElementById("toNumber")?.value || "", // isi dari input nomor tujuan
type: "template",
template: {
name: template,
language: { code: "id" },
components: []
}
};
// 🔹 HEADER
let headerImageInput = document.querySelector("input[name='header_image']");
if (headerImageInput && headerImageInput.value) {
data.template.components.push({
type: "header",
parameters: [{
type: "image",
image: { link: headerImageInput.value }
}]
});
}
// 🔹 BODY
let bodyParams = [];
document.querySelectorAll("input[name^='body_']").forEach(input => {
if (input.value.trim() !== "") {
bodyParams.push({ type: "text", text: input.value });
}
});
if (bodyParams.length > 0) {
data.template.components.push({
type: "body",
parameters: bodyParams
});
}
// 🔹 BUTTONS
let btnInputs = document.querySelectorAll("input[name^='btn_']");
btnInputs.forEach(input => {
if (input.value.trim() !== "") {
let [_, index, paramNum] = input.name.split("_"); // contoh: btn_0_1
data.template.components.push({
type: "button",
sub_type: "url",
index: parseInt(index),
parameters: [{
type: "text",
text: input.value
}]
});
}
});
return data;
}
// 🔘 Event tombol Simpan
document.getElementById("saveBtn").addEventListener("click", function() {
let payload = generatePayload();
if (!payload) return;
console.log("🚀 Payload siap dikirim:", payload);
// tampilkan payload ke div
document.getElementById("hasilUntukAPI").innerHTML =
"<pre>" + JSON.stringify(payload, null, 4) + "</pre>";
fetch("controller/setting_pesan.php", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
payload: payload,
nama: "<?= $pesan['nama']; ?>",
id: "<?= $SvId; ?>"
})
})
.then(r => r.json())
.then(resp => {
Swal.fire({
title: resp.status === "success" ? "Berhasil ✅" : "Gagal ⚠️",
text: resp.message,
icon: resp.status, // success | error | warning | info
confirmButtonText: "OK"
});
})
.catch(err => {
Swal.fire({
title: "Error ❌",
text: "Terjadi kesalahan koneksi: " + err,
icon: "error",
confirmButtonText: "OK"
});
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<?php } else { ?>
<?php
$stmt3 = $pdo->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);
?>
<!-- Main content -->
@@ -12,7 +538,7 @@ $server = mysqli_fetch_assoc($aserver);
<div class="card-header">
<div class="row">
<div class="col-sm-6">
<h3 class="card-title">Setting <?php echo $page[1]; ?></h3>
<h3 class="card-title">Setting <?php echo $pesan['nama']; ?></h3>
</div>
<div class="col-sm-6">
</div>
@@ -31,18 +557,15 @@ $server = mysqli_fetch_assoc($aserver);
#lyn => Paket Berlangganan<br>
#hly => Harga Layanan<br>
#jns => Jenis Layanan<br>
<?php if($page[1] == 'pesan_melunasi_tagihan' OR $page[1] == 'pesan_isolir_pelanggan' OR $page[1] == 'pesan_peringatan_tagihan' OR $page[1] == 'pesan_kirim_tagihan') { ?>
<?php if($pesan['nama'] == 'Pesan Melunasi Tagihan' OR $pesan['nama'] == 'Pesan Isolir Pelanggan' OR $pesan['nama'] == 'Pesan Peringatan Tagihan' OR $pesan['nama'] == 'Pesan Kirim Tagihan') { ?>
#ket => Keterangan Tagihan<br>
#jum => Jumlah Tagihan<br>
#ppn => PPN<br>
#unk => Kode Unik (for payment gateway)<br>
#tot => Total Tagihan<br>
#lmt => Limit Pembayaran
<?php }
if($server['status_payment_gateway'] == 'ACTIVE' AND $page[1] == 'pesan_kirim_tagihan') {
echo "<br>#lnk => Link Payment Gateway";
}
?>
#lmt => Limit Pembayaran<br>
#lnk => Link Payment Gateway
<?php } ?>
</p>
<p><b>Contoh :</b><br>
*Tagihan layanan internet*<br>
@@ -51,7 +574,7 @@ $server = mysqli_fetch_assoc($aserver);
PPN 11% : #ppn<br>
Total Tagihan : #tot
</p>
<?php if ($page[1] == 'pesan_koneksi_off') { ?>
<?php if ($pesan['nama'] == 'Pesan Koneksi Off') { ?>
<hr>
<h5><u>PERHATIAN..!!</u></h5>
<p>Jika Status Pesan <b>Aktif</b> dan <b>Interval</b> di isi, maka pelanggan yang aktif dan koneksi nya mati akan di beri pesan otomatis setelah Interval yang telah anda tentukan</p>
@@ -61,11 +584,11 @@ $server = mysqli_fetch_assoc($aserver);
<div class="col-sm-6">
<form method="post" enctype="multipart/form-data">
<?php
if ($page[1] == 'pesan_melunasi_tagihan')
if ($pesan['nama'] == 'Pesan Melunasi Tagihan')
{ ?>
<center>
<label>CONTOH</label>
<img src="img/<?php echo $server['backround_kwitansi']; ?>" width="100%"><br><br>
<img src="img/<?php echo $pesan['backround_kwitansi']; ?>" width="100%"><br><br>
<div class="form-group">
<label>Upload Backround Kwitansi</label>
<input type="file" class="form-control" name="gambar">
@@ -75,23 +598,23 @@ $server = mysqli_fetch_assoc($aserver);
<?php } ?>
<center><label>Edit Pesan</label></center>
<div class="form-group">
<textarea type="text" class="form-control" rows="15" name="fpesan"><?php echo $server[$page[1]]; ?></textarea>
<textarea type="text" class="form-control" rows="15" name="fpesan"><?php echo $pesan['pesan']; ?></textarea>
</div>
<?php if ($page[1] == 'pesan_koneksi_off') { ?>
<?php if ($pesan['nama'] == 'Pesan Koneksi Off') { ?>
<div class="row">
<div class="col-6">
<div class="form-group">
<label>Status Pesan</label>
<select class="form-control" name="status_koneksi_off" required="required">
<option value="Tidak Aktif" <?php if ($server['status_koneksi_off'] == "Tidak Aktif") { echo "selected"; }?>>Tidak Aktif</option>
<option value="Aktif" <?php if ($server['status_koneksi_off'] == "Aktif") { echo "selected"; }?>>Aktif</option>
<option value="Tidak Aktif" <?php if ($pesan['status_koneksi_off'] == "Tidak Aktif") { echo "selected"; }?>>Tidak Aktif</option>
<option value="Aktif" <?php if ($pesan['status_koneksi_off'] == "Aktif") { echo "selected"; }?>>Aktif</option>
</select>
</div>
</div>
<div class="col-6">
<label>Interval Saat Kirim Pesan</label>
<div class="input-group mb-4">
<input type="number" class="form-control" value="<?php echo $server['interval_koneksi_off']; ?>" name="interval">
<input type="number" class="form-control" value="<?php echo $pesan['interval_koneksi_off']; ?>" name="interval">
<div class="input-group-append">
<div class="input-group-text">
<span> Menit </span>
@@ -104,49 +627,75 @@ $server = mysqli_fetch_assoc($aserver);
<input type="submit" class="btn btn-sm btn-secondary m-1" name="edit" value="Simpan">
<a type="button" class="btn btn-success btn-sm m-1" data-toggle="modal" data-target="#staticBackdrop">Test Kirim Pesan</a>
</form>
<?php
if(isset($_POST['edit'])){
// Periksa apakah file di-upload dan validasi halaman
if (isset($page[1]) && $page[1] == 'pesan_melunasi_tagihan' && isset($_FILES['gambar'])) {
// Validasi file upload
if ($_FILES['gambar']['error'] === UPLOAD_ERR_OK) {
$nameFile = basename($_FILES["gambar"]["name"]);
$targetDir = "img/";
$targetFile = $targetDir . $nameFile;
<?php
if (isset($_POST['edit'])) {
// Memindahkan file ke direktori tujuan
if (move_uploaded_file($_FILES["gambar"]["tmp_name"], $targetFile)) {
// Menyiapkan string SQL untuk pembaruan
$SqlPost = ", backround_kwitansi = '$nameFile'";
} else {
// Tangani kesalahan jika file gagal dipindahkan
echo "Gagal memindahkan file.";
$SqlPost = '';
}
} else {
echo "Terjadi kesalahan dalam upload file.";
$SqlPost = '';
}
} else {
$SqlPost = '';
}
$SqlPost = '';
$sqlPostOff = '';
// --- Validasi upload gambar ---
if (isset($pesan['nama']) && $pesan['nama'] === 'Pesan Melunasi Tagihan' && isset($_FILES['gambar'])) {
if ($_FILES['gambar']['error'] === UPLOAD_ERR_OK) {
$nameFile = basename($_FILES["gambar"]["name"]);
$targetDir = "img/";
$targetFile = $targetDir . $nameFile;
if (move_uploaded_file($_FILES["gambar"]["tmp_name"], $targetFile)) {
$SqlPost = ", backround_kwitansi = :nameFile";
} else {
echo "Gagal memindahkan file.";
}
} else {
echo "Terjadi kesalahan dalam upload file.";
}
}
// --- Tambahan untuk 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";
}
// --- Query Update ---
$query = "UPDATE master_template_pesan
SET pesan = :pesan $SqlPost $sqlPostOff
WHERE nama = :nama AND id_data_server IN ($SvId)";
$stmt = $pdo->prepare($query);
// Bind parameter utama
$stmt->bindValue(':pesan', $_POST['fpesan']);
// Bind jika ada file upload
if ($SqlPost !== '') {
$stmt->bindValue(':nameFile', $nameFile);
}
// Bind jika pesan koneksi off
if ($sqlPostOff !== '') {
$stmt->bindValue(':status_koneksi_off', $status_koneksi_off);
$stmt->bindValue(':interval_koneksi_off', $interval);
}
$stmt->bindValue(':nama', $pesan['nama']);
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) {
echo "Gagal update data: " . $e->getMessage();
}
}
?>
if ($page[1] == '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."' ";
} else {
$sqlPostOff = "";
}
$update = mysqli_query($con,"UPDATE data_server SET $page[1] = '$_POST[fpesan]' $SqlPost $sqlPostOff WHERE id = '$SvId'");
if($update){
sweetAlert("Data telah di ubah", "success");
// echo $SqlPost;
}
}
?>
</div>
</div>
</div>
@@ -185,16 +734,16 @@ $server = mysqli_fetch_assoc($aserver);
// Kirim Pesan WhatsApp
$APIwa = new PesanWA();
// Menyiapkan query berdasarkan jenis pesan
if ($page[1] == 'pesan_registrasi' || $page[1] == 'pesan_aktivasi' || $page[1] == 'pesan_koneksi_off') {
if ($pesan['nama'] == 'Pesan Registrasi' || $pesan['nama'] == 'Pesan Aktivasi' || $pesan['nama'] == 'Pesan Koneksi Off') {
$stmt = $pdo->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,$page[1]);
$APIwa->Create_Pesan($SvId,$id,$pesan['nama']);
} elseif ($page[1] == 'pesan_melunasi_tagihan' || $page[1] == 'pesan_isolir_pelanggan' || $page[1] == 'pesan_peringatan_tagihan' || $page[1] == 'pesan_kirim_tagihan') {
if($server['status_payment_gateway'] == 'ACTIVE' AND $page[1] == 'pesan_kirim_tagihan') {
} 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'";
@@ -205,16 +754,20 @@ $server = mysqli_fetch_assoc($aserver);
$id = $data[0]['id'];
$url = baseurl()."/invoice/".$data[0]['img_invoice'];
$APIwa->Create_Pesan($SvId,$id,$page[1],'tag');
$APIwa->Create_Pesan($SvId,$id,$pesan['nama'],'tag');
}
$Pesan = $APIwa->Get_Pesan();
if ($page[1] == 'pesan_melunasi_tagihan') {
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");
}
?>
?>
<?php } ?>