Zum Hauptinhalt springen
SSL-Zertifikate von DigiCert, Sectigo und GeoTrust
+90 850 259 76 06 WhatsApp Support Reseller werden
SSL-Zertifikate
Marken
Software-Signierung LEI-Code
Tools
Support Kontakt WhatsApp Warenkorb
Sprache
Währung
SSL-Zertifikat erhalten
v3.0

API-Dokumentation

Binden Sie die SSL-Zertifikatsverwaltung mit der DATASSL Reseller API an die Automatisierung an

Erste Schritte

Mit der DATASSL Reseller API v3.0 verwalten Sie SSL-Zertifikatsbestellungen, Rechnungsvorgänge und Guthabenzahlungen programmatisch über Ihr Reseller-Konto.

Anforderungen
  • Ein aktives Reseller-Konto und eine definierte Reseller-Gruppe
  • API-Schlüssel (Sie können ihn in Ihrem Reseller-Bereich erstellen)
  • API erişimi açık olmalı (Panel > API & Entegrasyonlar)

Base URL

https://www.datassl.com/api/reseller/

Anfrageformat

Alle Anfragen und Antworten liegen im JSON-Format vor.

Content-Type: application/json
Accept: application/json

Allgemeine Antwortstruktur

// Başarılı
{
  "success": true,
  "message": "İşlem açıklaması",
  ...data
}

// Hata
{
  "success": false,
  "error": "Hata mesajı"
}

Identitätsvalidierung

Verwenden Sie bei allen API-Anfragen eine der folgenden Methoden:

Methode 1: X-API-Key Header

X-API-Key: YOUR_API_KEY

Methode 2: Bearer Token

Authorization: Bearer YOUR_API_KEY
Wie erhalte ich einen API-Schlüssel?
  1. Melden Sie sich in Ihrem Reseller-Bereich an
  2. API & Entegrasyonlar Öffnen Sie die Seite
  3. Klicken Sie auf die Schaltfläche "API-Schlüssel erstellen"
  4. Bewahren Sie den erstellten Schlüssel an einem sicheren Ort auf

Alle Endpoints

Methode Endpoint Beschreibung
Produkte
GET /products Produktliste (mit Filterunterstützung)
GET /products/{id} Produktdetails + SAN-Preise
GET /san-pricing/{id} SAN-/Wildcard-SAN-Preise
Bestellungen
GET /orders Bestellliste (mit Filterunterstützung)
GET /orders/{id} Bestelldetails
POST /orders Neue Bestellung erstellen (mit SAN-Unterstützung)
PUT /orders/{id} Bestellvorgänge (Stornierung)
SSL-Verwaltung
POST /ssl/configure SSL-Konfiguration (CSR, DCV, Admin-Daten)
GET /ssl/{order_id} SSL-Statusabfrage + Validierungsdetails
POST /ssl/resend-validation Validierungs-E-Mail erneut senden
POST /ssl/change-dcv DCV-Methode ändern
POST /ssl/reissue Zertifikat neu ausstellen (Reissue)
POST /csr/decode CSR decodieren (Domain, Organisation, SAN-Daten)
Rechnungen
GET /invoices Rechnungsliste
GET /invoices/{id} Rechnungsdetails
Guthaben & Zahlung
GET /credits Guthaben + Transaktionsverlauf
POST /credits Bestellung mit Guthaben bezahlen
GET /balance Guthaben und letzte Transaktionen
Zertifikat
GET /certificate/{order_id} Zertifikatsstatus
GET /certificate/{order_id}/download Zertifikat herunterladen (PEM + CA Bundle)
Konto & Statistik
GET /account Kontoinformationen
GET /stats Statistiken und Diagramme

Produkte

Gruppenbasierter Zugriff: Die API gibt nur die Produkte zurück, die Ihrer Reseller-Gruppe zugewiesen sind. Die Preise werden automatisch mit den gruppenspezifischen Preisen berechnet.

Produktliste

GET /products
Filterparameter
Brand Markenfilter (Sectigo, DigiCert, Thawte...)
Type Typfilter (ssl, wildcard, multi-domain, code-signing)
Validierung Validierungstyp (dv, ov, ev)
GET /products?brand=Sectigo&type=ssl&validation=dv

Antwort

