예제 #1
0
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;
}