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

如何向WHMCS的viewinvoice.tpl传递自定义参数以显示自定义错误信息?

向WHMCS的viewinvoice.tpl传递自定义变量的可行方案

问题描述

我希望在viewinvoice.tpl中显示自定义错误信息,计划通过传递错误码参数实现。当前网关/回调文件结尾调用函数:

callback3DSecureRedirect($invoiceIdWhmcs, $paymentSuccess);

但该函数不支持传入第三个参数。之后我尝试通过自定义URL重定向:

header("Location: https://xxxx.com/viewinvoice.php?id=11470&paymentfailed=true&abc=bca")

但这种方法下会话无法正常工作。请问是否存在向viewinvoice.tpl传递变量的可行方法?

解决方案

1. 利用WHMCS会话存储传递变量

这是最稳妥的方案,不会影响核心文件的可维护性:

  • 在网关/回调文件中,将自定义错误信息或错误码存入WHMCS会话:
// 存入自定义错误文本
$_SESSION['custom_invoice_error'] = "3D验证未通过,请重新尝试支付";
// 或者存入错误码,方便模板根据码显示对应信息
$_SESSION['custom_error_code'] = "3D_AUTH_FAILED";

// 正常调用原重定向函数
callback3DSecureRedirect($invoiceIdWhmcs, $paymentSuccess);
  • 在viewinvoice.tpl模板中读取会话变量并显示,显示后清空避免重复展示:
{if isset($_SESSION['custom_invoice_error'])}
    <div class="alert alert-danger">{$_SESSION['custom_invoice_error']}</div>
    {* 清空会话变量 *}
    {php}$_SESSION['custom_invoice_error'] = null;{/php}
{/if}

2. 扩展callback3DSecureRedirect函数(需注意版本更新)

如果能接受修改核心文件(更新WHMCS时记得备份重写),可以直接扩展该函数支持自定义参数:

  • 找到includes/gatewayfunctions.php中的callback3DSecureRedirect函数,添加第三个参数:
function callback3DSecureRedirect($invoiceId, $paymentSuccess, $customData = []) {
    // 保留原函数所有逻辑
    
    // 添加自定义数据存入会话的逻辑
    if (!empty($customData)) {
        foreach ($customData as $key => $val) {
            $_SESSION['invoice_custom_' . $key] = $val;
        }
    }
    
    // 保留原重定向代码
}
  • 调用时传入自定义参数:
callback3DSecureRedirect($invoiceIdWhmcs, $paymentSuccess, ['error_code' => 'PAYMENT_FAILED']);
  • 在模板中读取对应会话变量即可。

3. 控制器层捕获URL参数并赋值模板

如果自定义重定向的会话问题是跨域导致的,可在viewinvoice.php开头添加参数捕获逻辑:

// 在viewinvoice.php的初始化部分添加
if (isset($_GET['paymentfailed']) && $_GET['paymentfailed'] === 'true') {
    // 根据参数生成对应错误信息
    $errorMsg = "支付流程异常,请检查支付状态或联系客服";
    // 赋值给Smarty模板
    $smarty->assign('customInvoiceError', $errorMsg);
}
  • 在viewinvoice.tpl中直接使用模板变量:
{if $customInvoiceError}
    <div class="alert alert-danger">{$customInvoiceError}</div>
{/if}

这种方法需要确保WHMCS会话配置正确,若网关与WHMCS域名不同,需开启跨域会话支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:52:32