function domainbox_RegisterDomain($params) { $tld = $params['tld']; $authParameters = getAuthParameters($params); $apiEndpoint = $params["TestMode"] ? "https://sandbox.domainbox.net/?WSDL" : "https://live.domainbox.net/?WSDL"; $registerDomainParameters = new RegisterDomainParameters(); $registerDomainParameters->DomainName = $params["sld"] . '.' . $params["tld"]; $registerDomainParameters->Period = $params["regperiod"]; $registerDomainParameters->ApplyLock = !$params['tld'] == '.co.uk'; $registerDomainParameters->ApplyPrivacy = false; $registerDomainParameters->AutoRenew = false; $registerDomainParameters->LaunchPhase = "GA"; $nameServerParameters = new Nameservers(); $nameServerParameters->NS1 = $params['ns1']; $nameServerParameters->NS2 = $params['ns2']; $nameServerParameters->NS3 = $params['ns3']; $nameServerParameters->NS4 = $params['ns4']; $nameServerParameters->NS5 = $params['ns5']; $needsZone = false; foreach ($nameServerParameters as $key => $value) { $needsZone = stripos($value, 'dnsfarm.org') > 0; if ($needsZone) { break; } } $registrant = new Contact(); $registrant->City = $params['city']; $registrant->CountryCode = $params['country']; $registrant->Email = $params['email']; $registrant->Name = $params['firstname'] . ' ' . $params['lastname']; $registrant->Organization = $params['companyname']; $registrant->Street1 = $params['address1']; $registrant->Street2 = $params['address2']; $registrant->State = $params['state']; $registrant->Postcode = $params['postcode']; $localTelephone = str_replace(' ', '', $params['adminphonenumber']); if (substr($localTelephone, 0, 1) == "0") { $localTelephone = substr($localTelephone, 1); } $registrant->Telephone = $localTelephone; // Work out what additional parameters we need switch ($tld) { case 'co.uk': case 'org.uk': case 'me.uk': case 'uk': $registrant->AdditionalData = new AdditionalDataParameter(); $ukData = new UKAdditionalDataParameter(); $ukData->CompanyNumber = $params['additionalfields']['Company ID Number']; $ukData->mapTypeToDomainbox($params['additionalfields']['Legal Type'], $registrant->CountryCode); $registrant->Name = $params['additionalfields']['Registrant Name']; // This will override the contact details $ukData->TradingName = ""; //TODO: Allow customer to enter on WHMCS. $registerDomainParameters->ApplyPrivacy = $params['additionalfields']['WHOIS Opt-out']; $registrant->AdditionalData->UKAdditionalData = $ukData; break; case 'pro': $proData = new ProProfessionDataParameter(); $proData->Profession = $params['additionalfields']['Profession']; $registerDomainParameters->Extension = new ExtensionParameter(); $registerDomainParameters->Extension->ProProfessionData = $proData; break; case 'us': $usData = new USAdditionalDataParameter(); $usData->Category = $params['additionalfields']['Nexus Category']; $usData->mapTypeToDomainbox($params['additionalfields']['Application Purpose']); $registerDomainParameters->ApplyPrivacy = false; $registrant->AdditionalData->USAdditionalData = $usData; break; case 'es': $esData = new ESAdditionalDataParameter(); $esData->ContactType = ''; //TODO: Needs drop down on WHMCS (could make best guess in code..) $esData->IdentificationType = $params['additionalfields']['ID Form Type']; $esData->IdentificationNumber = $params['additionalfields']['ID Form Number']; $registrant->AdditionalData->ESAdditionalData = $esData; break; case 'it': $itData = new ITAdditionalDataParameter(); $itData->EntityType = $params['additionalfields']['Legal Type']; $itData->Nationality = $registrant->CountryCode; $itData->RegCode = $params['additionalfields']['Tax ID']; $registrant->AdditionalData->ITAdditionalData = $itData; break; case 'fr': case 'yt': case 'tf': case 'pm': case 're': case 'wf': //TODO: Support Afnic domains. $afnicData = new AfnicAdditionalDataParameter(); $afnicData->BirthCc = ''; $afnicData->BirthCity = ''; $afnicData->BirthDate = ''; $afnicData->BirthPc = ''; $registrant->AdditionalData->AfnicAdditionalData = $afnicData; break; case 'nl': //TODO: Support SIDN domains. $nlData = new NLAdditionalDataParameter(); $nlData->LegalType = ''; $nlData->LegalTypeRegistrationNumber = ''; $registrant->AdditionalData->NLAdditionalData = $nlData; break; } $admin = new Contact(); $admin->City = $params["admincity"]; $admin->CountryCode = $params['admincountry']; $admin->Email = $params['adminemail']; $admin->Name = $params['adminfirstname'] . ' ' . $params['adminlastname']; $admin->Organization = $params['admincompanyname']; $admin->Street1 = $params['adminaddress1']; $admin->Street2 = $params['adminaddress2']; $admin->State = $params['adminstate']; $admin->Postcode = $params['adminpostcode']; $localTelephone = str_replace(' ', '', $params['adminphonenumber']); if (substr($localTelephone, 0, 1) == "0") { $localTelephone = substr($localTelephone, 1); } $admin->Telephone = $localTelephone; $billing = new Contact(); $billing->City = $params["admincity"]; $billing->CountryCode = $params['admincountry']; $billing->Email = $params['adminemail']; $billing->Name = $params['adminfirstname'] . ' ' . $params['adminlastname']; $billing->Street1 = $params['adminaddress1']; $billing->Street2 = $params['adminaddress2']; $billing->State = $params['adminstate']; $billing->Postcode = $params['adminpostcode']; $localTelephone = str_replace(' ', '', $params['adminphonenumber']); if (substr($localTelephone, 0, 1) == "0") { $localTelephone = substr($localTelephone, 1); } $billing->Telephone = $localTelephone; $tech = new Contact(); $tech->City = $params["admincity"]; $tech->CountryCode = $params['admincountry']; $tech->Email = $params['adminemail']; $tech->Name = $params['adminfirstname'] . ' ' . $params['adminlastname']; $tech->Street1 = $params['adminaddress1']; $tech->Street2 = $params['adminaddress2']; $tech->State = $params['adminstate']; $tech->Postcode = $params['adminpostcode']; $localTelephone = str_replace(' ', '', $params['adminphonenumber']); if (substr($localTelephone, 0, 1) == "0") { $localTelephone = substr($localTelephone, 1); } $tech->Telephone = $localTelephone; $contacts = new Contacts(); $contacts->Registrant = $registrant; $contacts->Admin = $admin; $contacts->Billing = $billing; $contacts->Tech = $tech; $registerDomainParameters->Nameservers = $nameServerParameters; $registerDomainParameters->Contacts = $contacts; try { $parameters = array('AuthenticationParameters' => $authParameters, 'CommandParameters' => $registerDomainParameters); $client = new SoapClient($apiEndpoint, array('soap_version' => SOAP_1_2)); $result = $client->RegisterDomain($parameters); $result = $result->RegisterDomainResult; if ($result->ResultCode == 100) { if ($needsZone) { $createDnsZoneParameters = new CreateDnsZoneParameters(); $createDnsZoneParameters->Zone = $registerDomainParameters->DomainName; $parameters = array('AuthenticationParameters' => $authParameters, 'CommandParameters' => $createDnsZoneParameters); $client = new SoapClient($apiEndpoint, array('soap_version' => SOAP_1_2)); $client->CreateDnsZone($parameters); } $table = "mod_domainbox"; $values = array("whmcsDomainID" => $params['domainid'], "domainboxDomainID" => $result->DomainId); insert_query($table, $values); } else { $error = $result->ResultMsg; } } catch (Exception $e) { $error = "There was an error communicating with Domainbox"; } # If error, return the error message in the value below $values["error"] = $error; return $values; }