我一直在桌子上撞了一个星期,最后决定是时候寻求帮助了。
我正在尝试为客户端执行某个操作时为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看起来无论如何,这些都将在采取这些行动时得到处理。
非常感谢任何帮助。
答案 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));