WHMCS行动不会被解雇

时间:2017-07-19 23:57:39

标签: php hook whmcs

我一直在桌子上撞了一个星期,最后决定是时候寻求帮助了。

我正在尝试为客户端执行某个操作时为WHMCS创建操作挂钩。例如,我只是想让它返回它抓取的变量。基本上我只需要用户ID,但出于测试目的,我要求它返回几个变量。

以下是我的代码示例:

/*
 * Define Hook Functions 
*/
function hook_changedpassword($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    return print_r($vars);
}

function hook_clientmerged($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    return print_r($vars);  
}

function hook_clientupdated($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    return print_r($vars);  
}

function hook_emailverification($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    return print_r($vars);  
}

/*
 * Start Add Hook Functions 
*/

// when client changes portal password
add_hook('ClientChangePassword', 1, "hook_changedpassword");

// when client accounts are merged.
add_hook('AfterClientMerge', 1, "hook_clientmerged");

// when client updates client details
add_hook('AfterClientMerge', 1, "hook_clientupdated");

// when client verifies email address
add_hook('ClientEmailVerificationComplete', 1, "hook_emailverification");

它不与任何模块或插件相关联,我不知道这是否是问题,但是Hooks Wiki看起来无论如何,这些都将在采取这些行动时得到处理。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您查看Hook documentatio n,则某些挂钩并不支持返回任何值,例如AfterClientMerge,不支持响应。

可能你的钩子正在开火,但他们什么都不做。 WHMCS以某种方式抑制某些钩子中的浏览器输出,甚至echo也不会显示输出。

此类挂钩有望执行操作,例如更新数据库表或发送电子邮件等等。

要进行调试,请使用以下语句将变量输出到文件,而不是将它们输出到浏览器:

error_log(print_r($vars, true), 3, __DIR__.'/file.log');

功能变为:

function hook_clientmerged($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    error_log(print_r($vars, true), 3, __DIR__.'/file.log');  
}

编辑:将数据插入数据库

文件:example_hook.php

<?php
use WHMCS\Database\Capsule as DB;

function hook_clientmerged($vars) {
    $userid = $vars['userid'];
    $firstname = $vars['firstname'];
    $lastname = $vars['lastname'];
    $email = $vars['email'];
    $password = $vars['password'];

    //Insert vars in the database
    DB::table('table_name')->insert(
        ['field1' => $userid, 'field2' => $firstname]
    ); 
}

答案 1 :(得分:0)

因此,您需要跟踪调试此阶段的三个阶段:

1)挂钩是否被装上?您可以通过启用挂钩调试来检查:

https://docs.whmcs.com/Other_Tab#Hooks_Debug_Mode

2)钩子是否开火?启用挂钩调试后,您可以执行操作并确保通过查看活动日志来触发连接的挂钩点。

3)你的钩子代码是否正在执行?一旦你知道钩子点正在触发你想要显示你的代码正在执行。我首选的方法是使用logActivity()函数:

https://developers.whmcs.com/advanced/logging/

检查挂钩被触发时存在哪些变量的简单方法是:

logActivity('Hook variables: '.print_r($vars, true));