{
  "success": true,
  "products": [
    {
      "id": 1,
      "name": "Sectigo PositiveSSL",
      "brand": "Sectigo",
      "type": "ssl",
      "validation_type": "dv",
      "domain_type": "single",
      "list_price": 49.99,
      "list_pricing": { "1": 49.99, "2": 89.99, "3": 119.99 },
      "reseller_price": 12.99,
      "pricing": { "1": 12.99, "2": 22.99, "3": 29.99 },
      "max_years": 3,
      "warranty": "$50,000",
      "san_enabled": false
    }
  ],
  "count": 25,
  "group_id": 1,
  "note": "Sadece grubunuza tanımlanmış ürünler listelenmektedir."
}

Produktdetails

GET /products/{id}

Gibt für ein einzelnes Produkt die SAN-Preise, alle Mehrjahrespreise und alle Detailinformationen zurück.

SAN-Preise

GET /san-pricing/{product_id}

Gibt die SAN- und Wildcard-SAN-Preise des Produkts im Detail zurück.

Bestellungen

Bestellliste

GET /orders
Filterparameter
Status Statusfilter (pending, processing, completed, cancelled)
domain Domainsuche
limit Einträge pro Seite (max. 100, Standard 50)
offset Startpunkt (Seitennummerierung)
GET /orders?status=pending&limit=20&offset=0

Bestelldetails

GET /orders/{id}

Neue Bestellung erstellen

POST /orders
Body-Parameter
product_id * Produkt-ID (muss in Ihrer Gruppe definiert sein)
domain * Domainname (außer Code Signing)
period Laufzeit (Monate, Standard 12). Dies ist die Abonnementlaufzeit; die Zertifikatsgültigkeit beträgt max. 200 Tage und wird automatisch erneuert.
san_count Anzahl zusätzlicher SANs
san_wildcard_count Anzahl zusätzlicher Wildcard-SANs
Automatische Guthabenzahlung

Bei Erstellung der Bestellung wird der Betrag automatisch von Ihrem Guthaben abgebucht. Bei unzureichendem Guthaben kann die Bestellung nicht erstellt werden (HTTP 402).

// Örnek istek
{
  "product_id": 1,
  "domain": "example.com",
  "period": 12,
  "san_count": 2,
  "san_wildcard_count": 0
}

Antwort

{
  "success": true,
  "message": "Sipariş başarıyla oluşturuldu",
  "order_id": 12345,
  "order_number": "ORD-2026-0042",
  "domain": "example.com",
  "base_price": 49.99,
  "san_total": 15.98,
  "discount_amount": 37.00,
  "total": 28.97,
  "status": "pending",
  "payment_status": "paid",
  "credit_used": 28.97,
  "new_balance": 1221.03,
  "invoice_number": "INV-2026-0078",
  "auto_reissue_enabled": true,
  "max_validity_days": 200,
  "purchase_end_date": "2027-02-14",
  "next_reissue_at": "2026-08-19"
}

Bestellung stornieren

PUT /orders/{id}
// Body
{ "action": "cancel" }

Nur Pending oder Processing Bestellungen können storniert werden.

Bestellstatus

Pending Ausstehend (Zahlung ausstehend)
Processing In Bearbeitung
validation_pending Domainvalidierung ausstehend
pending_configuration Konfiguration ausstehend
Completed Abgeschlossen / Aktiv
Cancelled Storniert
Expired Abgelaufen

SSL-Verwaltung

Die SSL-Endpunkte dienen nach der Bestellung zur Zertifikatskonfiguration, Statusabfrage, DCV-Änderung und für Reissue-Vorgänge.

SSL-Konfiguration

POST /ssl/configure

Konfigurieren Sie das SSL-Zertifikat nach der Bestellung, indem Sie die CSR- und DCV-Daten senden.

order_id * Bestell-ID
csr * Certificate Signing Request (PEM)
dcv_method Validierungsmethode: email, http, https, dns (Standard: email)
approver_email Bestätigungs-E-Mail (für E-Mail-DCV)

SSL-Statusabfrage

GET /ssl/{order_id}

Gibt den Echtzeitstatus, Validierungsdetails (HTTP-/DNS-/E-Mail-Anweisungen) und SAN-Validierungsinformationen zurück. Speichert das Zertifikat automatisch, wenn es bereit ist.

