如何在WHMCS中为域名保存来自Registrar模块的AdditionalField数据
解决方案
你直接修改$vars变量不生效是因为该变量仅为钩子执行时的入参副本,修改不会同步写入数据库。你可以直接使用WHMCS内置的域名自定义字段操作方法完成值的更新,具体代码如下:
add_hook('AfterRegistrarRegister', 1, function($vars) { // 已有的业务逻辑 $domainId = $vars['domainid']; // 此处替换为你调用注册商API返回的真实Request ID $realRequestId = '从注册接口响应中提取的RequestId值'; // 定位到你创建的RequestId附加字段 $requestIdField = WHMCS\Domain\CustomField::where('fieldname', 'RequestId')->first(); if ($requestIdField) { // 为指定域名写入/更新附加字段值 $requestIdField->setValueForDomain($domainId, $realRequestId); } });
如果你偏好直接操作数据库,也可以使用WHMCS自带的Capsule ORM实现:
use Illuminate\Database\Capsule\Manager as Capsule; add_hook('AfterRegistrarRegister', 1, function($vars) { $domainId = $vars['domainid']; $realRequestId = '从注册接口响应中提取的RequestId值'; // 查询RequestId字段的ID $fieldId = Capsule::table('tblcustomfields') ->where('type', 'domain') ->where('fieldname', 'RequestId') ->value('id'); if ($fieldId) { // 存在则更新,不存在则插入 Capsule::table('tblcustomfieldsvalues') ->updateOrInsert( ['relid' => $domainId, 'fieldid' => $fieldId], ['value' => $realRequestId] ); } });
两种方案都可以正常将Request ID和对应域名绑定存储,后续你可以通过对应的读取方法拿到该值用于域名状态查询。
内容的提问来源于stack exchange,提问作者Deepak Kamat
相关产品推荐
相关产品推荐

