Search by

rnids / rsreg-epp-client

oblak

Independent third-party PHP client for RNIDS/RSreg EPP; unaffiliated with RNIDS

v2.0.1 2026-09-12 15:16 UTC

This package is auto-updated.

Last update: 2026-09-12 17:20:39 UTC


README

RNIDS / RSreg EPP Client

Independent PHP Client for RNIDS / RSreg EPP

Packagist Version Packagist PHP Version Static Badge codecov GitHub Actions Workflow Status

This is an independent third-party PHP library for RNIDS/RSreg EPP integration. It is not affiliated with, endorsed by, or supported by RNIDS. The RNIDS/RSreg names identify the integration target; the package name and RNIDS\ namespace are retained for compatibility.

The library provides fluent APIs for PHP 8.1+ applications, with deterministic XML handling, typed internal DTOs, native stream transport, and predictable command execution.

The latest stable 2.x release receives bug and security fixes through September 30, 2028. It is an LTS candidate pending the remaining registry acceptance checks. See support and compatibility, upgrading from 1.x, and the security policy.

Key Features

  1. RNIDS-first API design with fluent entry points for session, domain, contact, and host operations.
  2. Deterministic EPP request lifecycle over native stream transport and frame codec boundaries.
  3. Validated request arrays, typed internal DTOs, and documented response shapes.
  4. Explicit protocol/transport exception strategy under RNIDS\Exception\*.
  5. Separate XML composition/parsing modules for easier testing and maintenance.
  6. Coverage-aware quality gate with static analysis and coding standards checks.

Installation

Install via Composer:

composer require rnids/rsreg-epp-client

Internationalized domain and host names are converted to ASCII Punycode when building EPP commands. Unicode input requires the PHP intl extension; callers without it can supply ASCII Punycode names. Registry responses retain the ASCII names sent by the registry. Other Unicode fields, such as contact names and remarks, are unchanged.

Usage

<?php

declare(strict_types=1);

use RNIDS\Client;

$client = Client::ready([
    'host' => 'epp.example.rs',
    'port' => 700,
    'username' => 'client-id',
    'password' => 'secret',
    'language' => 'en',
    'tls' => [
        'clientCertificatePath' => '/secure/path/client.pem',
        'clientCertificatePassword' => 'certificate-passphrase',
        'caFilePath' => '/secure/path/rnids-ca.pem',
    ],
]);

$domainInfo = $client->domain()->info('example.rs');
$meta = $client->responseMeta();

$client->close();

The default greetingMode is unsolicited, which reads the server greeting before login. The RNIDS development endpoint was observed to wait for an explicit hello; set 'greetingMode' => 'hello' when connecting to epp-test.rnids.rs. Both modes wait for the actual login result before making the client available. The development server was also observed to omit clTRID on some successful responses: set 'requireClientTransactionId' => false there. This accepts omitted IDs only; present IDs must still match the command. The default remains true. Confirm the configuration required by your endpoint; these compatibility options do not change TLS verification.

Common fluent entry points:

  • Session: $client->session()->hello(), login(), logout(), poll()
  • Domain: $client->domain()->check(), info(), register(), renew(), update(), delete(), and transferRequest() / transferQuery() / transferApprove() / transferCancel() / transferReject()
  • Contact: $client->contact()->check(), create(), info(), update(), delete()
  • Host: $client->host()->check(), info(), create(), update(), delete()

Runtime contact policy:

  • Contact creation retains the OBL-... generation policy; update, info, and delete preserve the supplied registry identifier.
  • Contact extension.identDescription preserves caller-provided values.

Native connections require TLS by default. allowPlaintext => true explicitly enables unencrypted transport for a local test peer. Tests and custom adapters can inject a Transport through new Client($config, $transport) or Client::ready($config, $transport).

Domain updates support nameservers and glue addresses. DNSSEC uses DS records in dnssec, as shown in the domain API; the legacy RNIDS dnsSec boolean alone does not provision DNSSEC. Existing getCode(), getState(), and transfer() methods remain available as compatibility aliases.

composer test runs the offline quality gate, including a local EPP server. composer test:live is an explicit RNIDS validation run and fails if its prerequisites are missing or any tests are skipped. See Contributing for setup.

Documentation

Live test cleanup

Live cleanup records resource names and states in RNIDS_EPP_RESOURCE_LEDGER, or /tmp/rnids-live-resources-<pid>.json by default. RNIDS may accept a domain deletion with code 1000 while retaining pendingDelete; the suite verifies that state and records the domain and its linked contacts as pending, not removed. Unexpected cleanup failures still fail the run. Process pending records after registry deletion completes. The ledger contains object identifiers and states, never credentials.

Contributing

For local setup, quality gates, commit conventions, and PR guidelines, see CONTRIBUTING.md.

License

Apache-2.0. See LICENSE.