Client et connexion
Sockets TLS bas niveau, trames EPP, connexion, déconnexion, délais d’attente et configuration de connexion.
+237 661562859
Plateforme développeur Camoo
Construisez votre automatisation de domaines sur une base PHP propre et indépendante du framework, conçue pour une connexion directe au registre, des services réutilisables et des intégrations commerciales sécurisées.
Connexion directe au registre · API indépendante du framework · Auto-hébergé
$client = new EppClient($config);
$client->login();
$client->domainCheck('example.cm');
Connexion directe au registre
Une base EPP unique
Masquez les détails du protocole registre derrière une API PHP testée et réutilisable au lieu de reconstruire le transport EPP et la gestion XML dans chaque application.
Sockets TLS bas niveau, trames EPP, connexion, déconnexion, délais d’attente et configuration de connexion.
Flux de vérification, création, mise à jour, renouvellement, transfert et consultation pour les intégrations registre.
Composants réutilisables pour les contacts, serveurs de noms, files d’attente et SecDNS des services EPP conformes.
Documentation développeur
Le package est un client PHP indépendant du framework. Il se connecte directement à un registre EPP via TCP/TLS ; ce n’est pas une API REST et il ne nécessite pas de passerelle HTTP.
Les clients sous licence reçoivent de Camoo une archive ZIP versionnée et une licence signée séparément. L’archive commerciale ne s’installe pas depuis Packagist public.
Extrayez l’archive, enregistrez son chemin local auprès de Composer, puis exigez la version correspondante.
RELEASE_VERSION="1.0.2"
unzip "camoo-epp-generic-${RELEASE_VERSION}.zip" -d packages
composer config repositories.camoo-epp-generic path "packages/camoo-epp-generic-${RELEASE_VERSION}"
composer require "camoo/epp-generic:${RELEASE_VERSION}" --no-interaction
Conservez les identifiants du registrar et les options d’exécution dans des variables d’environnement ou votre gestionnaire de secrets. Les paramètres de licence commerciale sont fournis séparément avec le package sous licence.
Pour les versions commerciales, le nom d’hôte et le port du registre sont intégrés lors de la génération. Votre application fournit les identifiants du registrar et les options d’exécution.
use Camoo\Epp\EppManager;
$client = EppManager::createClient([
'clid' => getenv('EPP_CLIENT_ID'),
'password' => getenv('EPP_CLIENT_PASSWORD'),
'prefix' => 'REG',
'tls' => true,
'timeout' => 30,
]);
Obligatoire signifie que le client ne peut pas se connecter sans cette valeur. Les types sont des types PHP ; les tableaux utilisent la structure indiquée dans le tableau.
| Paramètre | Type | Obligatoire | Par défaut | Signification |
|---|---|---|---|---|
host | string | Selon la version générée | Intégré à la version commerciale | Nom d’hôte ou adresse IP du registre EPP dans les versions source/test ; les versions commerciales associent cette valeur lors de la génération. |
port | int | Selon la version générée | 700 | Port TCP du registre dans les versions source/test ; les versions commerciales associent le port de production lors de la génération. |
clid | string | Oui | — | Identifiant du registrar/client fourni par le registre. |
password | string | Oui | — | Mot de passe EPP. Conservez-le dans une variable d’environnement ou un gestionnaire de secrets. |
prefix | string | Non | REG | Préfixe court du registrar utilisé dans les identifiants de transaction générés. |
tls | bool | Non | true | Active TLS après la connexion TCP. Laissez cette valeur à true pour les registres de production. |
timeout | int | Non | 30 | Délai d’expiration de la connexion et du socket, en secondes. |
ssl | array<string,mixed> | Non | [] | Options TLS telles que verify_peer, cafile, local_cert et local_pk. |
language | string | Non | en | Langue envoyée dans les options de connexion EPP. |
templates_dir | ?string | Non | null | Répertoire contenant les modèles XML du registre pour les variantes spécifiques au registre. |
template_names | array<string,string> | Non | [] | Associe le nom d’une opération au nom de base d’un modèle, par exemple domain_info => cm_domain_info. |
template_values | array<string,array> | Non | [] | Valeurs littérales par défaut des paramètres de substitution pour chaque opération. |
Le client utilise des tableaux PHP classiques. N’envoyez pas de XML ici, sauf si une méthode documente explicitement un champ XML brut.
| Method | Paramètres obligatoires | Paramètres facultatifs et types |
|---|---|---|
domainCheck(string|array $domains) | $domains: one domain string or list<string> | Aucun. |
domainInfo(string $domain, ?string $authInfo = null) | $domain: domain name | $authInfo: ?string, only when the registry requires it |
domainCreate(array $params) | name: string; registrant: contact handle | period: int years, default 1; ns: list<string>; contacts: array<string,string>; authInfo: string, generated when omitted |
domainRenew(string $domain, string $currentExpiryDate, int $periodYears = 1) | $domain: domain name; $currentExpiryDate: YYYY-MM-DD | $periodYears: positive int, default 1 |
domainTransfer(string $domain, string $authInfo, int $periodYears = 1) | $domain: domain name; $authInfo: transfer authorization code | $periodYears: int, default 1 |
domainDelete(string $domain) | $domain: domain name | Aucun. |
domainRestore(string $domain) | $domain: domain name | Aucun. |
domainUpdateAuthCode(string $domain, string $authCode) | $domain: domain name; $authCode: new authorization code | Aucun. |
domainUpdateNameservers(string $domain, array $nameservers, array $removeNameservers = []) | $domain: domain name; $nameservers: list<string> | $removeNameservers: list<string>, default [] |
domainUpdateStatus(string $domain, string $status, bool $enabled = true, string $reason = '') | $domain: domain name; $status: EPP status string | $enabled: bool, default true; $reason: string |
domainUpdateDnssec(string $domain, array $records, string $action = 'add') | $domain: domain name; $records: list<array{keyTag:int,algorithm:int,digestType:int,digest:string}> | $action: 'add' or 'rem' |
$response = $client->domainCreate([
'name' => 'example.cm', // string, required
'registrant' => 'REG-CONT-01', // string, required
'period' => 1, // int, optional; years
'ns' => ['ns1.example.cm', 'ns2.example.cm'], // list<string>, optional
'contacts' => [ // array<string,string>, optional
'admin' => 'REG-CONT-01',
'tech' => 'REG-CONT-01',
],
'authInfo' => 'Use-a-strong-code', // string, optional
]);
Les champs de contact acceptent les noms standard ci-dessous. Les alias Antic indiqués sont également acceptés.
| Method | Obligatoire | Facultatif/par défaut |
|---|---|---|
contactCreate(array $params) | name, email, voice or phone, street or address_1, city, cc or ccode: all string | id: string; authInfo: string; org/company, sp/state, pc/zipcode, fax: string; proxied: bool |
contactUpdate(array $params) | id or handle: string | Friendly fields such as email, phone, city, or raw XML fragments add/rem/chg: string |
contactDelete(string $contactId) | $contactId: contact handle | Aucun. |
hostCreate(string $host, array $ipAddresses = []) | $host: nameserver hostname | $ipAddresses: list<string>, IPv4 or IPv6 glue, default [] |
hostUpdate(string $host, array $addAddresses = [], array $removeAddresses = []) | $host: nameserver hostname | Both address arguments are list<string> and default to [] |
hostDelete(string $host) | $host: nameserver hostname | Aucun. |
$contact = [
'name' => 'Example Person',
'email' => '[email protected]',
'voice' => '+237600000000',
'street' => '1 Registry Street',
'city' => 'Yaounde',
'cc' => 'CM',
'org' => 'Example Ltd', // optional
'sp' => 'Centre', // optional state/province
'pc' => '00000', // optional postal code
];
$response = $client->contactCreate($contact);
Ces structures sont importantes pour implémenter les flux du registre.
list<string>Liste de chaînesExemple : ['ns1.example.cm', 'ns2.example.cm'].array<string,string>Tableau associatifExemple : ['admin' => 'REG-CONT-01'].?stringChaîne nullableUne chaîne ou null. Null signifie « non fourni ».boolVrai ou fauxUtilisez true/false, et non les chaînes "true"/"false".intNombre entierLes périodes et les délais sont des entiers, par exemple 1 ou 30.Toutes les méthodes renvoient EppResponse sauf indication contraire. Utilisez ces signatures comme référence lors de l’intégration du package encodé.
| Method | Arguments | Objectif |
|---|---|---|
contactCheck(string|array $contactIds) | Un handle de contact ou une list<string>. | Vérifier la disponibilité d’un contact. |
contactInfo(string $contactId, ?string $authInfo = null) | $contactId required; $authInfo optional ?string | Lire les détails d’un contact. |
hostCheck(string|array $hosts) | Un nom d’hôte ou une list<string>. | Vérifier la disponibilité d’un serveur de noms. |
hostInfo(string $host) | $host required string | Lire les détails du serveur de noms et des enregistrements glue. |
domainUpdateRegistrant(string $domain, string $registrant) | Le domaine et le handle de contact sont deux chaînes obligatoires. | Modifier le contact titulaire. |
domainSuspend(string $domain, string $reason = '') | $domain required; $reason optional string | Ajoute clientHold. |
domainUnsuspend(string $domain, string $reason = '') | $domain required; $reason optional string | Supprime clientHold. |
domainUpdateTheftProtection(string $domain, bool $enabled) | Le domaine est une chaîne ; enabled doit être un vrai booléen. | Ajoute ou supprime clientTransferProhibited. |
domainUpdateContacts(string $domain, array $old, array $new) | $old/$new: maps with optional registrant/admin/tech/billing string keys | Remplacer les contacts du domaine en conservant la comparaison ancien/nouveau. |
domainChangeSingleHandle(string $domain, string $new, string $old, string $type, string $registrant) | Les cinq arguments sont des chaînes obligatoires ; type vaut généralement admin, tech ou billing. | Remplacer un handle de contact sur un domaine. |
ping() | Aucun argument. | Envoyer une commande hello EPP. |
pollReq() | Aucun argument. | Demander le prochain message de la file du registre. |
pollAck(string $msgId) | $msgId required string | Accuser réception de l’identifiant du message de file renvoyé par le registre. |
rawXml(string $xml) | $xml required string | Point d’extension avancé pour envoyer une commande EPP complète. |
Utilisez une seule session authentifiée pour les opérations liées.
$client->runInSession(function () use ($client): void {
$client->domainCheck('example.cm');
$client->domainInfo('example.cm');
});
Couvrez tout le cycle de vie registrar.
$client->domainCheck($domains);
$client->domainCreate($params);
$client->domainRenew($name, $expiry, 1);
$client->domainTransfer($name, $authCode);
$client->domainRestore($name);
$client->domainDelete($name);
Gérez les contacts, les serveurs de noms, les enregistrements glue et les mises à jour.
$client->contactCreate($contact);
$client->contactUpdate($contact);
$client->contactDelete($contactId);
$client->hostCreate($host, $addresses);
$client->hostUpdate($host, $add, $remove);
Utilisez la même API pour DNSSEC, les blocages, la protection contre les transferts, les codes d’autorisation et les mises à jour de confidentialité.
$client->domainUpdateDnssec($name, $dsRecords);
$client->domainSuspend($name, $reason);
$client->domainUpdateTheftProtection($name, true);
$client->domainUpdateAuthCode($name, $authCode);
Contrat de réponse
Consultez le code et le message du résultat, puis accédez si nécessaire aux identifiants de transaction, au XML brut, aux données filtrées par espace de noms ou aux données normalisées du domaine/contact.
$response = $client->domainInfo('example.cm');
if ($response->isSuccess()) {
$domain = $response->getDomainInfoData();
$statuses = $domain['status'] ?? [];
}
$response->getCode();
$response->getMessage();
$response->getClientTransactionId();
$response->getRawXml();
Pour les déploiements compatibles Antic, pointez templates_dir vers le bundle de modèles du registre et utilisez template_names pour les variantes telles que cm_domain_info. Les particularités du registre restent ainsi configurables tandis que l’API PHP publique reste stable.
Distribution sous licence
Les versions commerciales protègent le cœur de licence et le rattachement au registre avec ionCube. Avant toute connexion au registre, elles vérifient la licence signée et le bail d’utilisation courant. Les clients sous licence reçoivent séparément la documentation de l’API PHP et les instructions de mise à niveau, sans exposer les composants protégés.
Les détails de configuration de la licence sont fournis avec le package sous licence.
Le package commercial est installé sous vendor/camoo/epp-generic. Conservez le fichier epp.license.json signé en dehors de vendor/ et de la racine web publique, de préférence dans /etc/camoo/epp-generic/epp.license.json, puis configurez son chemin absolu avec EPP_LICENSE_FILE.
Conservez le cache du bail de licence de manière persistante et accessible en écriture par l’utilisateur de l’application. Les workers et tâches cron d’une même installation doivent partager le même répertoire de stockage de l’application.
La capacité du bail commercial générique est comptée selon les adresses IP publiques distinctes observées par CAMOO. Les tâches cron partageant le même déploiement et la même IP publique ne consomment pas d’emplacements supplémentaires ; une autre IP publique peut consommer un emplacement disponible. Utilisez EPP_LICENSE_IP uniquement pour une validation hors ligne derrière un NAT ou dans un conteneur.
Plusieurs processus cron partageant le même stockage persistant du package et la même IP publique utilisent la même capacité de bail. Une autre IP publique est comptée séparément selon la capacité IP générique configurée.
Cette page documente le client EPP générique Camoo. Sa licence est distincte de celle d’ANTIC EPP Registrar pour WHMCS, même si le prix et la durée standard sont actuellement identiques.
Interactive API Explorer
Parcourez l’index des opérations sans JavaScript, puis téléchargez le contrat OpenAPI complet avec les schémas de paramètres et de réponses. Même si EPP fonctionne sur TCP/TLS, ce contrat OpenAPI rend l’intégration et les tests prévisibles.
Cette référence API fonctionne sans JavaScript externe.
/domains/check
Check domain availability (domainCheck)
domainCheck
$response = $client->domainCheck(string|array $domains);
Checks if one or multiple domain names are available for registration.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domains |
string | array<string> |
Oui | — | example.cm |
/domains/info
Retrieve domain details (domainInfo)
domainInfo
$response = $client->domainInfo(string $domain, ?string $authInfo = null);
Retrieves detailed information about a registered domain, including status codes, registrant, contacts, nameservers, and expiration dates.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
authInfo |
string |
Non | — | Optional authorization code if required by registry for info queries | Secr3t!Auth |
/domains/create
Register domain (domainCreate)
domainCreate
$response = $client->domainCreate(array $params);
Registers a new domain name with registrant handle, optional nameservers, contacts, and registration period.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
name |
string |
Oui | — | Domain name to register | example.cm |
registrant |
string |
Oui | — | Registrant contact handle | REG-CONT-01 |
period |
integer |
Non | 1 |
Registration period in years | 1 |
ns |
array<string> |
Non | — | Authoritative nameservers | ["ns1.example.cm","ns2.example.cm"] |
contacts |
object |
Non | — | Additional domain contacts (admin, tech, billing) | — |
contacts.admin |
string |
Non | — | REG-CONT-01 |
|
contacts.tech |
string |
Non | — | REG-CONT-01 |
|
contacts.billing |
string |
Non | — | REG-CONT-01 |
|
authInfo |
string |
Non | — | Custom authorization password (generated if omitted) | RandomStr0ngPass! |
/domains/renew
Renew domain (domainRenew)
domainRenew
$response = $client->domainRenew(string $domain, string $currentExpiryDate, int $periodYears = 1);
Renews a domain registration for a specified number of years.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
currentExpiryDate |
string (date) |
Oui | — | Current expiration date formatted as YYYY-MM-DD | 2025-01-15 |
periodYears |
integer |
Non | 1 |
1 |
/domains/transfer
Transfer domain (domainTransfer)
domainTransfer
$response = $client->domainTransfer(string $domain, string $authInfo, int $periodYears = 1);
Requests a domain transfer from another registrar using an authorization code (EPP key).
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
authInfo |
string |
Oui | — | Authorization code (transfer secret) | TransferKey!2026 |
periodYears |
integer |
Non | 1 |
1 |
/domains/delete
Delete domain (domainDelete)
domainDelete
$response = $client->domainDelete(string $domain);
Requests immediate deletion of a domain name.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
/domains/restore
Restore domain (domainRestore)
domainRestore
$response = $client->domainRestore(string $domain);
Requests restoration of a domain in redemption or pending delete period.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
/domains/update-nameservers
Update domain nameservers (domainUpdateNameservers)
domainUpdateNameservers
$response = $client->domainUpdateNameservers(string $domain, array $nameservers, array $removeNameservers = []);
Adds and/or removes authoritative nameservers on a domain.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
nameservers |
array<string> |
Oui | — | Nameservers to add | ["ns1.newhost.cm","ns2.newhost.cm"] |
removeNameservers |
array<string> |
Non | — | Nameservers to remove | ["ns1.oldhost.cm"] |
/domains/update-contacts
Update domain contacts (domainUpdateContacts)
domainUpdateContacts
$response = $client->domainUpdateContacts(string $domain, array $old, array $new);
Replaces domain contact handles (admin, tech, billing) using old vs new maps.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
old |
object |
Oui | — | {"admin":"OLD-ADMIN-01"} |
|
new |
object |
Oui | — | {"admin":"NEW-ADMIN-02"} |
/domains/theft-protection
Toggle transfer lock / theft protection (domainUpdateTheftProtection)
domainUpdateTheftProtection
$response = $client->domainUpdateTheftProtection(string $domain, bool $enabled);
Adds or removes the clientTransferProhibited status on the domain.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
enabled |
boolean |
Oui | — | True to lock (prohibit transfer), false to unlock | true |
/domains/dnssec
Manage DNSSEC SecDNS records (domainUpdateDnssec)
domainUpdateDnssec
$response = $client->domainUpdateDnssec(string $domain, array $records, string $action = 'add');
Adds or removes SecDNS delegation signer (DS) records on a domain.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
domain |
string |
Oui | — | example.cm |
|
records |
array<object> |
Oui | — | — | |
records[].keyTag |
integer |
Oui | — | 12345 |
|
records[].algorithm |
integer |
Oui | — | DNSSEC Algorithm (e.g. 8 for RSA/SHA-256, 13 for ECDSA P-256) | 13 |
records[].digestType |
integer |
Oui | — | Digest type (e.g. 2 for SHA-256) | 2 |
records[].digest |
string |
Oui | — | Hexadecimal digest string | 49FD46E6C4B45C55D4AC49DA1B7728F6B8660EC3BB3A36E154766C4EB352C6F8 |
action |
string |
Non | add |
add |
/contacts/check
Check contact handle availability (contactCheck)
contactCheck
$response = $client->contactCheck(string|array $contactIds);
Checks if one or multiple contact identifiers are available.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
contactIds |
string | array<string> |
Oui | — | REG-CONT-01 |
/contacts/info
Read contact details (contactInfo)
contactInfo
$response = $client->contactInfo(string $contactId, ?string $authInfo = null);
Retrieves full details for a contact handle.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
contactId |
string |
Oui | — | REG-CONT-01 |
|
authInfo |
string |
Non | — | — |
/contacts/create
Create contact (contactCreate)
contactCreate
$response = $client->contactCreate(array $params);
Registers a new contact object with postal address, voice, and email.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
id |
string |
Non | — | Custom contact handle (auto-generated if omitted) | REG-CONT-01 |
name |
string |
Oui | — | Contact full name | Jean Dupont |
org |
string |
Non | — | Organization name (optional) | Camoo SARL |
email |
string (email) |
Oui | — | [email protected] |
|
voice |
string |
Oui | — | Telephone number in ITU format (+CC.NNNNNNNN) | +237.600000000 |
fax |
string |
Non | — | Fax number (optional) | +237.600000001 |
street |
string |
Oui | — | Street address | 1 Registry Street |
city |
string |
Oui | — | Yaounde |
|
sp |
string |
Non | — | State / Province | Centre |
pc |
string |
Non | — | Postal code | 00000 |
cc |
string |
Oui | — | Two-letter ISO country code | CM |
authInfo |
string |
Non | — | Contact authorization code (optional) | AuthPass123! |
/contacts/update
Update contact (contactUpdate)
contactUpdate
$response = $client->contactUpdate(array $params);
Updates attributes of an existing contact handle.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
id |
string |
Oui | — | Contact handle to update | REG-CONT-01 |
email |
string |
Non | — | [email protected] |
|
voice |
string |
Non | — | +237699999999 |
|
city |
string |
Non | — | Douala |
/contacts/delete
Delete contact (contactDelete)
contactDelete
$response = $client->contactDelete(string $contactId);
Deletes an unlinked contact handle.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
contactId |
string |
Oui | — | REG-CONT-01 |
/hosts/check
Check nameserver availability (hostCheck)
hostCheck
$response = $client->hostCheck(string|array $hosts);
Checks if one or multiple nameserver hosts exist.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
hosts |
string | array<string> |
Oui | — | ns1.example.cm |
/hosts/info
Read nameserver details (hostInfo)
hostInfo
$response = $client->hostInfo(string $host);
Retrieves nameserver host status and associated glue IP addresses.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
host |
string |
Oui | — | ns1.example.cm |
/hosts/create
Create nameserver with glue IPs (hostCreate)
hostCreate
$response = $client->hostCreate(string $host, array $ipAddresses = []);
Creates a new nameserver host with optional IPv4 / IPv6 glue records.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
host |
string |
Oui | — | ns1.example.cm |
|
ipAddresses |
array<string> |
Non | — | IPv4 or IPv6 glue addresses | ["195.24.205.10","2001:db8::1"] |
/hosts/delete
Delete nameserver (hostDelete)
hostDelete
$response = $client->hostDelete(string $host);
Deletes an unused nameserver host.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
host |
string |
Oui | — | ns1.example.cm |
/session/ping
Send EPP Hello ping (ping)
ping
$response = $client->ping();
Sends an EPP <hello frame to test connection liveness.
/session/poll-req
Request next poll message (pollReq)
pollReq
$response = $client->pollReq();
Retrieves the next queued notification message from the registry poll queue.
/session/poll-ack
Acknowledge poll message (pollAck)
pollAck
$response = $client->pollAck(string $msgId);
Acknowledges and removes a message from the registry queue by its message ID.
| Paramètre | Type | Obligatoire | Par défaut | Signification | Exemple |
|---|---|---|---|---|---|
msgId |
string |
Oui | — | 12345 |
Conçu pour les équipes produit
Le client générique sépare le protocole, les services, les licences et l’intégration au framework. Il convient ainsi à un module WHMCS aujourd’hui, puis à une extension WordPress ou une intégration SaaS personnalisée demain.
Bibliothèque PHP générique
Client EPP central et base de gestion des licences
Module WHMCS
Intégration registrar ANTIC
Extension WordPress
Automatisation de domaines prévue pour l’écosystème WordPress
Construisez avec Camoo
Échangez avec notre équipe au sujet du client générique, d’une intégration registrar WHMCS ou de la future extension WordPress.
Démarrer une conversation