新版會員收費系統上線,目標:優化展示形式、引入會員機制、支援多樣化營銷場景。本文檔記錄 v1.0 版本核心邏輯與介面規格。
系統通過 URL 參數 mst(Module Style Type)控制展示模式:
https://www.demo.com/?mst=1 # 模式 1
https://www.demo.com/?mst=2 # 模式 2
https://www.demo.com/?mst=3 # 模式 3
https://www.demo.com/?mst=4 # 模式 4
後端根據 mst 值渲染對應模板,前端無感知切換,支援運營快速實驗。
| 模式 | 適用場景 | 核心元素 |
|---|---|---|
| mst=1 | 首頁 Banner 位 | 大圖 + 核心權益 + CTA 按鈕 |
| mst=2 | 側邊欄/浮層 | 緊湊布局 + 價格錨點 + 限時標識 |
| mst=3 | 會員中心頁 | 完整權益對比表 + 續費/升級入口 |
| mst=4 | 活動落地頁 | 營銷文案 + 社會化證明 + 多套餐選擇 |
系統支援多維度價格策略,getDiscountPrice() 為核心函數:
<?php
function getDiscountPrice($userId, $planId, $context = []) {
// 1. 基礎價格
$basePrice = Plan::find($planId)->price;
// 2. 會員等級折扣(配置表驅動)
$userLevel = User::find($userId)->vip_level;
$levelDiscount = Config::get("vip.discount.{$userLevel}", 1.0);
// 3. 活動專項折扣(優先級高)
$promoDiscount = Promo::getActiveDiscount($planId, $context['channel'] ?? '');
// 4. 新用戶首單折扣
$isNewUser = Order::where('user_id', $userId)->count() === 0;
$newUserDiscount = $isNewUser ? Config::get('vip.new_user_discount', 1.0) : 1.0;
// 5. 疊加規則:取最優或疊加(業務配置)
$finalDiscount = min($levelDiscount, $promoDiscount, $newUserDiscount); // 取最優
// 或:$finalDiscount = $levelDiscount * $promoDiscount * $newUserDiscount; // 疊加
return round($basePrice * $finalDiscount, 2);
}
?>
plans 表:id、name、price、duration、features(JSON)、statusvip_levels 表:level、name、discount_rate、daily_bonus、prioritypromos 表:id、code、discount、scope(plan/channel)、start_at、end_at、usage_limitorders 表:冗存快照價格(base_price、discount、final_price),保證歷史訂單不可篡改// JS 獲取價格(支援無刷新切換方案)
fetch(`/api/vip/price?plan_id=${planId}&mst=${mst}`)
.then(r => r.json())
.then(data => {
document.querySelector('.price-original').textContent = `¥${data.original}`;
document.querySelector('.price-final').textContent = `¥${data.final}`;
document.querySelector('.discount-tag').textContent = data.discount_label;
});
mst 模式渲染正確性會員收費系統的核心不在「收費」,而在靈活的價格策略引擎與可配置的展示模式。v1.0 奠定基礎,後續將引入 A/B 測試框架、動態定價模型、生命週期運營自動化,讓每一次展示都精準觸達用戶支付意願。