我很难弄清楚除了在订单和管理面板上可编辑之外,域名的附加字段是如何工作的,但是如果我们必须从一个模块(如注册商模块)更新其自定义字段呢?
我有一个要求,我的域注册商在其域注册API响应中发送请求ID,我必须将其存储在域中,以便稍后使用它获取域状态。
我已经为域
创建了一个附加字段$additionaldomainfields[".co"][] = array(
"Name" => "RequestId",
"Type" => "text",
"Show on Order Form" => false
);
和AfterRegistrarRegister
钩子在我的注册器模块。
add_hook('AfterRegistrarRegister', 1, function($vars) {
require_once 'init.php';
$varsjson = json_encode( $vars );
$domainName = $vars['params']['sld'] . '.' . $vars['params']['tld'];
$domainid = $vars['domainid'];
//return array(
// 'abortWithSuccess' => true,
//);
}
);
我试着
$vars['additionalfield']['RequestId'] = 'testtt';
但这当然行不通。
我也指的是WHMCS的Classdocs https://classdocs.whmcs.com/7.6/WHMCS/Domain/Registrar/Domain.html
但是似乎没有方法可以更新域附加字段的值。
任何帮助都是感激的。
我可以使用这里描述的Capsule Database交互来解决这个问题-
https://developers.whmcs.com/advanced/db-interaction/
use WHMCSDatabaseCapsule;
function updateRequestId( $domainId, $newdata ) {
$finalRequestId = $newdata;
$response = array(
'updated' => false,
'request_id' => $finalRequestId,
'errors' => array()
);
try {
$requestId = Capsule::table('tbldomainsadditionalfields')
->where('domainid', $domainId)
->where('name', 'RequestId');
$reqArr = $requestId->update([
'value' => $finalRequestId
]);
$response['request_id'] = $finalRequestId;
$response['updated'] = true;
} catch (Exception $e) {
echo "Error: {$e->getMessage()}";
$response['errors'][] = $e->getMessage();
}
return $response;
}
现在我可以使用这个函数在域注册钩子中传递域id,并将注册器返回的数据直接保存到数据库中。