You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WHMCS钩子异常:拥有活跃产品仍被重定向至新客户页面求助

问题排查与修复方案

核心问题分析

你的钩子逻辑失效主要是因为WHMCS的GetClientsProducts API返回结构存在歧义:当客户仅拥有1个产品时,返回的products是一维数组而非二维数组,导致你的foreach循环无法正确遍历产品信息,最终has_active_product始终为false,触发不必要的重定向。

此外还有几个次要问题会影响逻辑可靠性:

  • 直接读取$_SESSION['uid']不符合WHMCS钩子的最佳实践,且存在安全风险
  • $_SERVER['REQUEST_URI']的严格匹配会忽略带查询参数的情况,可能导致循环重定向
  • 未处理客户无任何产品时的数组不存在场景

修复后的代码

add_hook('ClientAreaPage', 1, function($vars) {
    // 跳过目标页面,避免循环重定向(支持带参数的URL)
    if (strpos($_SERVER['REQUEST_URI'], '/store/adhesion') === 0) {
        return;
    }

    // 处理已登录客户
    if (!empty($vars['client']['id'])) {
        $client_id = $vars['client']['id'];
        $result = localAPI('GetClientsProducts', [
            'clientid' => $client_id,
            'status' => 'Active'
        ]);

        if ($result['result'] == 'success') {
            $products = $result['products'] ?? [];
            $has_active_product = false;

            // 统一处理单产品和多产品的数组结构
            $products = is_array($products) && isset($products['id']) ? [$products] : $products;

            foreach ($products as $product) {
                // 验证产品组ID和状态
                if ((int)$product['gid'] === 1 && $product['status'] === 'Active') {
                    $has_active_product = true;
                    break;
                }
            }

            // 无符合条件的产品则重定向
            if (!$has_active_product) {
                header('Location: /store/adhesion');
                exit;
            }
        }
    } 
    // 处理未登录的新客户(如果需要强制引导到目标页面)
    else {
        header('Location: /store/adhesion');
        exit;
    }
});

关键修改说明

  1. 兼容API返回结构:通过is_array($products) && isset($products['id'])判断是否为单产品数组,将其转换为二维数组,确保foreach循环正常遍历。
  2. 使用WHMCS内置变量:用$vars['client']['id']获取当前登录客户ID,替代直接操作$_SESSION,更符合WHMCS开发规范。
  3. 宽松的URL判断:用strpos替代严格相等,支持带查询参数的目标页面URL,避免循环重定向。
  4. 空数组安全处理:用?? []确保$products始终是数组,避免无产品时的报错。
  5. 新增未登录客户处理:如果你的需求包含未登录的新客户,保留else分支;如果仅针对已登录新客户,可以删除该分支。

内容的提问来源于stack exchange,提问作者Jim1120

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:26:01