PHP code example of spits-online / laravel-openprovider-api

1. Go to this page and download the library: Download spits-online/laravel-openprovider-api library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

spits-online / laravel-openprovider-api example snippets


use SpitsOnline\Openprovider\Data\Record;
use SpitsOnline\Openprovider\Enums\RecordType;
use SpitsOnline\Openprovider\Facades\Openprovider;

Openprovider::zone('example.com')->records()->add(Record::create(RecordType::A, '1.2.3.4', name: 'www'));

Openprovider::zone('example.com')->records()->get(); // every record, as ZoneRecord objects

Openprovider::domains()->find('example.com')->renew();

// config/openprovider.php
return [
    'routes' => [
        'enabled' => true,
    ],
];

use SpitsOnline\Openprovider\Openprovider;

$reseller = Openprovider::fromConfig([
    'username' => 'reseller',
    'password' => 'secret',
    'ip' => '203.0.113.10',
]);

$reseller->zone('example.com')->records()->get();

use SpitsOnline\Openprovider\Data\Record;
use SpitsOnline\Openprovider\Enums\RecordType;
use SpitsOnline\Openprovider\Facades\Openprovider;

Openprovider::zone('example.com')->records()->add(
    Record::create(RecordType::A, '1.2.3.4', name: 'www'),
    Record::create(RecordType::MX, 'mail.example.com'),
);

use SpitsOnline\Openprovider\Data\Record;
use SpitsOnline\Openprovider\Enums\RecordType;
use SpitsOnline\Openprovider\Enums\Ttl;

