update wa official API
This commit is contained in:
+618
-65
@@ -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 } ?>
|
||||
Reference in New Issue
Block a user