DCV-Methode ändern

POST /ssl/change-dcv
order_id * Bestell-ID
dcv_method * Neue DCV-Methode: email, http, https, dns
approver_email Neue Bestätigungs-E-Mail

Validierungs-E-Mail erneut senden

POST /ssl/resend-validation
{ "order_id": 12345 }

Zertifikat neu ausstellen (Reissue)

POST /ssl/reissue
Automatische Verlängerung: Im Rahmen der 198-Tage-Regel führt das System vor Ablauf der Gültigkeitsdauer Ihres Zertifikats automatisch eine Neuausstellung (Reissue) durch. Eine manuelle Neuausstellung ist ebenfalls über diesen Endpunkt möglich.
order_id * Bestell-ID (aktives Zertifikat erforderlich)
csr Neuer CSR (optional, bei leerem Feld wird der vorhandene verwendet)
dcv_method DCV-Methode
approver_email Bestätigungs-E-Mail

CSR Decode

POST /csr/decode
{ "csr": "-----BEGIN CERTIFICATE REQUEST-----\n...\n-----END CERTIFICATE REQUEST-----" }

Extrahiert Domain, Organisation, SAN-Liste und weitere Daten aus dem CSR.

198-Tage-Regel & automatische Verlängerung

Beschluss des CA/Browser Forum: Ab dem 15. März 2026 dürfen SSL/TLS-Zertifikate höchstens 200 Tage (ca. 6,5 Monate) gültig sein. Code-Signing-Zertifikate sind von dieser Regel ausgenommen.

Wie funktioniert es?

Wenn ein Kunde ein 1-jähriges SSL-Zertifikat kauft:

  1. Zertifikat max. 200 Tage gültig ausgestellt
  2. Das Zertifikat wird automatisch neu ausgestellt (Reissue) 14 Tage vor Ablauf
  3. Dieser Vorgang wird über die gesamte Kaufdauer (1/2/3 Jahre) ohne zusätzliche Kosten wiederholt

Neue Felder in der Bestellantwort

auto_reissue_enabled boolean — Ob die automatische Verlängerung aktiv ist (bei allen SSL-Produkten außer Code Signing true)
max_validity_days integer — Max. Gültigkeitsdauer des Zertifikats (Tage). Aktuell: 200
purchase_end_date string (YYYY-MM-DD) — Enddatum des Abonnements (Ende des bezahlten Zeitraums)
next_reissue_at string (YYYY-MM-DD) — Sonraki otomatik yenileme tarihi
reissue_count integer — Anzahl der bisher durchgeführten automatischen Verlängerungen

Gültigkeitsphasen (Roadmap)

Datum Max. Gültigkeit Status
15. März 2026 200 Tage Aktiv
15. März 2027 100 Tage Bevorstehend
15. März 2029 47 Tage Bevorstehend

Beispielszenario: 1-jähriges DV-SSL

// Sipariş oluşturuldu: 21 Mart 2026
// Abonelik süresi: 1 yıl (21 Mart 2027'ye kadar)

// 1. Sertifika: 21 Mar 2026 → 7 Eki 2026 (200 gün)
// Otomatik reissue: 23 Eyl 2026 (bitiş - 14 gün)
// 2. Sertifika: 23 Eyl 2026 → 11 Nis 2027 (200 gün)
// Abonelik 21 Mar 2027'de bitiyor → reissue yapılmaz

{
  "order_id": 12345,
  "period": 12,
  "auto_reissue_enabled": true,
  "max_validity_days": 200,
  "purchase_end_date": "2027-03-21",
  "next_reissue_at": "2026-09-23",
  "reissue_count": 0,
  "cert_valid_from": "2026-03-21",
  "cert_valid_till": "2026-10-07"
}
Ausnahme für Code Signing: Code-Signing- und EV-Code-Signing-Zertifikate sind von der 198-Tage-Regel ausgenommen. Bei diesen Produkten auto_reissue_enabled gibt immer false zurück.

Otomatik SSL (ACME) Abonelikleri

Sectigo ACME ve "Plan + Automate" ürünleri yıllık aboneliktir. Bu ürünlerde CSR ve doğrulama adımı yoktur; sertifikayı müşterinin sunucusundaki ACME istemcisi ya da AutoInstall SSL alır ve yeniler.

