Jump to content

Nnamdi

Newbie
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Nnamdi

  • Rank
    Junior Member
  1. Nnamdi

    Registrar Module

    Hi Guys , I am currently working on a WHMCS registrar module using the Sample Rgistrar Module by WHMCS, I have done an API connect to my registry and have performed domain registration with my code, when I transfer the same code to WHMCS registrar module and activate the module then perform domain registration, I get errors: <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>404 - Not Found</title> </head> <body> <h1>404 - Not Found</h1> </body> </html> The same API resource URL I have tested from my computer and it registered a domain, and have checked it's very much available, I also get this error on WHMCS: Registrar Error Bad response received from API, I am sure my code works well without WHMCS and is able to do a number of registration successfully but once it's transfered to WHMCS registrar module , the 404 error will surface, I am very confused with this kind of issue and don't know what could be the problem, I have also allowed my server IP on the registry server so this couldn't be the issue. my code is pasted below and the whole module is attached ApiClient.php: <?php namespace WHMCS\Module\Registrar\Registrarmodule; /** * Sample Registrar Module Simple API Client. * * A simple API Client for communicating with an external API endpoint. */ class ApiClient { const API_URL = 'https://api.namebright.com/auth/token'; const regUrl = 'https://api.namebright.com/rest/purchase/register'; protected $results = array(); /** * Make external API call to registrar API. * * @param string $action * @param array $postfields * * @throws \Exception Connection error * @throws \Exception Bad API response * * @return array */ function getToken() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,self::API_URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials&client_id=ngtfhost:WHMCS&client_secret=".urlencode("uPI*jyoh+z{UF:V92G.+]TUDC?[5O]")); curl_setopt($ch, CURLOPT_POST, 1); $headers = array(); $headers[] = 'Content-Type: application/x-www-form-urlencoded'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); // echo "<h2>".$result."</h2>"; $token = json_decode($result); // echo "<span>".$token->access_token."</span>"; if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } // curl_close ($ch); return $token->access_token; } public function call($action, $postfields) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,self::regUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); //curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); $headers = array(); $headers[] = 'Authorization: Bearer '.getToken(); $headers[] = 'Content-Type: application/json'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); if (curl_errno($ch)) { throw new \Exception('Connection Error: ' . curl_errno($ch) . ' - ' . curl_error($ch)); } curl_close($ch); $this->results = $this->processResponse($response); logModuleCall( 'NamebrightRegistrarmodule', $action, $postfields, $response, $this->results, array( $postfields['username']='ngtfhost', // Mask username & password in request/response data $postfields['password']='uPI*jyoh+z{UF:V92G.+]TUDC?[5O]', ) ); if ($this->results === null && json_last_error() !== JSON_ERROR_NONE) { //throw new \Exception(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); throw new \Exception('Bad response received from API'); } return $this->results; } public function call1($action, $nameserver,$domain) { $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, self::API_URL . $action); // curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields)); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // curl_setopt($ch, CURLOPT_TIMEOUT, 100); curl_setopt($ch, CURLOPT_URL, 'https://api.namebright.com/rest/account/domains/'.$nameserver.'/nameservers/'.$domain); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); $headers = array(); $headers[] = 'Authorization: Bearer '.getToken(); $headers[] = 'Content-Length: 0'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); if (curl_errno($ch)) { throw new \Exception('Connection Error: ' . curl_errno($ch) . ' - ' . curl_error($ch)); } curl_close($ch); $this->results = $this->processResponse($response); logModuleCall( 'NamebrightRegistrarmodule', $action, $postfields, $response, $this->results, array( $postfields['username'], // Mask username & password in request/response data $postfields['password'], ) ); if ($this->results === null && json_last_error() !== JSON_ERROR_NONE) { throw new \Exception('Bad response received from API'); } return $this->results; } /** * Process API response. * * @param string $response * * @return array */ public function processResponse($response) { return json_decode($response, true); } /** * Get from response results. * * @param string $key * * @return string */ public function getFromResponse($key) { return isset($this->results[$key]) ? $this->results[$key] : ''; } } namebright.php: <?php /** * WHMCS SDK Sample Registrar Module * * Registrar Modules allow you to create modules that allow for domain * registration, management, transfers, and other functionality within * WHMCS. * * This sample file demonstrates how a registrar module for WHMCS should * be structured and exercises supported functionality. * * Registrar Modules are stored in a unique directory within the * modules/registrars/ directory that matches the module's unique name. * This name should be all lowercase, containing only letters and numbers, * and always start with a letter. * * Within the module itself, all functions must be prefixed with the module * filename, followed by an underscore, and then the function name. For * example this file, the filename is "registrarmodule.php" and therefore all * function begin "registrarmodule_". * * If your module or third party API does not support a given function, you * should not define the function within your module. WHMCS recommends that * all registrar modules implement Register, Transfer, Renew, GetNameservers, * SaveNameservers, GetContactDetails & SaveContactDetails. * * For more information, please refer to the online documentation. * * @see https://developers.whmcs.com/domain-registrars/ * * @copyright Copyright (c) WHMCS Limited 2017 * @license https://www.whmcs.com/license/ WHMCS Eula */ if (!defined("WHMCS")) { die("This file cannot be accessed directly"); } use WHMCS\Domains\DomainLookup\ResultsList; use WHMCS\Domains\DomainLookup\SearchResult; use WHMCS\Module\Registrar\Registrarmodule\ApiClient; // Require any libraries needed for the module to function. // require_once __DIR__ . '/path/to/library/loader.php'; // // Also, perform any initialization required by the service's library. /** * Define module related metadata * * Provide some module information including the display name and API Version to * determine the method of decoding the input values. * * @return array */ function namebright_MetaData() { return array( 'DisplayName' => 'TFhost Namebright Module for WHMCS', 'APIVersion' => '1.1', ); } /** * Define registrar configuration options. * * The values you return here define what configuration options * we store for the module. These values are made available to * each module function. * * You can store an unlimited number of configuration settings. * The following field types are supported: * * Text * * Password * * Yes/No Checkboxes * * Dropdown Menus * * Radio Buttons * * Text Areas * * @return array */ function namebright_getConfigArray() { return array( // Friendly display name for the module 'FriendlyName' => array( 'Type' => 'System', 'Value' => 'TFhost Namebright Module for WHMCS', ), // a text field type allows for single line text input 'APIUsername' => array( 'Type' => 'text', 'Size' => '25', //'Default' => '1024', 'Description' => 'Enter in Username', ), // a password field type allows for masked text input 'APIKey' => array( 'Type' => 'password', 'Size' => '25', 'Default' => '', 'Description' => 'Enter secret value here', ), // the yesno field type displays a single checkbox option 'TestMode' => array( 'Type' => 'yesno', 'Description' => 'Tick to enable', ) // the dropdown field type renders a select menu of options // 'Account Mode' => array( // 'Type' => 'dropdown', // 'Options' => array( // 'option1' => 'Display Value 1', // 'option2' => 'Second Option', // 'option3' => 'Another Option', // ), // 'Description' => 'Choose one', // ), // the radio field type displays a series of radio button options // 'Email Preference' => array( // 'Type' => 'radio', // 'Options' => 'First Option,Second Option,Third Option', // 'Description' => 'Choose your preference', // ), // the textarea field type allows for multi-line text input // 'Email' => array( // 'Type' => 'textarea', // 'Rows' => '3', // 'Cols' => '60', // 'Description' => 'Freeform multi-line text input field', // ), $conn = new ApiClient(); ); } /** * Register a domain. * * Attempt to register a domain with the domain registrar. * * This is triggered when the following events occur: * * Payment received for a domain registration order * * When a pending domain registration order is accepted * * Upon manual request by an admin user * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_RegisterDomain($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // registration parameters $sld = $params['sld']; $tld = $params['tld']; $registrationPeriod = $params['regperiod']; /** * Nameservers. * * If purchased with web hosting, values will be taken from the * assigned web hosting server. Otherwise uses the values specified * during the order process. */ $nameserver1 = $params['ns1']; $nameserver2 = $params['ns2']; $nameserver3 = $params['ns3']; $nameserver4 = $params['ns4']; $nameserver5 = $params['ns5']; // registrant information $firstName = $params["firstname"]; $lastName = $params["lastname"]; $fullName = $params["fullname"]; // First name and last name combined $companyName = $params["companyname"]; $email = $params["email"]; $address1 = $params["address1"]; $address2 = $params["address2"]; $city = $params["city"]; $state = $params["state"]; // eg. TX $stateFullName = $params["fullstate"]; // eg. Texas $postcode = $params["postcode"]; // Postcode/Zip code $countryCode = $params["countrycode"]; // eg. GB $countryName = $params["countryname"]; // eg. United Kingdom $phoneNumber = $params["phonenumber"]; // Phone number as the user provided it $phoneCountryCode = $params["phonecc"]; // Country code determined based on country $phoneNumberFormatted = $params["fullphonenumber"]; // Format: +CC.xxxxxxxxxxxx /** * Admin contact information. * * Defaults to the same as the client information. Can be configured * to use the web hosts details if the `Use Clients Details` option * is disabled in Setup > General Settings > Domains. */ $adminFirstName = $params["adminfirstname"]; $adminLastName = $params["adminlastname"]; $adminCompanyName = $params["admincompanyname"]; $adminEmail = $params["adminemail"]; $adminAddress1 = $params["adminaddress1"]; $adminAddress2 = $params["adminaddress2"]; $adminCity = $params["admincity"]; $adminState = $params["adminstate"]; // eg. TX $adminStateFull = $params["adminfullstate"]; // eg. Texas $adminPostcode = $params["adminpostcode"]; // Postcode/Zip code $adminCountry = $params["admincountry"]; // eg. GB $adminPhoneNumber = $params["adminphonenumber"]; // Phone number as the user provided it $adminPhoneNumberFormatted = $params["adminfullphonenumber"]; // Format: +CC.xxxxxxxxxxxx // domain addon purchase status $enableDnsManagement = (bool) $params['dnsmanagement']; $enableEmailForwarding = (bool) $params['emailforwarding']; $enableIdProtection = (bool) $params['idprotection']; /** * Premium domain parameters. * * Premium domains enabled informs you if the admin user has enabled * the selling of premium domain names. If this domain is a premium name, * `premiumCost` will contain the cost price retrieved at the time of * the order being placed. The premium order should only be processed * if the cost price now matches the previously fetched amount. */ $premiumDomainsEnabled = (bool) $params['premiumEnabled']; $premiumDomainsCost = $params['premiumCost']; // Build post data //$postfields = "DomainName=".$sld . '.' . $tld."&Years=".$registrationPeriod."&CategoryId=582200&CategoryName=server2"; $postfields = array( 'DomainName' => $sld . '.' . $tld, 'Years' => $registrationPeriod, 'CategoryId' => '582200', 'CategoryName' => 'server2' ); $nameserver = $nameserver1; $domain1 = $sld . '.' . $tld; // $postfields = array( // 'username' => $userIdentifier, // 'password' => $apiKey, // 'testmode' => $testMode, // 'DomainName' => $sld . '.' . $tld, // 'Years' => $registrationPeriod, // 'CategoryId' => '0', // 'CategoryName' => 'Doamin', // 'nameservers' => array( // 'ns1' => $nameserver1, // 'ns2' => $nameserver2, // 'ns3' => $nameserver3, // 'ns4' => $nameserver4, // 'ns5' => $nameserver5, // ), // 'contacts' => array( // 'registrant' => array( // 'firstname' => $firstName, // 'lastname' => $lastName, // 'companyname' => $companyName, // 'email' => $email, // 'address1' => $address1, // 'address2' => $address2, // 'city' => $city, // 'state' => $state, // 'zipcode' => $postcode, // 'country' => $countryCode, // 'phonenumber' => $phoneNumberFormatted, // ), // 'tech' => array( // 'firstname' => $adminFirstName, // 'lastname' => $adminLastName, // 'companyname' => $adminCompanyName, // 'email' => $adminEmail, // 'address1' => $adminAddress1, // 'address2' => $adminAddress2, // 'city' => $adminCity, // 'state' => $adminState, // 'zipcode' => $adminPostcode, // 'country' => $adminCountry, // 'phonenumber' => $adminPhoneNumberFormatted, // ), // ), // 'dnsmanagement' => $enableDnsManagement, // 'emailforwarding' => $enableEmailForwarding, // 'idprotection' => $enableIdProtection, //); // if ($premiumDomainsEnabled && $premiumDomainsCost) { // $postfields['accepted_premium_cost'] = $premiumDomainsCost; // } try { $api = new ApiClient(); $api->call('Register', $postfields); //$api->call1('register',$nameserver,$domain1); return array( 'success' => true, ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Initiate domain transfer. * * Attempt to create a domain transfer request for a given domain. * * This is triggered when the following events occur: * * Payment received for a domain transfer order * * When a pending domain transfer order is accepted * * Upon manual request by an admin user * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_TransferDomain($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // registration parameters $sld = $params['sld']; $tld = $params['tld']; $registrationPeriod = $params['regperiod']; $eppCode = $params['eppcode']; /** * Nameservers. * * If purchased with web hosting, values will be taken from the * assigned web hosting server. Otherwise uses the values specified * during the order process. */ $nameserver1 = $params['ns1']; $nameserver2 = $params['ns2']; $nameserver3 = $params['ns3']; $nameserver4 = $params['ns4']; $nameserver5 = $params['ns5']; // registrant information $firstName = $params["firstname"]; $lastName = $params["lastname"]; $fullName = $params["fullname"]; // First name and last name combined $companyName = $params["companyname"]; $email = $params["email"]; $address1 = $params["address1"]; $address2 = $params["address2"]; $city = $params["city"]; $state = $params["state"]; // eg. TX $stateFullName = $params["fullstate"]; // eg. Texas $postcode = $params["postcode"]; // Postcode/Zip code $countryCode = $params["countrycode"]; // eg. GB $countryName = $params["countryname"]; // eg. United Kingdom $phoneNumber = $params["phonenumber"]; // Phone number as the user provided it $phoneCountryCode = $params["phonecc"]; // Country code determined based on country $phoneNumberFormatted = $params["fullphonenumber"]; // Format: +CC.xxxxxxxxxxxx /** * Admin contact information. * * Defaults to the same as the client information. Can be configured * to use the web hosts details if the `Use Clients Details` option * is disabled in Setup > General Settings > Domains. */ $adminFirstName = $params["adminfirstname"]; $adminLastName = $params["adminlastname"]; $adminCompanyName = $params["admincompanyname"]; $adminEmail = $params["adminemail"]; $adminAddress1 = $params["adminaddress1"]; $adminAddress2 = $params["adminaddress2"]; $adminCity = $params["admincity"]; $adminState = $params["adminstate"]; // eg. TX $adminStateFull = $params["adminfullstate"]; // eg. Texas $adminPostcode = $params["adminpostcode"]; // Postcode/Zip code $adminCountry = $params["admincountry"]; // eg. GB $adminPhoneNumber = $params["adminphonenumber"]; // Phone number as the user provided it $adminPhoneNumberFormatted = $params["adminfullphonenumber"]; // Format: +CC.xxxxxxxxxxxx // domain addon purchase status $enableDnsManagement = (bool) $params['dnsmanagement']; $enableEmailForwarding = (bool) $params['emailforwarding']; $enableIdProtection = (bool) $params['idprotection']; /** * Premium domain parameters. * * Premium domains enabled informs you if the admin user has enabled * the selling of premium domain names. If this domain is a premium name, * `premiumCost` will contain the cost price retrieved at the time of * the order being placed. The premium order should only be processed * if the cost price now matches that previously fetched amount. */ $premiumDomainsEnabled = (bool) $params['premiumEnabled']; $premiumDomainsCost = $params['premiumCost']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'eppcode' => $eppCode, 'nameservers' => array( 'ns1' => $nameserver1, 'ns2' => $nameserver2, 'ns3' => $nameserver3, 'ns4' => $nameserver4, 'ns5' => $nameserver5, ), 'years' => $registrationPeriod, 'contacts' => array( 'registrant' => array( 'firstname' => $firstName, 'lastname' => $lastName, 'companyname' => $companyName, 'email' => $email, 'address1' => $address1, 'address2' => $address2, 'city' => $city, 'state' => $state, 'zipcode' => $postcode, 'country' => $countryCode, 'phonenumber' => $phoneNumberFormatted, ), 'tech' => array( 'firstname' => $adminFirstName, 'lastname' => $adminLastName, 'companyname' => $adminCompanyName, 'email' => $adminEmail, 'address1' => $adminAddress1, 'address2' => $adminAddress2, 'city' => $adminCity, 'state' => $adminState, 'zipcode' => $adminPostcode, 'country' => $adminCountry, 'phonenumber' => $adminPhoneNumberFormatted, ), ), 'dnsmanagement' => $enableDnsManagement, 'emailforwarding' => $enableEmailForwarding, 'idprotection' => $enableIdProtection, ); try { $api = new ApiClient(); $api->call('Transfer', $postfields); return array( 'success' => true, ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Renew a domain. * * Attempt to renew/extend a domain for a given number of years. * * This is triggered when the following events occur: * * Payment received for a domain renewal order * * When a pending domain renewal order is accepted * * Upon manual request by an admin user * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_RenewDomain($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // registration parameters $sld = $params['sld']; $tld = $params['tld']; $registrationPeriod = $params['regperiod']; // domain addon purchase status $enableDnsManagement = (bool) $params['dnsmanagement']; $enableEmailForwarding = (bool) $params['emailforwarding']; $enableIdProtection = (bool) $params['idprotection']; /** * Premium domain parameters. * * Premium domains enabled informs you if the admin user has enabled * the selling of premium domain names. If this domain is a premium name, * `premiumCost` will contain the cost price retrieved at the time of * the order being placed. A premium renewal should only be processed * if the cost price now matches that previously fetched amount. */ $premiumDomainsEnabled = (bool) $params['premiumEnabled']; $premiumDomainsCost = $params['premiumCost']; // Build post data. $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'DomainName' => $sld . '.' . $tld, 'Years' => $registrationPeriod, 'CategoryId' => '0', 'CategoryName' => null // 'dnsmanagement' => $enableDnsManagement, // 'emailforwarding' => $enableEmailForwarding, // 'idprotection' => $enableIdProtection, ); try { $api = new ApiClient(); $api->call1('renew', $postfields); return array( 'success' => true, ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Fetch current nameservers. * * This function should return an array of nameservers for a given domain. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_GetNameservers($params) { // user defined configuration values $userIdentifier = $params['API Username']; $apiKey = $params['API Key']; $testMode = $params['Test Mode']; // $accountMode = $params['Account Mode']; // $emailPreference = $params['Email Preference']; // $additionalInfo = $params['Additional Information']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; $registrationPeriod = $params['regperiod']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('GetNameservers', $postfields); return array( 'success' => true, 'ns1' => $api->getFromResponse('nameserver1'), 'ns2' => $api->getFromResponse('nameserver2'), 'ns3' => $api->getFromResponse('nameserver3'), 'ns4' => $api->getFromResponse('nameserver4'), 'ns5' => $api->getFromResponse('nameserver5'), ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Save nameserver changes. * * This function should submit a change of nameservers request to the * domain registrar. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_SaveNameservers($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // submitted nameserver values $nameserver1 = $params['ns1']; $nameserver2 = $params['ns2']; $nameserver3 = $params['ns3']; $nameserver4 = $params['ns4']; $nameserver5 = $params['ns5']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'nameserver1' => $nameserver1, 'nameserver2' => $nameserver2, 'nameserver3' => $nameserver3, 'nameserver4' => $nameserver4, 'nameserver5' => $nameserver5, ); try { $api = new ApiClient(); $api->call('SetNameservers', $postfields); return array( 'success' => true, ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Get the current WHOIS Contact Information. * * Should return a multi-level array of the contacts and name/address * fields that be modified. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_GetContactDetails($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('GetWhoisInformation', $postfields); return array( 'Registrant' => array( 'FirstName' => $api->getFromResponse('registrant.firstname'), 'LastName' => $api->getFromResponse('registrant.lastname'), 'CompanyName' => $api->getFromResponse('registrant.company'), 'EmailAddress' => $api->getFromResponse('registrant.email'), 'Address1' => $api->getFromResponse('registrant.address1'), 'Address2' => $api->getFromResponse('registrant.address2'), 'City' => $api->getFromResponse('registrant.city'), 'State' => $api->getFromResponse('registrant.state'), 'Postcode' => $api->getFromResponse('registrant.postcode'), 'Country' => $api->getFromResponse('registrant.country'), 'PhoneNumber' => $api->getFromResponse('registrant.phone'), 'FaxNumber' => $api->getFromResponse('registrant.fax'), ), 'Technical' => array( 'FirstName' => $api->getFromResponse('tech.firstname'), 'LastName' => $api->getFromResponse('tech.lastname'), 'CompanyName' => $api->getFromResponse('tech.company'), 'EmailAddress' => $api->getFromResponse('tech.email'), 'Address1' => $api->getFromResponse('tech.address1'), 'Address2' => $api->getFromResponse('tech.address2'), 'City' => $api->getFromResponse('tech.city'), 'State' => $api->getFromResponse('tech.state'), 'Postcode' => $api->getFromResponse('tech.postcode'), 'Country' => $api->getFromResponse('tech.country'), 'Phone Number' => $api->getFromResponse('tech.phone'), 'Fax Number' => $api->getFromResponse('tech.fax'), ), 'Billing' => array( 'FirstName' => $api->getFromResponse('billing.firstname'), 'LastName' => $api->getFromResponse('billing.lastname'), 'CompanyName' => $api->getFromResponse('billing.company'), 'EmailAddress' => $api->getFromResponse('billing.email'), 'Address1' => $api->getFromResponse('billing.address1'), 'Address2' => $api->getFromResponse('billing.address2'), 'City' => $api->getFromResponse('billing.city'), 'State' => $api->getFromResponse('billing.state'), 'Postcode' => $api->getFromResponse('billing.postcode'), 'Country' => $api->getFromResponse('billing.country'), 'PhoneNumber' => $api->getFromResponse('billing.phone'), 'FaxNumber' => $api->getFromResponse('billing.fax'), ), 'Admin' => array( 'FirstName' => $api->getFromResponse('admin.firstname'), 'LastName' => $api->getFromResponse('admin.lastname'), 'CompanyName' => $api->getFromResponse('admin.company'), 'EmailAddress' => $api->getFromResponse('admin.email'), 'Address1' => $api->getFromResponse('admin.address1'), 'Address2' => $api->getFromResponse('admin.address2'), 'City' => $api->getFromResponse('admin.city'), 'State' => $api->getFromResponse('admin.state'), 'Postcode' => $api->getFromResponse('admin.postcode'), 'Country' => $api->getFromResponse('admin.country'), 'PhoneNumber' => $api->getFromResponse('admin.phone'), 'FaxNumber' => $api->getFromResponse('admin.fax'), ), ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Update the WHOIS Contact Information for a given domain. * * Called when a change of WHOIS Information is requested within WHMCS. * Receives an array matching the format provided via the `GetContactDetails` * method with the values from the users input. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_SaveContactDetails($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['Account Mode']; // $emailPreference = $params['Email Preference']; // $additionalInfo = $params['Additional Information']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // whois information $contactDetails = $params['contactdetails']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'contacts' => array( 'registrant' => array( 'firstname' => $contactDetails['Registrant']['First Name'], 'lastname' => $contactDetails['Registrant']['Last Name'], 'company' => $contactDetails['Registrant']['Company Name'], 'email' => $contactDetails['Registrant']['Email Address'], // etc... ), 'tech' => array( 'firstname' => $contactDetails['Technical']['First Name'], 'lastname' => $contactDetails['Technical']['Last Name'], 'company' => $contactDetails['Technical']['Company Name'], 'email' => $contactDetails['Technical']['Email Address'], // etc... ), 'billing' => array( 'firstname' => $contactDetails['Billing']['First Name'], 'lastname' => $contactDetails['Billing']['Last Name'], 'company' => $contactDetails['Billing']['Company Name'], 'email' => $contactDetails['Billing']['Email Address'], // etc... ), 'admin' => array( 'firstname' => $contactDetails['Admin']['First Name'], 'lastname' => $contactDetails['Admin']['Last Name'], 'company' => $contactDetails['Admin']['Company Name'], 'email' => $contactDetails['Admin']['Email Address'], // etc... ), ), ); try { $api = new ApiClient(); $api->call('UpdateWhoisInformation', $postfields); return array( 'success' => true, ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Check Domain Availability. * * Determine if a domain or group of domains are available for * registration or transfer. * * @param array $params common module parameters * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @see \WHMCS\Domains\DomainLookup\SearchResult * @see \WHMCS\Domains\DomainLookup\ResultsList * * @throws Exception Upon domain availability check failure. * * @return \WHMCS\Domains\DomainLookup\ResultsList An ArrayObject based collection of \WHMCS\Domains\DomainLookup\SearchResult results */ function namebright_CheckAvailability($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // availability check parameters $searchTerm = $params['searchTerm']; $punyCodeSearchTerm = $params['punyCodeSearchTerm']; $tldsToInclude = $params['tldsToInclude']; $isIdnDomain = (bool) $params['isIdnDomain']; $premiumEnabled = (bool) $params['premiumEnabled']; // Build post data $postfields = array( 'DomainName' => $sld . '.' . $tld, 'ProductTypeName'=>'', 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'searchTerm' => $searchTerm, 'tldsToSearch' => $tldsToInclude, 'includePremiumDomains' => $premiumEnabled, ); try { $api = new ApiClient(); $api->call('availability/{domain}', $postfields); $results = new ResultsList(); foreach ($api->getFromResponse('domains') as $domain) { // Instantiate a new domain search result object $searchResult = new SearchResult($domain['sld'], $domain['tld']); // Determine the appropriate status to return if ($domain['status'] == 'available') { $status = SearchResult::STATUS_NOT_REGISTERED; } elseif ($domain['statis'] == 'registered') { $status = SearchResult::STATUS_REGISTERED; } elseif ($domain['statis'] == 'reserved') { $status = SearchResult::STATUS_RESERVED; } else { $status = SearchResult::STATUS_TLD_NOT_SUPPORTED; } $searchResult->setStatus($status); // Return premium information if applicable if ($domain['isPremiumName']) { $searchResult->setPremiumDomain(true); $searchResult->setPremiumCostPricing( array( 'register' => $domain['premiumRegistrationPrice'], 'renew' => $domain['premiumRenewPrice'], 'CurrencyCode' => 'USD', ) ); } // Append to the search results list $results->append($searchResult); } return $results; } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Domain Suggestion Settings. * * Defines the settings relating to domain suggestions (optional). * It follows the same convention as `getConfigArray`. * * @see https://developers.whmcs.com/domain-registrars/check-availability/ * * @return array of Configuration Options */ function namebright_DomainSuggestionOptions() { return array( 'includeCCTlds' => array( 'FriendlyName' => 'Include Country Level TLDs', 'Type' => 'yesno', 'Description' => 'Tick to enable', ), ); } /** * Get Domain Suggestions. * * Provide domain suggestions based on the domain lookup term provided. * * @param array $params common module parameters * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @see \WHMCS\Domains\DomainLookup\SearchResult * @see \WHMCS\Domains\DomainLookup\ResultsList * * @throws Exception Upon domain suggestions check failure. * * @return \WHMCS\Domains\DomainLookup\ResultsList An ArrayObject based collection of \WHMCS\Domains\DomainLookup\SearchResult results */ function namebright_GetDomainSuggestions($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // availability check parameters $searchTerm = $params['searchTerm']; $punyCodeSearchTerm = $params['punyCodeSearchTerm']; $tldsToInclude = $params['tldsToInclude']; $isIdnDomain = (bool) $params['isIdnDomain']; $premiumEnabled = (bool) $params['premiumEnabled']; $suggestionSettings = $params['suggestionSettings']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'searchTerm' => $searchTerm, 'tldsToSearch' => $tldsToInclude, 'includePremiumDomains' => $premiumEnabled, 'includeCCTlds' => $suggestionSettings['includeCCTlds'], ); try { $api = new ApiClient(); $api->call('GetSuggestions', $postfields); $results = new ResultsList(); foreach ($api->getFromResponse('domains') as $domain) { // Instantiate a new domain search result object $searchResult = new SearchResult($domain['sld'], $domain['tld']); // All domain suggestions should be available to register $searchResult->setStatus(SearchResult::STATUS_NOT_REGISTERED); // Used to weight results by relevance $searchResult->setScore($domain['score']); // Return premium information if applicable if ($domain['isPremiumName']) { $searchResult->setPremiumDomain(true); $searchResult->setPremiumCostPricing( array( 'register' => $domain['premiumRegistrationPrice'], 'renew' => $domain['premiumRenewPrice'], 'CurrencyCode' => 'USD', ) ); } // Append to the search results list $results->append($searchResult); } return $results; } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Get registrar lock status. * * Also known as Domain Lock or Transfer Lock status. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return string|array Lock status or error message */ function namebright_GetRegistrarLock($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('GetLockStatus', $postfields); if ($api->getFromResponse('lockstatus') == 'locked') { return 'locked'; } else { return 'unlocked'; } } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Set registrar lock status. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_SaveRegistrarLock($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // lock status $lockStatus = $params['lockenabled']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'registrarlock' => ($lockStatus == 'locked') ? 1 : 0, ); try { $api = new ApiClient(); $api->call('SetLockStatus', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Get DNS Records for DNS Host Record Management. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array DNS Host Records */ function namebright_GetDNS($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('GetDNSHostRecords', $postfields); $hostRecords = array(); foreach ($api->getFromResponse('records') as $record) { $hostRecords[] = array( "hostname" => $record['name'], // eg. www "type" => $record['type'], // eg. A "address" => $record['address'], // eg. 10.0.0.1 "priority" => $record['mxpref'], // eg. 10 (N/A for non-MX records) ); } return $hostRecords; } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Update DNS Host Records. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_SaveDNS($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // dns record parameters $dnsrecords = $params['dnsrecords']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'records' => $dnsrecords, ); try { $api = new ApiClient(); $api->call('GetDNSHostRecords', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Enable/Disable ID Protection. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_IDProtectToggle($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // id protection parameter $protectEnable = (bool) $params['protectenable']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); if ($protectEnable) { $api->call('EnableIDProtection', $postfields); } else { $api->call('DisableIDProtection', $postfields); } return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Request EEP Code. * * Supports both displaying the EPP Code directly to a user or indicating * that the EPP Code will be emailed to the registrant. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array * */ function namebright_GetEPPCode($params) { // user defined configuration values $userIdentifier = $params['API Username']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('RequestEPPCode', $postfields); if ($api->getFromResponse('eppcode')) { // If EPP Code is returned, return it for display to the end user return array( 'eppcode' => $api->getFromResponse('eppcode'), ); } else { // If EPP Code is not returned, it was sent by email, return success return array( 'success' => 'success', ); } } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Release a Domain. * * Used to initiate a transfer out such as an IPSTAG change for .UK * domain names. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_ReleaseDomain($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // transfer tag $transferTag = $params['transfertag']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'newtag' => $transferTag, ); try { $api = new ApiClient(); $api->call('ReleaseDomain', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Delete Domain. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_RequestDelete($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('DeleteDomain', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Register a Nameserver. * * Adds a child nameserver for the given domain name. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_RegisterNameserver($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // nameserver parameters $nameserver = $params['nameserver']; $ipAddress = $params['ipaddress']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'nameserver' => $nameserver, 'ip' => $ipAddress, ); try { $api = new ApiClient(); $api->call('RegisterNameserver', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Modify a Nameserver. * * Modifies the IP of a child nameserver. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_ModifyNameserver($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // nameserver parameters $nameserver = $params['nameserver']; $currentIpAddress = $params['currentipaddress']; $newIpAddress = $params['newipaddress']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'nameserver' => $nameserver, 'currentip' => $currentIpAddress, 'newip' => $newIpAddress, ); try { $api = new ApiClient(); $api->call('ModifyNameserver', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Delete a Nameserver. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_DeleteNameserver($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // nameserver parameters $nameserver = $params['nameserver']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, 'nameserver' => $nameserver, ); try { $api = new ApiClient(); $api->call('DeleteNameserver', $postfields); return array( 'success' => 'success', ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Sync Domain Status & Expiration Date. * * Domain syncing is intended to ensure domain status and expiry date * changes made directly at the domain registrar are synced to WHMCS. * It is called periodically for a domain. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_Sync($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; $accountMode = $params['AccountMode']; $emailPreference = $params['EmailPreference']; $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('GetDomainInfo', $postfields); return array( 'expirydate' => $api->getFromResponse('expirydate'), // Format: YYYY-MM-DD 'active' => (bool) $api->getFromResponse('active'), // Return true if the domain is active 'expired' => (bool) $api->getFromResponse('expired'), // Return true if the domain has expired 'transferredAway' => (bool) $api->getFromResponse('transferredaway'), // Return true if the domain is transferred out ); } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Incoming Domain Transfer Sync. * * Check status of incoming domain transfers and notify end-user upon * completion. This function is called daily for incoming domains. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_TransferSync($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Build post data $postfields = array( 'username' => $userIdentifier, 'password' => $apiKey, 'testmode' => $testMode, 'domain' => $sld . '.' . $tld, ); try { $api = new ApiClient(); $api->call('CheckDomainTransfer', $postfields); if ($api->getFromResponse('transfercomplete')) { return array( 'completed' => true, 'expirydate' => $api->getFromResponse('expirydate'), // Format: YYYY-MM-DD ); } elseif ($api->getFromResponse('transferfailed')) { return array( 'failed' => true, 'reason' => $api->getFromResponse('failurereason'), // Reason for the transfer failure if available ); } else { // No status change, return empty array return array(); } } catch (\Exception $e) { return array( 'error' => $e->getMessage(), ); } } /** * Client Area Custom Button Array. * * Allows you to define additional actions your module supports. * In this example, we register a Push Domain action which triggers * the `registrarmodule_push` function when invoked. * * @return array */ function namebright_ClientAreaCustomButtonArray() { return array( 'PushDomain' => 'push', ); } /** * Client Area Allowed Functions. * * Only the functions defined within this function or the Client Area * Custom Button Array can be invoked by client level users. * * @return array */ function namebright_ClientAreaAllowedFunctions() { return array( 'PushDomain' => 'push', ); } /** * Example Custom Module Function: Push * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return array */ function namebright_push($params) { // user defined configuration values $userIdentifier = $params['APIUsername']; $apiKey = $params['APIKey']; $testMode = $params['TestMode']; // $accountMode = $params['AccountMode']; // $emailPreference = $params['EmailPreference']; // $additionalInfo = $params['AdditionalInformation']; // domain parameters $sld = $params['sld']; $tld = $params['tld']; // Perform custom action here... return 'Not implemented'; } /** * Client Area Output. * * This function renders output to the domain details interface within * the client area. The return should be the HTML to be output. * * @param array $params common module parameters * * @see https://developers.whmcs.com/domain-registrars/module-parameters/ * * @return string HTML Output */ function namebright_ClientArea($params) { $output = ' <div class="alert alert-info"> Your custom HTML output goes here... </div> '; return $output; } namebright.zip
  2. Welcome to WHMCS.Community Nnamdi! We're glad you're here please take some time to familiarise yourself with the Community Rules & Guidelines and take a moment to introduce yourself to other WHMCS.Community members in the Introduce Yourself Board.

×

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated