File: //var/www/test/member.php
<?php
session_start(); // 啟用 Session
// 檢查是否已登入
if (!isset($_SESSION['user'])) {
header('Location: login.php'); // 未登入,跳轉回登入頁面
exit();
}
// 獲取會員資料
$user = $_SESSION['user'];
$name = $_SESSION['name'];
$member = $_SESSION['member'];
$endday = $_SESSION['endday'];
$code2 = $_SESSION['code2'];
$speed = $_SESSION['speed'];
$month = $_SESSION['month'];
$season = $_SESSION['season'];
$halfyear = $_SESSION['halfyear'];
$year = $_SESSION['year'];
$twoyear = $_SESSION['twoyear'];
$discount = $_SESSION['discount'];
$email = $_SESSION['email'];
$ecpay = $_SESSION['ecpay'];
$rtn_code = $_SESSION['rtn_code'];
$ecpay_number = $_SESSION['ecpay_number'];
$rtn_msg = $_SESSION['rtn_msg'];
// ---------- 1) 計算今天與 $endday 相差天數,判斷是否大於 30 天 ----------
// 使用 DateTime 物件來計算相差天數
$todayObj = new DateTime(); // 今天
$endDateObj = new DateTime($endday); // 從 Session 取得的到期日
if ($todayObj > $endDateObj) {
// 這裡可以放你要的邏輯,例如:
// echo "今天距離 $endday 超過 30 天";
// 或是記錄某些狀態、跳轉畫面等
$isOver30Days = true;
} else {
$isOver30Days = false;
}
// ---------------------------------------------------------------------------
// ---------- 2) 計算「到期日 - 14 天」顯示付款按鈕 ----------
// 注意:若要保留 $endday 原始值,請先用 clone 或另外建立物件
$endDateClone = clone $endDateObj; // 不要直接改動 $endDateObj
$endDateClone->modify('-14 days'); // 減去 14 天
$limitDate = $endDateClone->format('Y-m-d'); // 轉為 YYYY-MM-DD 格式
$today = date('Y-m-d');
$showPaymentButtons = ($today >= $limitDate);
$isSubscription = (strpos($speed, '定期') !== false) ? 1: 0;
$ecpay_ok = ($rtn_code == 1);
// 將資費選項轉為 JSON 格式,讓 JavaScript 讀取
$plan_options = [
"season" => !empty($season) ? ["price" => $season, "barcode" => $season] : null,
"halfyear" => !empty($halfyear) ? ["price" => $halfyear, "barcode" => $halfyear] : null,
"year" => !empty($year) ? ["price" => $year, "barcode" => $year] : null,
"twoyear" => !empty($twoyear) ? ["price" => $twoyear, "barcode" => $twoyear] : null
];
// 移除 `null` 值的選項(只保留有值的)
$plan_options = array_filter($plan_options);
?>
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>會員資料</title>
<style>
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #f9f9f9;
color: #333;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
width: 90%;
max-width: 600px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
}
.header {
text-align: center;
margin-bottom: 20px;
}
.member-info {
margin: 20px 0;
}
.member-info div {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #eaeaea;
}
.payment-buttons {
text-align: center;
margin-top: 20px;
}
.payment-buttons button {
background-color: #4CAF50;
color: #fff;
border: none;
padding: 10px 15px;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
margin: 5px;
}
.payment-info {
display: none;
margin-top: 20px;
padding: 15px;
background-color: #e9f7ef;
border-left: 4px solid #4CAF50;
font-size: 14px;
color: #333;
border-radius: 5px;
}
.plan-selection {
display: flex;
justify-content: center; /* 讓選項置中 */
gap: 15px; /* 選項之間的間距 */
margin-top: 10px;
flex-wrap: wrap; /* 讓選項可以自動換行 */
}
.plan-selection label {
display: flex;
flex-direction: column; /* 讓名稱 & 金額 垂直排列 */
align-items: center; /* 讓內容水平置中 */
font-size: 16px;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
background-color: #f8f8f8;
cursor: pointer;
width: 120px; /* 固定寬度讓排版整齊 */
text-align: center;
}
.plan-selection label:hover {
background-color: #e0e0e0;
}
/* 電腦版顯示的提醒文字 */
.desktop-warning {
text-align: center;
font-size: 16px;
font-weight: bold;
color: red;
margin-top: 20px;
}
/* 登出按鈕樣式 */
.logout-button {
background-color: #d9534f;
color: #fff;
border: none;
padding: 10px 20px;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
margin-top: 20px;
}
.logout-button:hover {
background-color: #c9302c;
}
.actions {
text-align: center;
margin-top: 20px;
}
.note {
text-align: center;
margin-top: 20px;
font-size: 14px;
color: #888;
}
.change-password-button {
background-color: #007bff;
color: #fff;
border: none;
padding: 10px 20px;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
margin-right: 10px;
}
.change-password-button:hover {
background-color: #0056b3;
}
.change-email-button {
background-color:rgba(255, 145, 0, 0.86);
color: #fff;
border: none;
padding: 10px 20px;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
margin-right: 10px;
}
.change-email-button:hover {
background-color:rgb(255, 145, 0);
}
.barcode-container {
display: flex;
flex-direction: column;
align-items: center; /* 條碼內容置中 */
justify-content: center;
margin: 10px 0;
padding: 5px 10px;
background-color: #fff;
border-radius: 5px;
text-align: center;
}
.barcode-label {
flex: 1;
font-weight: bold;
text-align: left;
}
.barcode {
flex: 2;
text-align: right;
}
.barcode svg {
max-width: 100%;
height: auto; /* 避免條碼太大 */
}
.download-invoice-button {
background-color: #007bff; /* 藍色背景,可改成喜歡的顏色 */
color: #fff; /* 白字 */
border: none; /* 不需要預設的邊框 */
padding: 10px 20px; /* 按鈕內距 */
font-size: 16px; /* 字體大小 */
border-radius: 5px; /* 圓角 */
cursor: pointer; /* 滑鼠變手指 */
transition: background-color 0.3s; /* 漸變 */
}
/* 滑鼠懸停時改變背景顏色 */
.download-invoice-button:hover {
background-color: #0056b3; /* 可再深一些的藍 */
}
</style>
<script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.0/dist/JsBarcode.all.min.js"></script>
<script src="/js/iframe-resizer-helper.js"></script>
</head>
<body>
<div class="container">
<div class="header">
<h1>會員資料</h1>
<p>歡迎回來,以下是您的會員資訊。</p>
</div>
<div class="member-info">
<div><span class="label">客戶編號:</span><span><?php echo htmlspecialchars($user); ?></span></div>
<div><span class="label">社區名稱:</span><span><?php echo htmlspecialchars($member); ?></span></div>
<div><span class="label">客戶姓名:</span><span><?php echo htmlspecialchars($name); ?></span></div>
<div><span class="label">電子信箱:</span><span><?php echo htmlspecialchars($email); ?></span></div>
<div><span class="label">寬頻方案:</span><span><?php echo htmlspecialchars($speed); ?>(下行/上行)bps</span></div>
<?php if ($isSubscription): ?>
<div><span class="label">定期定額資費:</span><span><?php echo htmlspecialchars($month); ?>元/月</span></div>
<?php endif; ?>
<div><span class="label">網路租約到期日:</span><span><?php echo htmlspecialchars($endday); ?></span></div>
<?php if ($isSubscription): ?>
<?php if ($ecpay_ok): ?>
<?php if (!empty($ecpay)): ?>
<div>
<span class="label">定期定額扣款成功:</span>
<span><?php echo htmlspecialchars($ecpay); ?></span>
</div>
<?php if (strtotime($ecpay) > strtotime($endday)): ?>
<p style="text-align: right; width: 100%; display: block; font-size: 12px; color: #888; margin: 5px 0 0 0;">
※ 定期定額扣款日期為系統自動更新,與人工更新的網路租約到期日可能不同。
</p>
<?php endif; ?>
<?php endif; ?>
<?php elseif (!empty($ecpay_number)): ?>
<div>
<span class="label">定期定額扣款狀態:</span>
<span style="color: red; text-align: right;">❌ 扣款失敗,請確認您的信用卡資訊或帳戶餘額<br>或與客服聯繫(03)358-5867。</span>
</div>
<p style="text-align: right; width: 100%; display: block; font-size: 12px; color: #888; margin: 5px 0 0 0;">
上一次扣款成功日期:<?php echo $ecpay?>。
</p>
<?php endif; ?>
<?php endif; ?>
<?php if (empty($ecpay)): ?>
<?php if ($isOver30Days): ?>
<p style="font-size: 14px; color: red; text-align: right; margin-top: 5px;">
⚠️ 使用期限已逾期,請盡快繳費。
</p>
<?php endif; ?>
<?php if (!$isSubscription): ?>
<div><span class="label">續期優惠:</span><span><?php echo htmlspecialchars($discount); ?></span></div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php if ($showPaymentButtons): ?>
<div class="payment-buttons">
<?php if (!$isSubscription): ?>
<!-- 1. ATM轉帳 -->
<button onclick="showPaymentInfo('atm')">ATM轉帳</button>
<!-- 2. 銀行匯款 -->
<button onclick="showPaymentInfo('bank')">銀行匯款</button>
<!-- 3. 下載帳單/手機條碼 -->
<button id="storeBtn" onclick="showPaymentInfo('store')">載入中...</button>
<!-- 4. 申請信用卡定期定額付款 -->
<button onclick="showPaymentInfo('applyecpay')">申請信用卡定期定額付款</button>
<?php else : ?>
<!-- 定期定額模式下的按鈕處理 -->
<?php if (empty($ecpay_number)): ?>
<button onclick="showPaymentInfo('subscription')">開始信用卡定期付款設定</button>
<?php else : ?>
<?php if ($rtn_msg === "是"): ?>
<div class="payment-info" style="display: block;">
<strong>信用卡定期付款已終止</strong><br>
您的信用卡定期付款功能,已終止,網路服務可使用至網路租月到期日止。
</div>
<?php else : ?>
<button onclick="showPaymentInfo('dropscription')">申請終止定期定額付款</button>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<div id="paymentInfo" class="payment-info"></div>
<div class="actions">
<button class="change-email-button" onclick="location.href='changeemail.php'">修改電子信箱</button>
<button class="change-password-button" onclick="location.href='newpwd.php'">修改密碼</button>
<button class="logout-button" onclick="location.href='logout.php'">登出</button>
</div>
<div class="note">
如有疑問,請聯繫客服:03-3585867
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const isMobile = /Mobi|Android/i.test(navigator.userAgent);
const storeBtn = document.getElementById("storeBtn");
if (storeBtn) {
storeBtn.textContent = isMobile ? "手機條碼" : "下載帳單";
}
});
const isMobile = /Mobi|Android/i.test(navigator.userAgent); //判斷是否為手機
let barcode2 = "<?php echo $code2; ?>"; // ✅ 直接從 PHP 變數讀取 code2
let planOptions = <?php echo json_encode($plan_options); ?>; // 讓 PHP 變數變成 JS 物件
let userSpeed = "<?php echo htmlspecialchars($speed); ?>";
let userMonth = "<?php echo htmlspecialchars($month); ?>";
// 檢測是否為手機裝置
function isMobileDevice() {
return /Mobi|Android/i.test(navigator.userAgent);
}
// 用來生成可繳方案的顯示區塊 (僅顯示,不供選擇)
function displayPlanOptions() {
let html = "";
if (Object.keys(planOptions).length > 0) {
html += `<div class="plan-display" style="margin-top: 15px; display: flex; justify-content: flex-end; align-items: center;">
<strong style="margin-right: 10px;">資費方案:</strong>`;
for (let key in planOptions) {
html += `<span style="margin-left: 10px;">${getPlanName(key)}:${planOptions[key].price} 元</span>`;
}
html += `</div>`;
}
return html;
}
let currentInfoType = null; // ✅ 用來記錄目前展開的是哪個付款方式
function showPaymentInfo(type) {
let paymentDiv = document.getElementById("paymentInfo");
// ✅ 如果再次點選相同的按鈕 → 收起該區塊
if (currentInfoType === type && paymentDiv.style.display === "block") {
paymentDiv.style.display = "none";
paymentDiv.innerHTML = "";
currentInfoType = null;
// ✅ 關閉時強制通知父頁更新高度(延遲補抓兩次)
setTimeout(() => {
if (typeof notifyParentOfHeightChange === "function") notifyParentOfHeightChange();
}, 100);
setTimeout(() => {
if (typeof notifyParentOfHeightChange === "function") notifyParentOfHeightChange();
}, 300);
return;
}
currentInfoType = type; // ✅ 更新目前狀態
let info = "";
let userID = "<?php echo htmlspecialchars($user); ?>";
let useremail = "<?php echo htmlspecialchars($email)?>";
if (type === "atm") {
info = `<strong>ATM轉帳</strong><br>
請匯款至以下帳號:<br>
銀行:812(台新銀行)<br>
帳號:${barcode2}<br>
完成繳款後,請聯繫客服確認。`;
// 直接附加可繳方案資訊
info += displayPlanOptions();
} else if (type === "bank") {
info = "<strong>銀行匯款</strong><br>收款銀行:台新銀行 北桃園分行<br>收款人帳號:20750100007936<br>收款人戶名:亞訊股份有限公司<br><br>完成繳款後,請聯繫客服確認。";
// 直接附加可繳方案資訊
info += displayPlanOptions();
} else if (type === "applyecpay"){
info = `
<strong>申請定期定額付款繳費</strong><br>
請填寫以下資訊送出申請,我們將於 1~2 個工作天內與您聯繫。<br><br>
<form id="cancelSubscriptionForm" method="POST" onsubmit="submitCancelForm(event)">
<label for="user_id">用戶 ID:</label><br>
<input type="text" id="user_id" name="user_id" value="${userID}" readonly
style="width:70%;padding:8px;border:1px solid #ccc;border-radius:5px;"><br><br>
<label for="phone">聯繫手機號碼:</label><br>
<input type="text" id="phone" name="phone" required pattern="^09\\d{8}$" placeholder="例如:0912345678"
style="width:70%;padding:8px;border:1px solid #ccc;border-radius:5px;"><br><br>
<input type="hidden" id="email" name = "email" value = "${useremail}">
<input type="hidden" id="apply" name = "apply" value = "apply">
<button type="submit" style="
background-color: #e53935;
color: white;
border: none;
padding: 10px 20px;
font-size: 16px;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.3s, transform 0.2s;">
送出申請
</button>
</form>
<div id="popupModal" style="display: none; position: fixed; z-index: 9999; left: 50%; top: 50%;
transform: translate(-50%, -50%); background-color: white; border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.3);
padding: 30px 40px; text-align: center; font-size: 16px;">
<span id="popupMessage">訊息</span><br><br>
<button onclick="closePopup()" style=" background-color: #1976d2; color: white; border: none;
padding: 8px 16px; border-radius: 6px; cursor: pointer;">關閉</button>
</div>
<div id="popupOverlay" style=" display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background-color: rgba(0,0,0,0.4); z-index: 9998;"></div>`;
} else if (type === "subscription") {
info = `<strong>定期付款說明</strong><br>
使用第三方安全支付平台(綠界科技)處理交易與付款,無論是交易過程中或交易後,本公司皆不保留任何信用卡資料,
如選擇儲存信用卡資料,卡片資料將以代碼化方式安全加密儲存於第三方支付平台,並自動傳送至發卡銀行進行交易授權。<br><br>
<strong>方案名稱與金額如下:</strong><br>
寬頻方案:${userSpeed} (下行/上行)bps<br>
每月費用:${userMonth} 元/月<br><br>`;
// 額外附上 displayPlanOptions() 如果你還要顯示其他選項(如可選方案)
info += displayPlanOptions();
// 加上確認送出按鈕
info += `<br>
<form id="subscriptionForm" method="POST" action="ecpay_subscription.php" target="_top">
<input type="hidden" name="user" value="<?php echo htmlspecialchars($user); ?>">
<input type="hidden" name="month" value="<?php echo htmlspecialchars($month); ?>">
<div style="text-align: center;">
<button type="button" style="margin-top: 10px; background-color: #4CAF50; color: white; border: none;
padding: 12px 24px; font-size: 16px; font-weight: bold; border-radius: 8px; cursor: pointer;
transition: background-color 0.3s, transform 0.2s;"
onmouseover="this.style.backgroundColor='#45a049'; this.style.transform='translateY(-3px)';"
onmouseout="this.style.backgroundColor='#4CAF50'; this.style.transform='translateY(0)';"
onmousedown="this.style.backgroundColor='#388e3c'; this.style.transform='translateY(1px)';"
onmouseup="this.style.backgroundColor='#45a049'; this.style.transform='translateY(-3px)';"
onclick="showRedirectWarning()">前往設定信用卡自動扣款</button>
</div>
</form>`;
} else if (type === "dropscription") {
info = `
<strong>申請終止定期定額付款</strong><br>
請填寫以下資訊送出申請,我們將於 1~2 個工作天內與您聯繫。<br><br>
<form id="cancelSubscriptionForm" method="POST" onsubmit="submitCancelForm(event)">
<label for="user_id">用戶 ID:</label><br>
<input type="text" id="user_id" name="user_id" value="${userID}" readonly
style="width:20%;padding:8px;border:1px solid #ccc;border-radius:5px;"><br><br>
<label for="phone">聯繫手機號碼:</label><br>
<input type="text" id="phone" name="phone" required pattern="^09\\d{8}$" placeholder="例如:0912345678"
style="width:24%;padding:8px;border:1px solid #ccc;border-radius:5px;"><br><br>
<label for="reason">終止原因:</label><br>
<textarea name="reason" rows="4" placeholder="請簡述原因..." required
style="width:80%;padding:8px;border:1px solid #ccc;border-radius:5px;"></textarea><br><br>
<input type="hidden" id="email" name = "email" value = "${useremail}">
<button type="submit" style="
background-color: #e53935;
color: white;
border: none;
padding: 10px 20px;
font-size: 16px;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.3s, transform 0.2s;">
送出申請
</button>
</form>
<div id="popupModal" style="display: none; position: fixed; z-index: 9999; left: 50%; top: 50%;
transform: translate(-50%, -50%); background-color: white; border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.3);
padding: 30px 40px; text-align: center; font-size: 16px;">
<span id="popupMessage">訊息</span><br><br>
<button onclick="closePopup()" style=" background-color: #1976d2; color: white; border: none;
padding: 8px 16px; border-radius: 6px; cursor: pointer;">關閉</button>
</div>
<div id="popupOverlay" style=" display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background-color: rgba(0,0,0,0.4); z-index: 9998;"></div>`;
} else if (type === "store") {
// 如果不是手機裝置,顯示僅供手機使用訊息
if (!isMobileDevice()) {
//info = `<p style="color: red; text-align: center;">超商繳費僅供手機使用</p>`;
info = `
<div style="text-align:center; margin-top: 10px;">
<button class="download-invoice-button" onclick="downloadInvoice()">
下載帳單 (PDF)
</button>
</div>
`;
} else {
let barcode1 = generateBarcodeNumber();
if (!barcode2 || barcode2.trim() === "null") barcode2 = "0000000000";
info += `
<strong>超商繳費</strong><br>
<span style="color: red; font-weight: bold; font-size: 16px;">⚠️ 顯示條碼時請將手機螢幕亮度調到最亮!</span><br>
<div class='barcode-container'>
<div class='barcode-label'>第一條碼</div>
<div class='barcode'><svg id="barcode1"></svg><div></div></div>
</div>
<div class='barcode-container'>
<div class='barcode-label'>第二條碼</div>
<div class='barcode'><svg id="barcode2"></svg><div></div></div>
</div>`;
// 產生一維條碼
setTimeout(() => {
let options = { format: "CODE39", displayValue: true, fontSize: 14, height: 50 }; // 統一條碼大小
JsBarcode("#barcode1", barcode1, options);
JsBarcode("#barcode2", barcode2, options);
}, 100);
// 生成付款選項
if (Object.keys(planOptions).length > 0) {
info += `<div id="thirdBarcode" class='third-barcode' style="margin-bottom: 15px;"></div>`; // 第三條碼在方案上方
info += `<div class="plan-selection">`;
for (let key in planOptions) {
info += `<label>
<input type="radio" name="plan" value="${key}" onclick="showThirdBarcode('${key}')">
${getPlanName(key)} ${planOptions[key].price} 元
</label>`;
}
info += `</div>`;
} else {
info += `<p style="color:red; text-align:center;">⚠️ 沒有可用的資費方案</p>`;
}
}
}
// 最後再顯示
paymentDiv.innerHTML = info;
paymentDiv.style.display = "block";
// 更新 iframe 高度
setTimeout(() => {
if (typeof updateIframeHeight === "function") updateIframeHeight();
}, 100);
}
function downloadInvoice() {
window.location.href = 'download_invoice.php';
}
function submitCancelForm(event) {
event.preventDefault();
const form = document.getElementById("cancelSubscriptionForm");
const formData = new FormData(form);
fetch("cancel_subscription.php", {
method: "POST",
body: formData
})
.then(response => response.text())
.then(data => {
alert("終止申請已送出,我們將盡快處理!");
document.getElementById("paymentInfo").innerHTML = "<p>感謝您提交申請。</p>";
})
.catch(error => {
alert("提交失敗,請稍後再試!");
console.error(error);
});
}
function showRedirectWarning() {
if (confirm("您即將跳轉至第三方付款平台,請完成信用卡資料設定以啟用定期扣款服務。")) {
// 確認後提交表單
document.getElementById("subscriptionForm").submit();
}
}
function generateThirdBarcode(firstBarcode, secondBarcode, monthlyFee) {
// 1. 取第一條碼前 4 碼 (相當於 FileMaker 的 Left(TSBAR1; 4))
const part1 = firstBarcode.substring(0, 4);
// 2. 建立費用字串 (9 碼):
// "00000" & Right("0" & monthlyFee; 4)
// 例:monthlyFee = 1500 -> "0" & "1500" = "01500" -> Right(...,4) = "1500"
// 再加 "00000" + "1500" = "000001500" (共 9 碼)
function getFee9(mFee) {
const fee4 = ("0" + mFee).slice(-4); // 取後 4 碼
return "00000" + fee4; // 再前面補 5 個 0
}
const feeStr = getFee9(monthlyFee); // 總長 9 碼
// 3. 輔助函式:模擬 FileMaker 的 Middle() 取數字
function getDigit(str, pos) {
// FileMaker 的 Middle(str;1;1) 等於 JS str.charAt(0)
// 所以需要 (pos - 1)
if (pos - 1 < 0 || pos - 1 >= str.length) return 0;
const digit = parseInt(str.charAt(pos - 1), 10);
return isNaN(digit) ? 0 : digit;
}
// --------------------------------------------------
// ✅ **第一組檢查碼 (checkChar1)**
// FileMaker 公式:
// - 取 TSBAR1 (第一條碼) 的 (1,3,5,7,9)
// - 取 TSBAR2 (第二條碼) 的 (1,3,5,7,9,11,13,15)
// - 取 feeStr(9 碼) 的 (1,3,5,7,9)
// - 另外還有 TSBAR1 的 (1,3) 再加一次
// → sum1 mod 11 = 10 → "B", 0 → "A", 其餘 → mod1
// --------------------------------------------------
let sum1 = 0;
[1, 3, 5, 7, 9].forEach(pos => sum1 += getDigit(firstBarcode, pos));
[1, 3, 5, 7, 9, 11, 13, 15].forEach(pos => sum1 += getDigit(secondBarcode, pos));
[1, 3, 5, 7, 9].forEach(pos => sum1 += getDigit(feeStr, pos));
// 注意:你原本在公式裡還寫了 + Middle(TSBAR1;1;1) + Middle(TSBAR1;3;1)
// 但其實 TSBAR1(1) + TSBAR1(3) 已包含在「TSBAR1 奇數位 (1,3,5,7,9)」了,
// 看你的公式好像重複加了 2 次 (1,3) -> 若這是 FileMaker 確實的邏輯,就保留:
sum1 += getDigit(firstBarcode, 1) + getDigit(firstBarcode, 3);
let mod1 = sum1 % 11;
let checkChar1;
if (mod1 === 10) {
checkChar1 = "B";
} else if (mod1 === 0) {
checkChar1 = "A";
} else {
checkChar1 = String(mod1);
}
// --------------------------------------------------
// ✅ **第二組檢查碼 (checkChar2)**
// FileMaker 公式:
// - 取 TSBAR1 (2,4,6,8)
// - 取 TSBAR2 (2,4,6,8,10,12,14,16)
// - 取 feeStr(9 碼) (2,4,6,8)
// - 另外還有 TSBAR1 的 (2,4) 再加一次
// → sum2 mod 11 = 10 → "Y", 0 → "X", 其餘 → mod2
// --------------------------------------------------
let sum2 = 0;
[2, 4, 6, 8].forEach(pos => sum2 += getDigit(firstBarcode, pos));
[2, 4, 6, 8, 10, 12, 14, 16].forEach(pos => sum2 += getDigit(secondBarcode, pos));
[2, 4, 6, 8].forEach(pos => sum2 += getDigit(feeStr, pos));
// 同樣你公式中對 (2,4) 也重複加了一次
sum2 += getDigit(firstBarcode, 2) + getDigit(firstBarcode, 4);
let mod2 = sum2 % 11;
let checkChar2;
if (mod2 === 10) {
checkChar2 = "Y";
} else if (mod2 === 0) {
checkChar2 = "X";
} else {
checkChar2 = String(mod2);
}
// 4. **最終組合:left(TSBAR1,4) & checkChar1 & checkChar2 & (9 碼費用)**
return part1 + checkChar1 + checkChar2 + feeStr;
}
function showThirdBarcode(plan) {
let thirdBarcodeDiv = document.getElementById("thirdBarcode");
if (planOptions[plan]) {
let firstBarcode = generateBarcodeNumber(); // TSBAR1
let secondBarcode = barcode2; // TSBAR2
let monthlyFee = planOptions[plan].price; // 方案費用
// 用修正後的 generateThirdBarcode()
let barcodeText = generateThirdBarcode(firstBarcode, secondBarcode, monthlyFee);
thirdBarcodeDiv.innerHTML = `
<div class='barcode-container'>
<div class='barcode-label'>第三條碼</div>
<div class='barcode'><svg id="barcode3"></svg></div>
</div>`;
thirdBarcodeDiv.style.display = "block";
// 顯示條碼
JsBarcode("#barcode3", barcodeText, { format: "CODE39", displayValue: true, fontSize: 14, height: 50 });
}
}
function getPlanName(plan) {
const names = {
"season": "季繳",
"halfyear": "半年繳",
"year": "年繳",
"twoyear": "兩年繳"
};
return names[plan] || "未知方案";
}
function generateBarcodeNumber() {
let today = new Date();
let year = today.getFullYear() - 1911;
// 如果民國年為個位數或兩位數則補0
if (year < 10) {
year = '0' + year;
} else if (year < 100) {
year = year.toString();
} else {
year = (year - 100).toString().padStart(2, '0');
}
let month = (today.getMonth() + 1).toString().padStart(2, '0');
let day = today.getDate().toString().padStart(2, '0');
return `${year}${month}${day}627`; // 確保為9碼
}
function postToEcpaySubscription(user, month) {
const form = document.createElement('form');
form.method = 'POST';
form.action = 'ecpay_subscription.php';
form.target = '_top'; // 確保整個畫面跳轉
const userInput = document.createElement('input');
userInput.type = 'hidden';
userInput.name = 'user';
userInput.value = user;
form.appendChild(userInput);
const monthInput = document.createElement('input');
monthInput.type = 'hidden';
monthInput.name = 'month';
monthInput.value = month;
form.appendChild(monthInput);
document.body.appendChild(form);
form.submit();
}
function submitCancelForm(event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('send_cancel_email.php', {
method: 'POST',
body: formData
})
.then(res => res.text())
.then(result => {
showPopup("✅ 您的申請已送出,我們將盡快與您聯繫。");
})
.catch(err => {
console.error(err);
showPopup("❌ 送出失敗,請稍後再試。");
});
}
function showPopup(message) {
document.getElementById("popupMessage").innerText = message;
document.getElementById("popupModal").style.display = "block";
document.getElementById("popupOverlay").style.display = "block";
}
function closePopup() {
document.getElementById("popupModal").style.display = "none";
document.getElementById("popupOverlay").style.display = "none";
location.reload(); // 🔁 關閉彈窗後刷新頁面
}
</script>
</body>
</html>