Record::create(RecordType::A, '1.2.3.4');                    // the domain itself
Record::create(RecordType::A, '1.2.3.4', name: 'www');       // www.example.com
Record::create(RecordType::MX, 'mail.example.com', ttl: Ttl::HOUR, priority: 5);
Record::create(RecordType::TXT, 'v=spf1 

use SpitsOnline\Openprovider\Data\ZoneRecord;
use SpitsOnline\Openprovider\Enums\RecordType;

$records = Openprovider::zone('example.com')->records()->get();
$records = Openprovider::zone('example.com')->records()->ofType(RecordType::TXT);

$record = $records->first();
$record->name;      // "www.example.com": Openprovider returns the full name
$record->type;      // RecordType::A
$record->value;     // "1.2.3.4", or "\"v=spf1 -all\"" for a TXT record: Openprovider quotes TXT values
$record->ttl;       // 900
$record->priority;  // 10 for an MX record, otherwise null
$record->zone;      // "example.com"
$record->raw;       // the full answer from Openprovider

$record->update(Record::create(RecordType::A, '5.6.7.8', name: 'www'));
$record->delete();

$zone = Openprovider::zone('example.com');

$zone->records()->delete($first, $second);
$zone->records()->delete(...$zone->records()->ofType(RecordType::TXT));

$zone->records()->update(Record::create(RecordType::A, '1.2.3.4', name: 'www'), Record::create(RecordType::A, '5.6.7.8', name: 'www'));
$zone->records()->delete(Record::create(RecordType::TXT, 'v=spf1 -all'));

$record->is($other);   // same name, type, value, TTL and priority, ignoring TXT quotes
$record->toRecord();   // a ZoneRecord as a Record you can change and add elsewhere
$record->toArray();    // ['name' => 'www.example.com', 'type' => 'A', 'value' => '1.2.3.4', 'ttl' => 900]
Record::create(RecordType::TXT, 'x')->stored()->value;  // "\"x\"", the value as Openprovider stores it

$zone = Openprovider::zone('example.com')->get();

$zone->soa->value;  // "ns1.example.com dns.openprovider.eu 2026100803 10800 3600 604800 3600"

use SpitsOnline\Openprovider\Enums\Provider;

Openprovider::zone('example.com')->provider(Provider::SECTIGO)->records()->add($record);

use SpitsOnline\Openprovider\Facades\Openprovider;

$zone = Openprovider::zone('example.com')->get();

$zone->id;          // 9146574
$zone->name;        // "example.com"
$zone->type;        // ZoneType::MASTER or ZoneType::SLAVE
$zone->isActive;    // true
$zone->provider;    // Provider::SECTIGO for premium DNS, otherwise null
$zone->records;     // list<ZoneRecord>
$zone->soa;         // the read-only SoaRecord
$zone->createdAt;   // CarbonImmutable or null, see "Dates and timezones"
$zone->modifiedAt;  // CarbonImmutable or null
$zone->raw;         // the full answer from Openprovider

$zone->toArray();   // the zone in Openprovider's own keys, as the `show` route returns it

Openprovider::zones()->get();
Openprovider::zones()->get(namePattern: 'example*', provider: Provider::SECTIGO)->take(10);

Openprovider::zones()->create('example.com', records: [Record::create(RecordType::A, '1.2.3.4')]);
Openprovider::zones()->create('example.com', dnssec: true, template: 'my-template', provider: Provider::SECTIGO);

// A slave zone copies its records from your own master server
Openprovider::zones()->createSlave('example.com', masterIp: '192.0.2.1');

Openprovider::zone('example.com')->delete();

use SpitsOnline\Openprovider\Facades\Openprovider;

Openprovider::domain(1222095)->renew();

$domain = Openprovider::domains()->find('example.com'); // or null

$domain->renew();
$domain->lock();

$domain = Openprovider::domain(1222095)->get();

$domain->id;                     // 1222095
(string) $domain->name;           // "example.com"
$domain->name->name;              // "example"
$domain->name->extension;         // "com"
$domain->status;                  // "ACT" (active) or "REQ" (requested)
$domain->autorenew;               // Autorenew::ON, Autorenew::OFF or Autorenew::DEFAULT
$domain->nameServers;             // list<Nameserver>, each with a name, ip and ip6
$domain->nsGroup;                 // "dns-openprovider", the nameserver group it uses, or null
$domain->isLocked;                // true
$domain->isLockable;              // whether the registry lets it be locked against transfers
$domain->isPrivateWhoisEnabled;   // false
$domain->isDnssecEnabled;         // true
$domain->isSectigoDnsEnabled;     // whether it has an active premium DNS zone at Sectigo
$domain->isPremium;               // whether it has a premium price
$domain->owner?->fullName;        // "Jane Doe", also owner->companyName
$domain->ownerHandle;             // "CV904717-NL", also adminHandle, techHandle and billingHandle
$domain->orderDate;               // CarbonImmutable or null, see "Dates and timezones"
$domain->activeDate;              // CarbonImmutable or null
$domain->renewalDate;             // CarbonImmutable or null: renew before this date
$domain->expirationDate;          // CarbonImmutable or null
$domain->comments;                // your own notes on the domain, or null
$domain->raw;                     // the full answer from Openprovider

Openprovider::domains()->get(pattern: 'example*', status: 'ACT')->each(/* ... */);

use SpitsOnline\Openprovider\Data\DomainName;

$name = DomainName::parse('example.co.uk');
$name->name;       // "example"
$name->extension;  // "co.uk"

$check = Openprovider::domains()->check(['example.com', 'example.nl'])[0];

$check->domain;         // "example.com"
$check->status;         // "free", "reserved" or "in use"
$check->isAvailable();  // true when the status is "free"
$check->isPremium;      // whether the registry charges a premium price
$check->raw;            // 

use SpitsOnline\Openprovider\Data\Nameserver;
use SpitsOnline\Openprovider\Enums\Autorenew;

$domain = Openprovider::domains()->register(
    'example.com',
    owner: 'CV904717-NL',
    admin: 'CV904717-NL',
    tech: 'CV904717-NL',
    billing: 'CV904717-NL',
    period: 1,
    nameServers: ['ns1.op.eu', Nameserver::create('ns2.example.com', ip: '192.0.2.2')],
    autorenew: Autorenew::ON,
);

$domain = Openprovider::domains()->transfer('example.com', authCode: 'abc123', owner: 'CV904717-NL');

Openprovider::domain($id)->update(nsGroup: 'my-nameservers', autorenew: Autorenew::ON);

$domain->lock();     // can't be transferred away
$domain->unlock();
$domain->renew(period: 2);
$domain->restore();
$domain->delete();

$code = $domain->authCode();
$code = $domain->resetAuthCode();

// config/openprovider.php
return [
    'routes' => [
        'enabled' => true,
    ],
];

// config/openprovider.php
return [
    'routes' => [
        'enabled' => true,
        'prefix' => 'admin',
        'middleware' => ['api', 'auth:sanctum'],
    ],
];

// config/openprovider.php
return [
    'exports' => [
        'enabled' => true,
    ],
];

use Maatwebsite\Excel\Facades\Excel;
use SpitsOnline\Openprovider\Exports\ZoneExport;

$zone = Openprovider::zone('example.com')->get();

return Excel::download(ZoneExport::fromZone($zone), 'example.com.xlsx');

use SpitsOnline\Openprovider\Exceptions\RequestFailed;

try {
    Openprovider::domain($id)->renew();
} catch (RequestFailed $e) {
    report($e);

    return back()->with('error', $e->body['desc'] ?? 'Openprovider failed');
}

use SpitsOnline\Openprovider\Data\Record;
use SpitsOnline\Openprovider\Enums\RecordType;
use SpitsOnline\Openprovider\Facades\Openprovider;

$fake = Openprovider::fake()
    ->withZone('example.com', Record::create(RecordType::A, '1.2.3.4'), Record::create(RecordType::MX, 'mail.example.com'))
    ->withDomain('example.com');

// ... run the code under test ...

Openprovider::assertRecordAdded(
    'example.com',
    fn (Record $record) => $record->value === '5.6.7.8',
);
Openprovider::assertRecordUpdated('example.com');
Openprovider::assertRecordDeleted('example.com', fn (Record $record) => $record->type === RecordType::MX);
Openprovider::assertZoneCreated('example.nl');
Openprovider::assertZoneDeleted('example.nl');
Openprovider::assertDomainRegistered('example.nl');
Openprovider::assertDomainTransferred('example.org');
Openprovider::assertDomainUpdated(1, fn (array $changes) => $changes === ['is_locked' => true]);
Openprovider::assertDomainRenewed(1);
Openprovider::assertDomainRestored(1);
Openprovider::assertDomainDeleted(1);
Openprovider::assertNothingChanged();