Ürünleri listeleme

Abonelik ürünleri yalnızca istendiğinde listelenir:

GET /products?include=acme

Bu ürünlerde şu alanlar döner: fulfillment: "acme_subscription", requires_csr: false, acme_type (caas = ACME istemcisi, ais = AutoInstall SSL), wildcard_only.

Abonelik siparişi

POST /orders
AlanErforderlichBeschreibung
product_idJaAbonelik ürününün kimliği
domainJaAlan adı. wildcard_only ürünlerde *.example.com biçiminde. www adresi kendiliğinden eklenir.
contact_emailais –Sertifika ve abonelik bildirimlerinin gideceği adres

Sipariş tutarı bakiyenizden düşülür ve abonelik hemen oluşturulur. Abonelik oluşturulamazsa sipariş iptal edilir ve tutar bakiyenize iade edilir.

{
  "success": true,
  "order_id": 1234,
  "status": "completed",
  "fulfillment": "acme_subscription",
  "acme": { "status": "created", "subscription_id": 12, "details_endpoint": "/orders/1234/acme" }
}

Einrichtungsdaten

GET /orders/{order_id}/acme

ACME sunucu adresini ve EAB kimlik bilgilerini döndürür. Bilgiler sağlayıcıdan anlık alınır; EAB anahtarını parola gibi saklayın.

{
  "success": true,
  "acme": {
    "status": "active",
    "category": "caas",
    "domains": [ { "id": "123", "name": "ornek.com" }, { "id": "124", "name": "www.ornek.com" } ],
    "subscription": { "begin": "2026-10-04", "next_renewal": "2027-10-04", "end": null },
    "account": { "eab_kid": "...", "eab_hmac_key": "...", "server_url": "https://acme.sectigo.com/v2/DV", "status": "pending" },
    "autoinstall": null
  }
}

AutoInstall ürünlerinde autoinstall.login_url alanı kurulum panelinin bağlantısını verir. GET /orders/{order_id} yanıtında da aboneliğin özeti (acme) yer alır.

Rechnungen

Rechnungsliste

GET /invoices
Status Statusfilter (unpaid, paid, cancelled, sent)
limit Einträge pro Seite (max. 100)
offset Startpunkt

Antwort

{
  "success": true,
  "invoices": [
    {
      "id": 78,
      "invoice_number": "INV-2026-0078",
      "order_number": "ORD-2026-0042",
      "domain": "example.com",
      "total": 28.97,
      "currency": "USD",
      "status": "unpaid",
      "due_date": "2026-02-21",
      "created_at": "2026-02-14 10:30:00"
    }
  ],
  "pagination": { "total": 156, "limit": 50, "offset": 0 }
}

Rechnungsdetails

GET /invoices/{id}

Guthaben & Zahlung

USD-basiert: Alle Guthaben und Transaktionen werden in USD geführt.

Guthaben & Transaktionsverlauf

GET /credits
{
  "success": true,
  "balance": 1250.00,
  "currency": "USD",
  "transactions": [
    {
      "id": 45,
      "amount": -28.97,
      "type": "debit",
      "description": "Sipariş ödemesi: ORD-2026-0042",
      "balance_after": 1221.03,
      "created_at": "2026-02-14 10:31:00"
    },
    {
      "id": 44,
      "amount": 500.00,
      "type": "credit",
      "description": "Kredi yükleme",
      "balance_after": 1250.00,
      "created_at": "2026-02-13 09:00:00"
    }
  ],
  "pagination": { "total": 45, "limit": 50, "offset": 0 }
}

Bestellung mit Guthaben bezahlen

POST /credits
// İstek
{ "order_id": 12345 }

// Yanıt
{
  "success": true,
  "message": "Ödeme başarıyla alındı",
  "order_id": 12345,
  "amount_paid": 28.97,
  "new_balance": 1221.03
}
Bei unzureichendem Guthaben wird ein Fehler zurückgegeben. Wir empfehlen, vor der Zahlung das Guthaben zu prüfen.

Guthaben abfragen (kurz)

GET /balance

Gibt die Guthabeninformationen zusammen mit den letzten 10 Transaktionen zurück.

Zertifikat

Zertifikatsstatus

