Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WHMCS行动挂钩不开火_Php_Hook_Whmcs - Fatal编程技术网

Php WHMCS行动挂钩不开火

Php WHMCS行动挂钩不开火,php,hook,whmcs,Php,Hook,Whmcs,一个星期以来,我一直把头靠在桌子上,最后决定是时候寻求帮助了 我正在尝试为WHMC创建操作挂钩,以便在客户端执行特定操作时使用。例如,我只是想让它返回它获取的变量。基本上我只需要用户ID,但出于测试目的,我要求它返回几个变量 下面是我的代码示例: /* * Define Hook Functions */ function hook_changedpassword($vars) { $userid = $vars['userid']; $firstname = $vars['

一个星期以来,我一直把头靠在桌子上,最后决定是时候寻求帮助了

我正在尝试为WHMC创建操作挂钩,以便在客户端执行特定操作时使用。例如,我只是想让它返回它获取的变量。基本上我只需要用户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显示,不管怎样,在采取这些操作时,这些操作都将得到处理

任何帮助都将不胜感激。

如果您检查n,则某些挂钩不支持返回任何值,例如,不支持响应

也许你的钩子在开火,但他们什么也没做。如果在某些钩子中不显示浏览器输出,即使echo也不会显示输出

这些钩子被期望执行一个操作,比如更新DB表或发送电子邮件等

对于调试,请使用以下语句将变量输出到文件,而不是输出到浏览器:

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吊钩是否已装载?您可以通过启用钩子调试来检查这一点:

钩子在开火吗?启用钩子调试后,您可以执行一个操作,并通过查看活动日志确保连接到的钩子点正在启动

你的钩子代码正在执行吗?一旦知道钩子点正在被触发,就需要显示代码正在执行。我更喜欢的方法是使用logActivity函数:

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

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

你把代码放在哪里了?如果不使用模块,则将其放置在:whmcs_path/includes/hooks/my_custom_hooks.phpI。该文件位于includes目录中,hooks文件夹中,一个名为alert_hooks.php的文件中,它仍然不会在操作时触发钩子。error_log命令没有执行任何操作。我已启用调试。我不想退回任何特别的东西。我更希望只返回$vars,并将其插入数据库以发出警报通知。您可以更改错误日志添加消息的位置,如果触发了钩子,您应该在钩子文件夹中找到一个名为file.log的文件。还添加了一个关于如何将数据插入数据库的示例,以添加到关于输出的一个小点上,这是完全正确的,有时对于开发环境来说相当烦人。WHMCS通常只允许输出到网页上的字段中,如错误对话框。添加的DB插入代码…不插入。代码函数hook_changedpassword$vars{//Insert vars in the database DB::table'tblclientnotifications'->Insert['id'=>null,'recip'=>1,'title'=>Password Changed,'description'=>您的密码已更改。,'unread'=>1];}//当客户端更改门户密码时,添加\u hook'ClientChangePassword',1,hook\u changedpassword/上面的代码是更改后的代码。