大数跨境

订单提醒:浏览器Notification桌面通知方案

订单提醒:浏览器Notification桌面通知方案 wordpress知识
2026-09-18
5

搭建低成本稳定的后台订单桌面通知方案

利用浏览器原生 Notification API 实现后台订单桌面提醒,是一种无需常驻服务、成本低且稳定性高的技术选型。

方案核心优势

  • 后端轻量:基于原生 PHP FPM 即可运行,无需部署额外的常驻守护进程。
  • 后台生效:即使页面最小化或切换至后台,新订单仍可触发系统级桌面通知。
  • 一次授权,长期有效:用户首次点击授权后,浏览器将持久记录权限状态;后续刷新或重新打开页面无需重复操作。
  • 内容自定义:支持灵活配置通知标题与提醒文案。
  • 安全规范:公网站点需部署 HTTPS 协议以符合浏览器安全策略。

实施注意事项

浏览器安全限制:通知权限申请必须绑定用户主动点击事件,禁止页面加载时自动弹出授权窗口。但在完成首次授权后,后续访问可自动检测并复用权限状态。

完整代码实现

PHP 后端接口

文件路径:api/get_new_orders.php
功能逻辑:查询未提醒的订单数据,查询成功后立即标记为“已提醒”,防止重复弹窗。

<?php
header("Content-Type:application/json;charset=utf-8");
$dsn = 'mysql:host=127.0.0.1;dbname=你的数据库名;charset=utf8mb4';
$dbuser = '数据库账号';
$dbpwd = '数据库密码';
try {
    $pdo = new PDO($dsn, $dbuser, $dbpwd);
    $sql = "SELECT id,order_no,total_amount,create_time FROM orders WHERE is_notify=0";
    $stmt = $pdo->query($sql);
    $list = $stmt->fetchAll(PDO::FETCH_ASSOC);
    if(!empty($list)){
        $ids = array_column($list,'id');
        $idsStr = implode(',',$ids);
        $pdo->exec("UPDATE orders SET is_notify=1 WHERE id IN($idsStr)");
    }
    echo json_encode($list);
}catch (Exception $e){
    echo json_encode([]);
}
?>

前端后台页面

包含权限申请、状态检测及轮询逻辑的完整 HTML 示例。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>订单后台</title>
</head>
<body>
    <h3>订单管理后台</h3>
    <button id="allowNotifyBtn">开启桌面订单通知</button>
    <script>
        let notifyEnabled = false;
        const notifyBtn = document.getElementById('allowNotifyBtn');
        
        // 页面加载时自动检测权限:已授权则直接启用,隐藏按钮
        window.onload = function(){
            if (Notification.permission === "granted") {
                notifyEnabled = true;
                notifyBtn.style.display = 'none';
            }
        }
        
        // 用户点击申请通知权限(仅首次未授权时需要)
        notifyBtn.onclick = async function () {
            const permission = await Notification.requestPermission();
            if (permission === "granted") {
                notifyEnabled = true;
                this.style.display = 'none';
                alert("桌面通知已开启,页面最小化也能收到订单弹窗");
            } else {
                alert("通知权限被拒绝,请在浏览器设置里打开网站通知权限");
            }
        }
        
        // 弹出订单桌面通知
        function showOrderNotify() {
            if (!notifyEnabled || Notification.permission !== "granted") return;
            new Notification("新订单提醒", {
                body: "您有新的订单,请及时处理",
                tag: "new_order"
            });
        }
        
        // 轮询查询订单
        function pollOrder() {
            fetch('./api/get_new_orders.php')
                .then(res => res.json())
                .then(orders => {
                    if (orders.length > 0) {
                        showOrderNotify();
                    }
                })
        }
        
        // 20 秒轮询一次,平衡时效性与服务器压力
        setInterval(pollOrder, 20000);
    </script>
</body>
</html>

数据库表结构调整

需在订单表 orders 中新增字段 is_notify,用于标记通知推送状态,避免同一订单反复触发提醒。

is_notify TINYINT DEFAULT 0
  • 0:未提醒的新订单
  • 1:已推送桌面通知

关键技术要点总结

  • 权限持久化:通知权限仅需用户首次主动点击授权,浏览器将永久保存该站点的许可状态。
  • Tag 参数机制:设置相同的 tag 值可使新通知覆盖旧通知,避免消息堆积;若移除该参数,每条订单将独立弹出通知。
  • 兜底策略建议:由于浏览器完全关闭时无法触发 Notification,建议搭配邮件推送作为容错机制,确保零漏单。

该方案依托浏览器原生 API,开发维护成本低,虽非毫秒级实时推送,但足以满足后台订单监控场景需求。

#Notification #订单提醒

【声明】内容源于网络
0
0
wordpress知识
各类跨境出海行业相关资讯
内容 354
粉丝 0
wordpress知识 各类跨境出海行业相关资讯
总阅读10.1k
粉丝0
内容354