GET /certificate/{order_id}
{
  "success": true,
  "certificate": {
    "order_id": 12345,
    "domain": "example.com",
    "product": "Sectigo PositiveSSL",
    "brand": "Sectigo",
    "status": "completed",
    "valid_from": "2026-03-21",
    "valid_till": "2026-10-07",
    "has_certificate": true,
    "has_ca_bundle": true,
    "days_remaining": 200,
    "is_expired": false,
    "auto_reissue_enabled": true,
    "max_validity_days": 200,
    "next_reissue_at": "2026-09-23",
    "purchase_end_date": "2027-03-21",
    "reissue_count": 0
  }
}

Zertifikat herunterladen

GET /certificate/{order_id}/download
{
  "success": true,
  "certificate": {
    "domain": "example.com",
    "valid_from": "2026-03-21",
    "valid_till": "2026-10-07",
    "certificate_pem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "ca_bundle": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "private_key_note": "Private key sipariş oluşturulurken size iletilmiştir."
  }
}

Statistiken

GET /stats

Gibt umfassende Statistiken und Diagrammdaten für Ihr Reseller-Konto zurück.

{
  "success": true,
  "stats": {
    "total_orders": 156,
    "active_orders": 89,
    "pending_orders": 3,
    "total_revenue": 15420.00,
    "monthly_revenue": 2340.00,
    "credit_balance": 1250.00
  },
  "charts": {
    "daily_sales": [
      { "date": "2026-02-13", "orders": 5, "revenue": 245.50 },
      { "date": "2026-02-14", "orders": 3, "revenue": 189.97 }
    ],
    "brand_distribution": [
      { "brand": "Sectigo", "count": 78 },
      { "brand": "DigiCert", "count": 45 }
    ],
    "status_distribution": {
      "completed": 89,
      "pending": 3,
      "processing": 5,
      "cancelled": 12
    }
  }
}

Kontoinformationen

GET /account
{
  "success": true,
  "reseller": {
    "id": 42,
    "name": "Bayi Adı",
    "email": "bayi@example.com",
    "company": "Örnek Şirket Ltd.",
    "discount_rate": 30.0,
    "credit_balance": 1250.00,
    "stats": {
      "order_count": 156,
      "total_revenue": 15420.00
    }
  }
}

Fehlercodes

Code Bedeutung Beschreibung
400 Bad Request Ungültige oder fehlende Parameter
401 Unauthorized Ungültiger API-Schlüssel oder API-Zugriff deaktiviert
403 Forbidden Reseller-Gruppe nicht definiert oder kein Zugriff auf das Produkt
404 Nicht gefunden Ressource nicht gefunden (Bestellung, Zertifikat)
405 Method Not Allowed Die HTTP-Methode wird für diesen Endpunkt nicht unterstützt
500 Server Error Serverfehler

Fehlerantwort

{
  "success": false,
  "error": "Yetersiz bakiye. Gerekli: $28.97 Mevcut: $10.00"
}

Codebeispiele

<?php
class DataSSLClient {
    private $apiKey;
    private $baseUrl = 'https://www.datassl.com/api/reseller';

    public function __construct($apiKey) {
        $this->apiKey = $apiKey;
    }

    private function request($method, $endpoint, $data = null) {
        $ch = curl_init($this->baseUrl . $endpoint);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                'X-API-Key: ' . $this->apiKey
            ]
        ]);
        if ($method === 'POST') {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }
        if ($method === 'PUT') {
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }
        if ($method === 'DELETE') {
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        }
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return json_decode($response, true);
    }

    // Ürünler
    public function getProducts($filters = []) {
        $query = $filters ? '?' . http_build_query($filters) : '';
        return $this->request('GET', '/products' . $query);
    }

    public function getProduct($id) {
        return $this->request('GET', '/products/' . $id);
    }

    // Siparişler
    public function getOrders($filters = []) {
        $query = $filters ? '?' . http_build_query($filters) : '';
        return $this->request('GET', '/orders' . $query);
    }

    public function createOrder($data) {
        return $this->request('POST', '/orders', $data);
    }

    public function cancelOrder($id) {
        return $this->request('PUT', '/orders/' . $id, ['action' => 'cancel']);
    }

    // Faturalar
    public function getInvoices($status = '') {
        $query = $status ? '?status=' . $status : '';
        return $this->request('GET', '/invoices' . $query);
    }

    // Kredi
    public function getCredits() {
        return $this->request('GET', '/credits');
    }

    public function payWithCredit($orderId) {
        return $this->request('POST', '/credits', ['order_id' => $orderId]);
    }

    // Sertifika
    public function getCertificateStatus($orderId) {
        return $this->request('GET', '/certificate/' . $orderId);
    }

    public function downloadCertificate($orderId) {
        return $this->request('GET', '/certificate/' . $orderId . '/download');
    }

    // Hesap & İstatistik
    public function getAccount() { return $this->request('GET', '/account'); }
    public function getBalance() { return $this->request('GET', '/balance'); }
    public function getStats()   { return $this->request('GET', '/stats'); }
}

