PHP sumber terbuka

Registrar API

Satu pustaka PHP untuk mengelola domain di NameSilo, GoDaddy, Namecheap, dan Dynadot — plus adaptor Cloudflare untuk zona, DNS, dan cache. Cek ketersediaan, registrasi, perpanjangan, transfer, catatan DNS, dan nameserver, semuanya lewat satu antarmuka yang konsisten.

composer require josuamarcelc/registrar-api

Adaptor

Registrar yang didukung

Pilih adaptor berdasarkan nama brand. Semua adaptor memakai tanda tangan metode yang sama, jadi Anda bisa berganti registrar tanpa menulis ulang kode.

NameSilo'namesilo'
GoDaddy'godaddy'
Namecheap'namecheap'
Dynadot'dynadot'
CloudflareDNS / zones

Demo Langsung

Cek ketersediaan domain

Menjalankan panggilan checkAvailability() sungguhan lewat adaptor NameSilo di sisi server. Masukkan hingga 10 domain dipisah dengan koma, spasi, atau baris baru. Dibatasi 10 pengecekan per 5 menit.

Mulai cepat

Tiga baris untuk panggilan yang bekerja

<?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);

Kredensial

Konfigurasi per adaptor

Setiap adaptor menerima sebuah array konfigurasi. Di bawah ini kebutuhan minimum yang biasanya diperlukan.

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',
]);

Metode

Operasi umum

Setiap adaptor menerapkan tanda tangan metode yang sama. Nilai kembalian berupa array asosiatif yang dinormalisasi.

// 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');

Bentuk respons

Apa yang Anda dapatkan

okbool — pengecekan sukses cepat
rawmuatan asli dari registrar yang sudah diparse (JSON atau XML-sebagai-array)
httpkode status HTTP jika tersedia
errstring galat tingkat transport (hanya saat panggilan gagal)
available / unavailable / invalidbucket yang diisi oleh checkAvailability()
recordsarray berisi {type,host,value,ttl,prio?} yang dikembalikan oleh getDNS()

Bonus

Adaptor Cloudflare

Pustaka yang sama, bentuk yang sama, tetapi untuk zona, catatan DNS, purge cache, dan sakelar gratis (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');

Berkontribusi

Tambahkan registrar baru dalam satu file

Buat sebuah kelas di src/adapters/ yang meng-extend BaseAdapter lalu implementasikan metode abstraknya. Composer akan memuatnya secara otomatis.

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 { /* ... */ }
}