PHP с открытым исходным кодом
Registrar API
Единая PHP-библиотека для управления доменами в NameSilo, GoDaddy, Namecheap и Dynadot — плюс адаптер Cloudflare для зон, DNS и кэша. Проверка доступности, регистрация, продление, перенос, DNS-записи и серверы имён — всё через единый согласованный интерфейс.
composer require josuamarcelc/registrar-api
Адаптеры
Поддерживаемые регистраторы
Выбирайте адаптер по названию бренда. Все адаптеры имеют одинаковые сигнатуры методов, поэтому вы можете сменить регистратора, не переписывая код.
Живое демо
Проверка доступности домена
Выполняет реальный вызов checkAvailability() через адаптер NameSilo на стороне сервера. Введите до 10 доменов через запятую, пробел или перевод строки. Ограничение: 10 проверок за 5 минут.
Быстрый старт
Три строки до рабочего вызова
<?php
require __DIR__ . '/vendor/autoload.php';
use RegistrarAPI\RegistrarAPI;
$api = RegistrarAPI::make('namesilo', [
'api_key' => 'YOUR_NAMESILO_API_KEY'
]);
$result = $api->checkAvailability(['example.com', 'mybrand.io']);
print_r($result);
Учётные данные
Настройка для каждого адаптера
Каждый адаптер принимает массив настроек. Ниже — минимум, который обычно требуется.
NameSilo
RegistrarAPI::make('namesilo', [
'api_key' => 'YOUR_KEY',
]); GoDaddy
RegistrarAPI::make('godaddy', [
'api_key' => 'KEY',
'api_secret' => 'SECRET',
// optional: 'base' => 'https://api.godaddy.com/v1'
]); Namecheap
RegistrarAPI::make('namecheap', [
'api_user' => 'USERNAME',
'api_key' => 'KEY',
'client_ip' => 'SERVER_PUBLIC_IP',
// optional: 'base' => 'https://api.namecheap.com/xml.response'
]); Dynadot
RegistrarAPI::make('dynadot', [
'api_key' => 'KEY',
]); Методы
Основные операции
Все адаптеры реализуют одинаковые сигнатуры методов. Возвращаемые значения — нормализованные ассоциативные массивы.
// Availability
$api->checkAvailability(['example.com']);
// Lifecycle
$api->registerDomain('example.com', [
'years' => 1,
'privacy' => true,
'auto_renew' => true,
'registrant' => [ /* contact fields */ ],
]);
$api->renewDomain('example.com', 1);
$api->transferDomain('example.com', ['auth_code' => 'EPP']);
$api->getDomain('example.com');
// DNS records
$api->getDNS('example.com');
$api->setDNS('example.com', [
['type'=>'A', 'host'=>'@', 'value'=>'203.0.113.10', 'ttl'=>600],
['type'=>'CNAME','host'=>'www', 'value'=>'@', 'ttl'=>600],
]);
$api->addDNS('example.com', ['type'=>'TXT','host'=>'@','value'=>'v=spf1 -all','ttl'=>300]);
$api->delDNS('example.com', ['type'=>'TXT','host'=>'@']);
// Nameservers
$api->setNameServers('example.com', ['ns1.host.com','ns2.host.com']);
// Escape hatch — call any raw endpoint the adapter doesn't wrap
$api->raw('domains/suggestions?query=mybrand&limit=5');
Форма ответа
Что вы получаете
bool — быстрая проверка успехаcheckAvailability(){type,host,value,ttl,prio?}, возвращаемый getDNS()Бонус
Адаптер Cloudflare
Та же библиотека, та же форма, но для зон, DNS-записей, очистки кэша и бесплатных переключателей (Always HTTPS, Auto HTTPS Rewrites, Brotli, Minify, Rocket Loader, Dev Mode).
$cf = RegistrarAPI::make('cloudflare', ['api_token' => 'CF_TOKEN']);
$cf->createZone('example.com');
$cf->setDNS('example.com', [
['type'=>'A','host'=>'@','value'=>'198.51.100.10','ttl'=>300,'proxied'=>true],
]);
$cf->purgeEverything('example.com'); Внести вклад
Добавьте нового регистратора в одном файле
Создайте класс в src/adapters/, наследующий BaseAdapter, и реализуйте абстрактные методы. Composer подхватит его автоматически.
namespace RegistrarAPI\Adapters;
use RegistrarAPI\Core\BaseAdapter;
class MyRegistrar extends BaseAdapter {
protected string $brand = 'myregistrar';
public function checkAvailability(array $domains): array { /* ... */ }
public function registerDomain(string $domain, array $opts): array { /* ... */ }
public function renewDomain(string $domain, int $years=1, array $opts=[]): array { /* ... */ }
public function transferDomain(string $domain, array $opts): array { /* ... */ }
public function getDomain(string $domain): array { /* ... */ }
public function getDNS(string $domain): array { /* ... */ }
public function setDNS(string $domain, array $records): array { /* ... */ }
public function addDNS(string $domain, array $record): array { /* ... */ }
public function delDNS(string $domain, array $selector): array { /* ... */ }
public function setNameServers(string $domain, array $nameservers): array { /* ... */ }
public function raw(string $op, array $params=[]): array { /* ... */ }
}