// ─── Kullanım Örnekleri ───

$client = new DataSSLClient('YOUR_API_KEY');

// 1. Ürünleri listele
$products = $client->getProducts(['brand' => 'Sectigo', 'type' => 'ssl']);

// 2. Sipariş oluştur (kredi bakiyesinden otomatik kesilir)
$order = $client->createOrder([
    'product_id' => 1,
    'domain' => 'example.com',
    'period' => 12,
    'san_count' => 2
]);

// 3. Sipariş zaten ödenmiş, SSL yapılandırabilirsiniz
if ($order['success']) {
    echo "Sipariş: " . $order['order_number'] . "\n";
    echo "Tutar: $" . $order['total'] . "\n";
    echo "Kalan bakiye: $" . $order['new_balance'] . "\n";
}

// 4. Sertifika indir
$cert = $client->downloadCertificate(12345);
if ($cert['success']) {
    file_put_contents('certificate.pem', $cert['certificate']['certificate_pem']);
    file_put_contents('ca-bundle.pem', $cert['certificate']['ca_bundle']);
}
?>
import requests

class DataSSLClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://www.datassl.com/api/reseller'
        self.headers = {
            'Content-Type': 'application/json',
            'X-API-Key': api_key
        }

    def get_products(self, **filters):
        return requests.get(f'{self.base_url}/products', params=filters, headers=self.headers).json()

    def create_order(self, data):
        return requests.post(f'{self.base_url}/orders', json=data, headers=self.headers).json()

    def cancel_order(self, order_id):
        return requests.put(f'{self.base_url}/orders/{order_id}', json={'action': 'cancel'}, headers=self.headers).json()

    def get_invoices(self, status=''):
        params = {'status': status} if status else {}
        return requests.get(f'{self.base_url}/invoices', params=params, headers=self.headers).json()

    def pay_with_credit(self, order_id):
        return requests.post(f'{self.base_url}/credits', json={'order_id': order_id}, headers=self.headers).json()

    def get_certificate(self, order_id):
        return requests.get(f'{self.base_url}/certificate/{order_id}', headers=self.headers).json()

    def download_certificate(self, order_id):
        return requests.get(f'{self.base_url}/certificate/{order_id}/download', headers=self.headers).json()

    def get_stats(self):
        return requests.get(f'{self.base_url}/stats', headers=self.headers).json()

    def get_balance(self):
        return requests.get(f'{self.base_url}/balance', headers=self.headers).json()

# ─── Kullanım ───
client = DataSSLClient('YOUR_API_KEY')

# Ürünleri listele
products = client.get_products(brand='Sectigo', type='ssl')
for p in products.get('products', []):
    print(f"{p['name']} - ${p['reseller_price']}")

# Sipariş oluştur + öde
order = client.create_order({
    'product_id': 1,
    'domain': 'example.com'
})

if order['success']:
    payment = client.pay_with_credit(order['order_id'])
    print(f"Ödendi: ${payment['amount_paid']} | Bakiye: ${payment['new_balance']}")

# İstatistikler
stats = client.get_stats()
print(f"Bu ay gelir: ${stats['stats']['monthly_revenue']}")
const axios = require('axios');

class DataSSLClient {
    constructor(apiKey) {
        this.client = axios.create({
            baseURL: 'https://www.datassl.com/api/reseller',
            headers: { 'Content-Type': 'application/json', 'X-API-Key': apiKey }
        });
    }

    async getProducts(filters = {}) {
        return (await this.client.get('/products', { params: filters })).data;
    }

    async createOrder(data) {
        return (await this.client.post('/orders', data)).data;
    }

