How save AdditionalField data for a domain in WHMCS

Viewed 138

I am having a hard time figuring out how does the Additional fields for Domains even work other than being editable on the order form and from admin panel, but what if we have to update its custom fields from a Module such as Registrar module.

I have a requirement where my domain registrar sends a Request ID in its domain register API response, which I have to store with the domain to later fetch domain status using it.

I have created an Additional field for domain

$additionaldomainfields[".co"][] = array(
    "Name" => "RequestId",
    "Type" => "text",
    "Show on Order Form" => false
);

And have AfterRegistrarRegister hook in my registrar module.

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,
        //);
    }
);

I tried

$vars['additionalfield']['RequestId'] = 'testtt';

But of course it doesn't work.

I am also referring to the Classdocs of WHMCS https://classdocs.whmcs.com/7.6/WHMCS/Domain/Registrar/Domain.html

But there appears to be no method that updates the values of a domain additional field.

Any help is appreciated.

1 Answers

I was able to solve the problem using the Capsule Database interaction as described here -

https://developers.whmcs.com/advanced/db-interaction/

use WHMCS\Database\Capsule;
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;
    }

Now I can use this function to pass the domain id in the domain register hook and save the data returned by the registrar directly into the database.

Related