/** * This method send create domain request. * In order to pending domain creation, response must have status REGISTRY_RESPONSE_STATUS::PENDING * * @param Domain $domain * @param int $period Domain registration period * @param array $extra Extra data * @return CreateDomainResponse */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $DomainInfoResp = $this->GetDomainInfo($domain); if ($DomainInfoResp->Data['DOMAIN STATUS'] != 'FIXED') { return new CreateDomainResponse(REGISTRY_RESPONSE_STATUS::FAILED, 'Domain is not available for registration'); } $params = array('DOMAIN' => $domain->Name, 'TLD' => $this->Extension, 'TERM YEARS' => $period, 'PRICE' => $DomainInfoResp->Data['PRICE']); // Nameservers $nslist = $domain->GetNameserverList(); foreach ($nslist as $i => $ns) { $params['DNS SERVER NAME ' . ($i + 1)] = $ns->HostName; } // Contacts $contacttype_srs_map = $this->ContacttypeSRSMap; foreach ($domain->GetContactList() as $contacttype => $contact) { $params[$contacttype_srs_map[$contacttype]] = $contact->CLID; } if ($extra && $this->Manifest->GetDomainConfig()->registration->extra_fields->field) { $additional_data = array(); foreach ($extra as $k => $v) { $additional_data[] = sprintf('%s:%s', $k, $v); } $params['ADDITIONAL DATA'] = join(' ', $additional_data); } $Resp = $this->Request('REGISTER DOMAIN', $params); $status = $Resp->Succeed && $Resp->Data['REQUESTID'] ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED; $Ret = new CreateDomainResponse($status, $Resp->ErrMsg); if ($Ret->Succeed()) { $Ret->CreateDate = time(); $Ret->ExpireDate = (int) $Resp->Data['EXPIRATION DATE']; $Ret->AuthCode = ''; $Ret->Protocol = $Resp->Data['REQUESTID']; } return $Ret; }