function namecheap_RegisterDomain($params) { require_once dirname(__FILE__) . "/namecheapapi.php"; $testmode = (bool) $params['TestMode']; $username = $testmode ? $params['SandboxUsername'] : $params['Username']; $password = $testmode ? $params['SandboxPassword'] : $params['Password']; $tld = $params['tld']; $sld = $params['sld']; $oIDNA = new NamecheapRegistrarIDNA($sld, $tld); $sld = $oIDNA->getEncodedSld(); $response = ''; $result = $request_params = $values = array(); $nameservers = array($params['ns1'], $params['ns2'], $params['ns3'], $params['ns4'], $params['ns5']); foreach ($nameservers as $k => $v) { if (!$v) { unset($nameservers[$k]); } } try { if ('ca' == strtolower($tld)) { $params['adminpostcode'] = str_replace(' ', '', $params['adminpostcode']); // change zip code if ('CA' == $params['admincountry']) { if (' ' != $params['adminpostcode'][3]) { $params['adminpostcode'] = substr($params['adminpostcode'], 0, 3) . ' ' . substr($params['adminpostcode'], 3); } } if ('US' == $params['admincountry']) { if (strlen($params['adminpostcode']) > 5) { $params['adminpostcode'] = substr($params['adminpostcode'], 0, 5) . '-' . substr($params['adminpostcode'], 5); } } } // Client Details $registrant = array('RegistrantFirstName' => $params['firstname'], 'RegistrantLastName' => $params['lastname'], 'RegistrantOrganizationName' => $params['companyname'], 'RegistrantAddress1' => $params['address1'], 'RegistrantAddress2' => $params['address2'], 'RegistrantCity' => $params['city'], 'RegistrantStateProvince' => $params['state'], 'RegistrantPostalCode' => $params['postcode'], 'RegistrantCountry' => $params['country'], 'RegistrantPhone' => $params['fullphonenumber'], 'RegistrantEmailAddress' => $params['email']); // Billing/Admin/Tech Contact Details $registrantAdmin = array('FirstName' => $params['adminfirstname'], 'LastName' => $params['adminlastname'], 'OrganizationName' => $params['admincompanyname'], 'Address1' => $params['adminaddress1'], 'Address2' => $params['adminaddress2'], 'City' => $params['admincity'], 'StateProvince' => $params['adminstate'], 'PostalCode' => $params['adminpostcode'], 'Country' => $params['admincountry'], 'Phone' => $params['adminfullphonenumber'], 'EmailAddress' => $params['adminemail']); $aux = $tech = $admin = array(); foreach ($registrantAdmin as $k => $v) { $admin["Admin" . $k] = $v; $tech["Tech" . $k] = $v; $aux["AuxBilling" . $k] = $v; } $request_params = array('DomainName' => $sld . '.' . $tld, 'Years' => $params['regperiod'], 'Nameservers' => implode(',', $nameservers)); // idn code if ($oIDNA->sldWasEncoded()) { $request_params['IdnCode'] = $oIDNA->getIdnCode(empty($params['additionalfields']['idnCode']) ? '' : $params['additionalfields']['idnCode']); } $request_params += $registrant + $admin + $tech + $aux; if (!empty($params['PromotionCode'])) { $request_params['PromotionCode'] = $params['PromotionCode']; } // whois guard $wg_ex = array("bz", "ca", "cn", "co.uk", "de", "eu", "in", "me.uk", "mobi", "nu", "org.uk", "us", "ws", "uk"); if ($params['idprotection'] && !in_array(strtolower($tld), $wg_ex)) { $request_params['AddFreeWhoisguard'] = "yes"; $request_params['WGEnabled'] = "yes"; } // extended attributes for some TLDs if ('eu' == strtolower($tld)) { // for .eu domains $request_params['EUAgreeWhoisPolicy'] = "YES"; $request_params['EUAgreeDeletePolicy'] = "YES"; $langs = array('BG' => "Bulgaria", 'CS' => "Czech", 'DS' => "Danish", 'NL' => "Dutch", 'EN' => "English", 'ET' => "Estonian", 'FI' => "Finnish", 'FR' => "French", 'DE' => "German", 'EL' => "Greek", 'HL' => "Hungarian", 'IT' => "Italian", 'LV' => "Latvian", 'LI' => "Lithuanian", 'MT' => "Maltese", 'PL' => "Polish", 'PT' => "Portuguese", 'RO' => "Romania", 'SK' => "Slovak", 'SL' => "Slovenian", 'ES' => "Spanish", 'SV' => "Swedish"); foreach ($langs as $k => $v) { if ($v == $params['additionalfields']['Language for Address Used']) { $request_params['EUAdrLang'] = $k; break; } } } elseif ('us' == strtolower($tld)) { // for .us domains $request_params['RegistrantNexus'] = $params['additionalfields']['Nexus Category']; $request_params['RegistrantNexusCountry'] = $params['additionalfields']['Nexus Country']; switch ($params['additionalfields']['Application Purpose']) { case "Business use for profit": $request_params['RegistrantPurpose'] = "P1"; break; case "Non-profit business": case "Club": case "Association": case "Religious Organization": $request_params['RegistrantPurpose'] = "P2"; break; case "Educational purposes": $request_params['RegistrantPurpose'] = "P4"; break; case "Government purposes": $request_params['RegistrantPurpose'] = "P5"; break; case "Personal Use": default: $request_params['RegistrantPurpose'] = "P3"; break; } } elseif ('ca' == strtolower($tld)) { $request_params['CIRAWhoisDisplay'] = "on" == $params['additionalfields']['WHOIS Opt-out'] ? "Private" : "Full"; $request_params['CIRAAgreementVersion'] = "2.0"; $request_params['CIRAAgreementValue'] = "on" == $params['additionalfields']['CIRA Agreement'] ? "Y" : ""; $request_params['CIRALanguage'] = "en"; if (!empty($params['additionalfields']['jobTitle'])) { $jobTitle = $params['additionalfields']['jobTitle']; } else { if (!empty($params['additionalfields']['Job Title'])) { $jobTitle = $params['additionalfields']['Job Title']; } else { $jobTitle = 'Director'; } } $request_params['RegistrantJobTitle'] = $jobTitle; $request_params['AdminJobTitle'] = $jobTitle; $request_params['TechJobTitle'] = $jobTitle; $request_params['AuxBillingJobTitle'] = $jobTitle; /** * missing from WHMCS: * "INB" - Indian Band * "MAJ" - The Queen */ switch ($params['additionalfields']['Legal Type']) { case 'Corporation': $request_params['CIRALegalType'] = "CCO"; break; case 'Permanent Resident of Canada': $request_params['CIRALegalType'] = "RES"; break; case 'Government': $request_params['CIRALegalType'] = "GOV"; break; case 'Canadian Educational Institution': $request_params['CIRALegalType'] = "EDU"; break; case 'Canadian Unincorporated Association': $request_params['CIRALegalType'] = "ASS"; break; case 'Canadian Hospital': $request_params['CIRALegalType'] = "HOP"; break; case 'Partnership Registered in Canada': $request_params['CIRALegalType'] = "PRT"; break; case 'Trade-mark registered in Canada': $request_params['CIRALegalType'] = "TDM"; break; case 'Canadian Trade Union': $request_params['CIRALegalType'] = "TRD"; break; case 'Canadian Political Party': $request_params['CIRALegalType'] = "PLT"; break; case 'Canadian Library Archive or Museum': $request_params['CIRALegalType'] = "LAM"; break; case 'Trust established in Canada': $request_params['CIRALegalType'] = "TRS"; break; case 'Aboriginal Peoples': $request_params['CIRALegalType'] = "ABO"; break; case 'Legal Representative of a Canadian Citizen': $request_params['CIRALegalType'] = "LGR"; break; case 'Official mark registered in Canada': $request_params['CIRALegalType'] = "OMK"; break; case 'Canadian Citizen': default: $request_params['CIRALegalType'] = "CCT"; break; } } elseif ('co.uk' == strtolower($tld) || 'org.uk' == strtolower($tld) || 'me.uk' == strtolower($tld) || 'uk' == strtolower($tld)) { $key = strtoupper(str_replace('.', '', $tld)); $request_params[$key . 'CompanyID'] = $params['additionalfields']['Company ID Number']; $request_params[$key . 'Registeredfor'] = $params['additionalfields']['Registrant Name']; /** * missing from WHMCS: * "FIND" - Non-UK individual * "IP" - UK Industrial/Provident Registered Company * "SCH" - UK School * "GOV" - UK Government Body * "CRC" - UK Corporation by Royal Charter * "STAT" - UK Statutory Body FIND */ switch ($params['Legal Type']) { case 'UK Limited Company': $request_params[$key . 'LegalType'] = "LTD"; break; case 'UK Public Limited Company': $request_params[$key . 'LegalType'] = "PLC"; break; case 'UK Partnership': $request_params[$key . 'LegalType'] = "PTNR"; break; case 'UK Limited Liability Partnership': $request_params[$key . 'LegalType'] = "LLP"; break; case 'Sole Trader': $request_params[$key . 'LegalType'] = "STRA"; break; case 'UK Registered Charity': $request_params[$key . 'LegalType'] = "RCHAR"; break; case 'UK Entity (other)': $request_params[$key . 'LegalType'] = "OTHER"; break; case 'Foreign Organization': $request_params[$key . 'LegalType'] = "FCORP"; break; case 'Other foreign organizations': $request_params[$key . 'LegalType'] = "FOTHER"; break; case "UK Industrial/Provident Registered Company": $request_params[$key . 'LegalType'] = "IP"; break; case "UK School": $request_params[$key . 'LegalType'] = "SCH"; break; case "UK Government Body": $request_params[$key . 'LegalType'] = "GOV"; break; case "UK Corporation by Royal Charter": $request_params[$key . 'LegalType'] = "CRC"; break; case "UK Statutory Body": $request_params[$key . 'LegalType'] = "STAT"; break; case "Non-UK Individual": $request_params[$key . 'LegalType'] = "FIND"; break; case 'Individual': default: $request_params[$key . 'LegalType'] = "IND"; break; } } elseif ('de' == strtolower($tld)) { $request_params['DEConfirmAddress'] = "DE"; $request_params['DEAgreeDelete'] = "Yes"; } elseif ('asia' == strtolower($tld)) { $request_params['ASIACCLocality'] = $params['additionalfields']['Locality']; $request_params['ASIALegalEntityType'] = $params['additionalfields']['Legal Type']; $request_params['ASIAIdentForm'] = $params['additionalfields']['Identity Form']; $request_params['ASIAIdentNumber'] = $params['additionalfields']['Identity Number']; } elseif ('sg' == strtolower($tld)) { $request_params['SGRCBID'] = $params['additionalfields']['RCB Singapore ID']; } elseif ('com.sg' == strtolower($tld)) { $request_params['COMSGRCBID'] = $params['additionalfields']['RCB Singapore ID']; } elseif ('com.au' == strtolower($tld) || 'net.au' == strtolower($tld) || 'org.au' == strtolower($tld)) { $key_prefix = strtoupper(str_replace('.', '', $tld)); $request_params[$key_prefix . 'RegistrantId'] = $params['additionalfields']['Registrant ID']; if ('Business Registration Number' == $params['additionalfields']['Registrant ID Type']) { $params['additionalfields']['Registrant ID Type'] = 'RBN'; } $request_params[$key_prefix . 'RegistrantIdType'] = $params['additionalfields']['Registrant ID Type']; if (!empty($params['additionalfields']['jobTitle'])) { $jobTitle = $params['additionalfields']['jobTitle']; } else { if (!empty($params['additionalfields']['Job Title'])) { $jobTitle = $params['additionalfields']['Job Title']; } else { $jobTitle = 'Director'; } } $request_params['RegistrantJobTitle'] = $jobTitle; $request_params['AdminJobTitle'] = $jobTitle; $request_params['TechJobTitle'] = $jobTitle; $request_params['AuxBillingJobTitle'] = $jobTitle; } elseif ('es' == strtolower($tld) || 'com.es' == strtolower($tld) || 'nom.es' == strtolower($tld) || 'org.es' == strtolower($tld)) { $key_prefix = strtoupper(str_replace('.', '', $tld)); $request_params[$key_prefix . 'RegistrantId'] = $params['additionalfields']['ID Form Number']; } elseif ('fr' == strtolower($tld)) { if (!empty($params['additionalfields']['Legal Type'])) { $request_params['FRLegalType'] = $params['additionalfields']['Legal Type']; } if (!empty($params['additionalfields']['Date of Birth'])) { $request_params['FRRegistrantBirthDate'] = $params['additionalfields']['Date of Birth']; } if (!empty($params['additionalfields']['Place of Birth'])) { $request_params['FRRegistrantBirthPlace'] = $params['additionalfields']['Place of Birth']; } if (!empty($params['additionalfields']['Legal Id'])) { $request_params['FRRegistrantLegalId'] = $params['additionalfields']['Legal Id']; } if (!empty($params['additionalfields']['Trade Number'])) { $request_params['FRRegistrantTradeNumber'] = $params['additionalfields']['Trade Number']; } if (!empty($params['additionalfields']['Duns Number'])) { $request_params['FRRegistrantDunsNumber'] = $params['additionalfields']['Duns Number']; } if (!empty($params['additionalfields']['Local Id'])) { $request_params['FRRegistrantLocalId'] = $params['additionalfields']['Local Id']; } if (!empty($params['additionalfields']['Journal Date of Declaration'])) { $request_params['FRRegistrantJoDateDec'] = $params['additionalfields']['Journal Date of Declaration']; } if (!empty($params['additionalfields']['Journal Date of Publication'])) { $request_params['FRRegistrantJoDatePub'] = $params['additionalfields']['Journal Date of Publication']; } if (!empty($params['additionalfields']['Journal Number'])) { $request_params['FRRegistrantJoNumber'] = $params['additionalfields']['Journal Number']; } if (!empty($params['additionalfields']['Journal Page'])) { $request_params['FRRegistrantJoPage'] = $params['additionalfields']['Journal Page']; } } $api = new NamecheapRegistrarApi($username, $password, $testmode); $response = $api->request("namecheap.domains.create", $request_params); $result = $api->parseResponse($response); if (isset($result['DomainCreateResult']['warnings']['Warning'])) { $message = "Registering Domain warning<br />" . "-----------------------------------------------------------------------------------------<br />" . $result['DomainCreateResult']['warnings']['Warning']['@value'] . "<br />" . "-----------------------------------------------------------------------------------------<br />" . "Domain: " . $tld . "." . $sld . "<br />" . "Nameservers: " . implode(',', $nameservers); sendAdminNotification("system", "WHMCS Namecheap Domain Registrar Module", $message); } } catch (Exception $e) { $values['error'] = "An error occurred: " . $e->getMessage(); logModuleCall('namecheap', 'RegisterDomain', array('command' => "namecheap.domains.create") + $request_params, $response, $result, array($password)); } return $values; }