    async cancelOrder(id) {
        return (await this.client.put(`/orders/${id}`, { action: 'cancel' })).data;
    }

    async getInvoices(status = '') {
        return (await this.client.get('/invoices', { params: { status } })).data;
    }

    async payWithCredit(orderId) {
        return (await this.client.post('/credits', { order_id: orderId })).data;
    }

    async getCertificate(orderId) {
        return (await this.client.get(`/certificate/${orderId}`)).data;
    }

    async downloadCertificate(orderId) {
        return (await this.client.get(`/certificate/${orderId}/download`)).data;
    }

    async getStats() { return (await this.client.get('/stats')).data; }
    async getBalance() { return (await this.client.get('/balance')).data; }
    async getAccount() { return (await this.client.get('/account')).data; }
}

// ─── Kullanım ───
(async () => {
    const client = new DataSSLClient('YOUR_API_KEY');

    // Ürünler
    const { products } = await client.getProducts({ brand: 'Sectigo' });
    products.forEach(p => console.log(`${p.name} - $${p.reseller_price}`));

    // Sipariş + Ödeme
    const order = await client.createOrder({
        product_id: 1, domain: 'example.com',
        san_count: 2
    });

    if (order.success) {
        const payment = await client.payWithCredit(order.order_id);
        console.log(`Ödendi: $${payment.amount_paid}`);
    }

    // İstatistik
    const stats = await client.getStats();
    console.log(`Toplam sipariş: ${stats.stats.total_orders}`);
})();
# ─── Ürünler ───
curl -X GET "https://www.datassl.com/api/reseller/products?brand=Sectigo&type=ssl" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Sipariş Oluştur ───
curl -X POST "https://www.datassl.com/api/reseller/orders" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "product_id": 1,
    "domain": "example.com",
    "san_count": 2
  }'

# ─── Sipariş İptal ───
curl -X PUT "https://www.datassl.com/api/reseller/orders/12345" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{ "action": "cancel" }'

# ─── Faturalar ───
curl -X GET "https://www.datassl.com/api/reseller/invoices?status=unpaid" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Kredi ile Öde ───
curl -X POST "https://www.datassl.com/api/reseller/credits" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{ "order_id": 12345 }'

# ─── Sertifika Durumu ───
curl -X GET "https://www.datassl.com/api/reseller/certificate/12345" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Sertifika İndir ───
curl -X GET "https://www.datassl.com/api/reseller/certificate/12345/download" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── İstatistikler ───
curl -X GET "https://www.datassl.com/api/reseller/stats" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Bakiye ───
curl -X GET "https://www.datassl.com/api/reseller/balance" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Hesap Bilgileri ───
curl -X GET "https://www.datassl.com/api/reseller/account" \
  -H "X-API-Key: YOUR_API_KEY"

WHMCS-Modul

Mit WHMCS können Sie DATASSL-Produkte ganz einfach verkaufen. Vollständige Integration mit Addon- und Server-Modulstruktur.

WHMCS Addon + Server Module v5.9.0

Vollständiges Verwaltungspanel, Produktgenerator, Bestellsynchronisierung und automatische Bereitstellung.

  • kompatibel mit WHMCS 7.x / 8.x / 9.x
  • Addon-Panel: Produktgenerator, Bestellverwaltung, Statistiken
  • Massenhafte Produktanlage und automatische Preisgestaltung
  • Automatische Bestellsynchronisierung per Cron
  • Admin- und Kundenoberfläche
  • Kein Hinzufügen eines Servers erforderlich - die API ist integriert

Installation

  1. Laden Sie die ZIP-Datei herunter und entpacken Sie sie
  2. Kopieren Sie die beiden Ordner in Ihr WHMCS-Verzeichnis:
    • modules/addons/datassl → Addon paneli
    • modules/servers/datassl → Provisioning-Modul
  3. WHMCS Admin → Setup → Addon Modules → "DATASSL SSL Certificates" → Activate
  4. Wählen Sie die Admin-Rollen unter Access Control aus
  5. Fügen Sie die Produkte über Addons → DATASSL → Produktgenerator hinzu
Es ist weder das Hinzufügen eines Servers noch die Eingabe eines API-Schlüssels erforderlich. Die API-Daten sind im Modul integriert.