SSL Sertifikası
Geliştirici · v3.0

API Dokümantasyonu

SSL Sertifikası Reseller API ile SSL sertifikası yönetimini otomasyona bağlayın.

REST · JSON API anahtarı WHMCS & WiseCP
Hızlı BaşlangıçBase URL, istek formatı ve ilk isteğiniz. Kimlik DoğrulamaAPI anahtarı ile güvenli erişim. Kod ÖrnekleriPHP, Python, Node.js ve cURL örnekleri. WHMCS & WiseCPHazır modüllerle mevcut panelinize entegre edin.

Başlarken

SSL Sertifikası Reseller API v3.0, bayi hesabınız üzerinden SSL sertifikası siparişlerini, fatura işlemlerini ve kredi ödemelerini programatik olarak yönetmenizi sağlar.

Gereksinimler
  • Aktif bir bayi hesabı (sipariş verebilmek için hesabınıza bir bayi fiyat grubu tanımlanmış olmalıdır)
  • API anahtarı (bayi panelinizden oluşturabilirsiniz)
  • API erişimi açık olmalı (Panel > API & Entegrasyonlar)

Base URL

https://www.sslsertifikasi.com.tr/api/reseller/

İstek Formatı

Tüm istekler ve yanıtlar JSON formatındadır.

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

Genel Yanıt Yapısı

// Başarılı (veri alanları doğrudan üst seviyede döner; "message" yalnızca işlem yapan isteklerde bulunur)
{
  "success": true,
  ...data
}

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

İstek Sınırı

Her bayi hesabı için dakikada 60 istek sınırı vardır. Sınır aşıldığında API 429 döner; yanıtta Retry-After başlığı ve retry_after_minutes alanı bulunur.

Para Birimi ve KDV

Fiyat ve bakiye alanlarının para birimi yanıttaki currency / base_currency alanlarında belirtilir. Ürün fiyatları KDV hariçtir; sipariş tutarı (total) KDV dahil hesaplanır ve bakiyenizden bu tutar düşülür.

Kimlik Doğrulama

Tüm API isteklerinde aşağıdaki yöntemlerden birini kullanın:

Yöntem 1: X-API-Key Header

X-API-Key: YOUR_API_KEY

Yöntem 2: Bearer Token

Authorization: Bearer YOUR_API_KEY
API Anahtarı Nasıl Alınır?
  1. Bayi panelinize giriş yapın
  2. API & Entegrasyonlar sayfasını açın
  3. "API Anahtarı Oluştur" butonuna tıklayın
  4. Oluşturulan anahtarı güvenli bir yerde saklayın

Tüm Endpoint'ler

Method Endpoint Açıklama
Ürünler
GET /products Ürün listesi (filtre destekli)
GET /products/{id} Ürün detayı + SAN fiyatları
Siparişler
GET /orders Sipariş listesi (filtre destekli)
GET /orders/{id} Sipariş detayı
POST /orders Yeni sipariş oluştur (SAN destekli)
PUT /orders/{id} Sipariş işlemleri (iptal)
SSL Yönetimi
POST /ssl/configure SSL yapılandırma (CSR, DCV, iletişim bilgileri)
GET /ssl/{order_id} SSL durum sorgulama + doğrulama detayları
POST /ssl/resend-validation Doğrulama e-postasını tekrar gönder
POST /ssl/change-dcv DCV yöntemini değiştir
POST /ssl/reissue Sertifika yeniden düzenle (reissue)
POST /ssl/documents Doğrulama evrakı yükle (Certum ürünleri)
GET /ssl/{order_id}/documents Yüklenen evrakların durumu
POST /csr/decode CSR decode (domain, org, SAN bilgileri)
Faturalar
GET /invoices Fatura listesi
GET /invoices/{id} Fatura detayı
Kredi & Ödeme
GET /credits Kredi bakiyesi + işlem geçmişi
POST /credits Ödenmemiş bir siparişi bakiyeden öde
GET /balance Bakiye ve son işlemler
Sertifika
GET /certificate/{order_id} Sertifika durum bilgisi
GET /certificate/{order_id}/download Sertifika indir (PEM + CA Bundle)
Hesap & İstatistik
GET /account  (veya /me) Hesap bilgileri
GET /stats İstatistikler ve grafikler

Ürünler

Grup Bazlı Fiyat: Hesabınıza bir bayi fiyat grubu tanımlıysa yalnızca o gruptaki ürünler ve grup fiyatları döner. Fiyatlar KDV hariçtir.

Ürün Listesi

GET /products
Filtre Parametreleri
brand Marka (ör. Sectigo, DigiCert, Certum). Tam eşleşme, büyük/küçük harf duyarsız.
type Ürün türü. Değer, ürün listesinde dönen type alanıyla aynı olmalıdır.
validation Doğrulama tipi (dv, ov, ev)
GET /products?brand=Sectigo&validation=dv

Yanıt

{
  "success": true,
  "products": [
    {
      "id": 1,
      "name": "Sectigo PositiveSSL",
      "brand": "Sectigo",
      "type": "dv",
      "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,
      "san_enabled": false,
      "currency": "USD",
      "tax_rate": 20
    }
  ],
  "count": 25,
  "group_id": 1,
  "currency": "USD",
  "tax_rate": 20,
  "note": "Fiyatlar KDV hariçtir. KDV bilgisi her üründe ayrı gösterilmektedir."
}

Yukarıdaki değerler örnektir. SAN destekleyen ürünlerde ek olarak san nesnesi (SAN ve Wildcard SAN fiyatları) döner.

Ürün Detayı

GET /products/{id}

Tek ürünün bilgilerini product nesnesi içinde döndürür: 1–5 yıllık fiyatlar ve varsa SAN / Wildcard SAN fiyatları. Ürün grubunuzda tanımlı değilse 404 döner.

Siparişler

Sipariş Listesi

GET /orders
Filtre Parametreleri
status Durum filtresi (aşağıdaki durum değerlerinden biri)
domain Alan adı araması (içinde geçen)
limit Sayfa başına kayıt (maks. 100, varsayılan 50)
offset Başlangıç noktası (sayfalama)
GET /orders?status=pending_configuration&limit=20&offset=0

Sipariş Detayı

GET /orders/{id}
{
  "success": true,
  "order": {
    "id": 12345,
    "order_number": "ORD-2026-0042",
    "product_name": "Sectigo PositiveSSL",
    "domain": "example.com",
    "period_months": 12,
    "subtotal": 12.99,
    "discount_amount": 37.00,
    "total": 15.59,
    "status": "active",
    "payment_status": "paid",
    "max_validity_days": 199,
    "purchase_end_date": "2027-03-21",
    "reissue_count": 0,
    "created_at": "2026-03-21 10:30:00",
    "certificate": { "valid_from": "2026-03-21", "valid_till": "2026-10-05", "has_certificate": true }
  }
}

Yeni Sipariş Oluştur

POST /orders
Body Parametreleri
product_id * Ürün ID (grubunuzda tanımlı olmalı)
domain * Alan adı. Kod imzalama gibi alan adı gerektirmeyen ürünlerde zorunlu değildir; csr gönderilirse CSR'daki CN kullanılabilir.
period Hizmet süresi (ay): 12, 24, 36… (en fazla 60). Gönderilmezse ürünün varsayılan süresi kullanılır. Tutar, ürünün o süreye ait fiyatından (pricing) hesaplanır; ilgili süre için fiyat tanımlı değilse sipariş 400 ile reddedilir.
san_count Ek SAN sayısı. Ürün için SAN fiyatı tanımlı değilse SAN'lı sipariş reddedilir. Yapılandırmada gönderilen ek alan adı sayısı, ödenen adedi (çoklu alan adı ürünlerinde ürüne dahil adet dahil) aşamaz.
san_wildcard_count Ek Wildcard SAN sayısı
csr CSR (PEM). Gönderilirse sipariş oluşturulur oluşturulmaz sertifika başvurusu yapılır. Gönderilmezse sipariş pending_configuration durumunda bekler ve POST /ssl/configure ile tamamlanır.
dcv_method, approver_email csr ile birlikte kullanılır. Doğrulama yöntemi: email, http, https, dns (varsayılan: email).
admin_firstname, admin_lastname, admin_email, admin_phone, organization, admin_address, admin_city, admin_postcode, admin_country İletişim / kuruluş bilgileri (opsiyonel). Gönderilmezse bayi hesabınızdaki bilgiler kullanılır; admin_country varsayılanı TR.
Bakiyeden Ödeme

Sipariş oluşturulduğunda KDV dahil tutar bakiyenizden düşülür ve sipariş paid olarak kaydedilir; ayrıca ödeme isteği göndermeniz gerekmez. Bakiye (veya tanımlıysa kredi limiti) yetersizse sipariş oluşturulmaz ve 402 döner.

CSR ve özel anahtar: API, CSR veya özel anahtar (private key) üretmez ve saklamaz. CSR'ı kendi sunucunuzda oluşturup göndermelisiniz; özel anahtar yalnızca sizde kalır.
// Örnek istek
{
  "product_id": 1,
  "domain": "example.com",
  "period": 12
}

Yanıt

{
  "success": true,
  "message": "Sipariş başarıyla oluşturuldu",
  "order_id": 12345,
  "order_number": "ORD-2026-0042",
  "domain": "example.com",
  "subtotal": 12.99,
  "tax_rate": 20,
  "tax_amount": 2.60,
  "total": 15.59,
  "currency": "USD",
  "status": "pending_configuration",
  "payment_status": "paid",
  "credit_used": 15.59,
  "new_balance": 1234.41,
  "invoice_number": "INV-2026-0078",
  "max_validity_days": 199,
  "purchase_end_date": "2027-03-21"
}

csr ile gönderilen siparişlerde yanıtta ayrıca ssl_provision ve doğrulama talimatlarını içeren validation_details alanları bulunur. Başvuru aşamasında bir hata oluşursa sipariş yine oluşturulmuş olur; hata ssl_provision.error alanında bildirilir.

Sipariş İptal Et

PUT /orders/{id}
// Body
{ "action": "cancel", "reason": "İptal nedeni (opsiyonel)" }

Yalnızca henüz sertifikası düzenlenmemiş siparişler (pending, pending_configuration, processing) iptal edilebilir; tutar bakiyenize iade edilir ve yanıttaki credit_refunded alanında gösterilir. Yayınlanmış sertifikalar ve sertifika sağlayıcısının iptalini kabul etmediği siparişler API üzerinden iptal edilemez (409); bunlar için destek talebi oluşturun.

Sipariş Durumları

pending_configuration Ödendi, CSR / yapılandırma bekleniyor
processing Başvuru yapıldı, işleniyor
validation_pending Alan adı / kuruluş doğrulaması bekleniyor
pending Beklemede
active / completed Sertifika düzenlendi
cancelled İptal edildi
expired Süresi dolmuş

SSL Yönetimi

SSL endpoint'leri sipariş sonrası sertifika yapılandırma, durum sorgulama, DCV değişikliği ve yeniden düzenleme (reissue) işlemleri için kullanılır.

SSL Yapılandırma

POST /ssl/configure

Sipariş oluşturulduktan sonra CSR ve DCV bilgilerini göndererek sertifika başvurusunu yapın. Sipariş ödenmiş olmalı (aksi halde 402) ve daha önce yapılandırılmamış olmalıdır (aksi halde 400).

order_id * Sipariş ID
csr * Certificate Signing Request (PEM). Kendi sunucunuzda üretilmelidir. Bulut kod imzalama ürünlerinde gönderilmez (ayrıntı).
dcv_method Doğrulama yöntemi: email, http, https, dns (varsayılan: email)
approver_email Onay e-postası (email DCV için)
san_domains Çoklu alan adı ürünlerinde ek alan adları
admin_firstname, admin_lastname, admin_email, admin_phone, organization, admin_address, admin_city, admin_postcode, admin_country İletişim / kuruluş bilgileri (opsiyonel; OV ve EV ürünlerinde kuruluş bilgilerini göndermeniz önerilir)

SSL Durum Sorgulama

GET /ssl/{order_id}

Siparişin durumunu, seçili DCV yöntemini ve doğrulama talimatlarını (validation_details: HTTP dosyası, DNS kaydı veya onay e-postası) döndürür. Sertifika düzenlendiğinde has_certificate alanı true olur; sertifikayı GET /certificate/{order_id}/download ile alabilirsiniz.

DCV Yöntemi Değiştir

POST /ssl/change-dcv
order_id * Sipariş ID
dcv_method * Yeni DCV yöntemi: email, http, https, dns
approver_email Yeni onay e-postası

Yalnızca doğrulaması tamamlanmamış siparişlerde kullanılabilir.

Doğrulama E-postası Tekrar Gönder

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

Sertifika Yeniden Düzenle (Reissue)

POST /ssl/reissue
Yeniden düzenleme hizmet süresi boyunca ücretsizdir ve bu istekle siz başlatırsınız; sistem otomatik reissue yapmaz. Ayrıntı için 199 Gün Kuralı bölümüne bakın.
order_id * Sipariş ID (aktif sertifika gerekli)
csr Yeni CSR (opsiyonel, boşsa siparişteki mevcut CSR kullanılır)
dcv_method DCV yöntemi
approver_email Onay e-postası
Ürüne göre destek: DCV değiştirme, doğrulama e-postasını yeniden gönderme ve reissue işlemleri bazı markaların ürünlerinde API üzerinden desteklenmez. Bu durumda istek 400 ile açıklayıcı bir hata döndürür; işlemi bayi panelinden yapabilir veya destek talebi açabilirsiniz.

Bulut Kod İmzalama (Certum Cloud)

Certum bulut kod imzalama ürünlerinde imzalama anahtarı Certum bulutunda (SimplySign) üretilir; bu nedenle CSR ve alan adı gönderilmez. Sipariş POST /orders ile oluşturulur, başvuru POST /ssl/configure ile aşağıdaki alanlarla yapılır:

order_id * Sipariş ID
admin_firstname, admin_lastname * Başvuran kişinin adı ve soyadı
admin_email * Başvuranın e-posta adresi. Sertifika bu adrese bağlı SimplySign hesabına tanımlanır; farklı bir hesap e-postası için simplysign_email gönderin.
admin_phone Başvuranın telefonu
organization, tax_number Kuruluş adı ve vergi numarası. Kuruluş adına başvuruda ikisi birlikte zorunludur; EV kod imzalamada organization zorunludur. Bireysel başvuruda gönderilmez.
admin_country, admin_city, admin_address, admin_postcode Kuruluş adresi (ülke kodu iki harf, varsayılan TR). EV başvurularında adres bilgilerini eksiksiz gönderin; ticaret sicil numarası için registration_number kullanılabilir.
{
  "order_id": 12345,
  "admin_firstname": "Ali",
  "admin_lastname": "Yilmaz",
  "admin_email": "ali@ornek.com.tr",
  "admin_phone": "+905550000000",
  "organization": "Ornek Yazilim A.S.",
  "tax_number": "1234567890",
  "admin_city": "Istanbul",
  "admin_country": "TR"
}

Başvurudan sonra sertifika otoritesi kişi ve kuruluş doğrulaması yapar ve belge isteyebilir. Belgeleri Evrak Yükleme ile gönderebilir, durumu GET /ssl/{order_id} ile izleyebilirsiniz.

Evrak Yükleme

POST /ssl/documents

Certum ürünlerinde doğrulama için istenen belgeleri (kimlik, kuruluş belgesi, yetki belgesi vb.) gönderir. Sipariş POST /ssl/configure ile yapılandırılmış olmalıdır. Dosyalar doğrudan sertifika otoritesine iletilir, tarafımızda saklanmaz.

order_id * Sipariş ID
files * Dosya listesi: [{"name": "belge.pdf", "content": "<base64>"}]. PDF, JPG veya PNG; dosya başına en fazla 10 MB, istek başına en fazla 5 dosya ve toplam 20 MB.
doc_type Belge türü: APPLICANT (başvuran), ORGANIZATION (kuruluş), AUTHORIZATION (yetki belgesi), ADDITIONAL (diğer, varsayılan), ATTESTATION_LETTER
note Kısa açıklama (opsiyonel)
// İstek
{
  "order_id": 12345,
  "doc_type": "ORGANIZATION",
  "files": [ { "name": "vergi-levhasi.pdf", "content": "JVBERi0xLjQK..." } ]
}

// Yanıt
{ "success": true, "message": "Evrak sertifika otoritesine iletildi", "order_id": 12345, "doc_type": "ORGANIZATION", "uploaded": 1 }

Evrak Durumu

GET /ssl/{order_id}/documents
{
  "success": true,
  "order_id": 12345,
  "documents": [
    { "type": "ORGANIZATION", "state": "VERIFIED", "created_at": "2026-10-04", "expires_at": "" }
  ]
}

state değerini sertifika otoritesi belirler (ör. doğrulama bekliyor, doğrulandı, reddedildi). Reddedilen belge yerine yenisini aynı istekle gönderebilirsiniz.

CSR Decode

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

CSR içindeki bilgileri döndürür: cn, domain, is_wildcard, organization, country, sans, san_count ve onay için kullanılabilecek email_suggestions.

199 Gün Kuralı & Yeniden Düzenleme

CA/Browser Forum kuralı: Mart 2026'dan itibaren SSL/TLS sertifikaları en fazla 199 gün geçerli olarak düzenlenir. Kod imzalama (Code Signing) sertifikaları bu kurala tabi değildir.

Nasıl Çalışır?

1 yıllık (veya daha uzun) bir SSL siparişinde:

  1. Sertifika en fazla 199 gün geçerli olarak düzenlenir.
  2. Hizmet süresi (purchase_end_date) devam ederken sertifikanın süresi dolmadan POST /ssl/reissue ile ücretsiz yeniden düzenleme başlatırsınız.
  3. Yeniden düzenleme otomatik yapılmaz; isteği sizin sisteminiz gönderir. Sertifikanın bitiş tarihini (valid_till / days_remaining) izlemenizi öneririz.

İlgili Alanlar

max_validity_days integer — Sertifikanın en fazla geçerlilik süresi (gün). Kod imzalama ürünlerinde null.
purchase_end_date string (YYYY-MM-DD) — Satın alınan hizmet süresinin bitiş tarihi
reissue_count integer — Sipariş için kayıtlı yeniden düzenleme sayısı
auto_reissue_enabled, next_reissue_at Geriye dönük uyumluluk için yanıtlarda yer alır. Otomatik yeniden düzenleme kullanılmadığından 0 ve null döner.

Geçerlilik Takvimi

CA/Browser Forum'un açıkladığı takvime göre azami geçerlilik süresi kademeli olarak kısalacaktır:

BaşlangıçAzami GeçerlilikDurum
Mart 2026200 gün (uygulamada 199 gün)Yürürlükte
Mart 2027100 günPlanlanan
Mart 202947 günPlanlanan

Örnek Senaryo: 1 Yıllık DV SSL

Sipariş: 21 Mart 2026 — hizmet süresi 21 Mart 2027'ye kadar

1. sertifika  : 21 Mart 2026 → 5 Ekim 2026 (199 gün)
Reissue isteği: Ekim 2026'dan önce POST /ssl/reissue (sizin sisteminiz gönderir)
2. sertifika  : yeniden düzenleme tarihinden itibaren en fazla 199 gün

Hizmet süresi 21 Mart 2027'de sona erer; sonrası için yeni sipariş gerekir.

Faturalar

Fatura Listesi

GET /invoices
status Durum filtresi (ör. paid, cancelled). API ile oluşturulan siparişlerin faturaları paid olarak oluşur.
limit Sayfa başı kayıt (maks. 100, varsayılan 50)
offset Başlangıç noktası

Yanıt

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

Fatura Detayı

GET /invoices/{id}

Kredi & Ödeme

Siparişler bakiyenizden karşılanır. Tutarların para birimi yanıttaki currency / base_currency alanlarında belirtilir.

Bakiye & İşlem Geçmişi

GET /credits?limit=50&offset=0
{
  "success": true,
  "balance": 1234.41,
  "currency": "USD",
  "transactions": [
    {
      "id": 45,
      "amount": -15.59,
      "type": "debit",
      "description": "Sipariş ödemesi: ORD-2026-0042 (KDV dahil)",
      "balance_after": 1234.41,
      "created_at": "2026-03-21 10:31:00"
    },
    {
      "id": 44,
      "amount": 500.00,
      "type": "credit",
      "description": "Kredi yükleme",
      "balance_after": 1250.00,
      "created_at": "2026-03-20 09:00:00"
    }
  ],
  "pagination": { "total": 45, "limit": 50, "offset": 0 }
}

Ödenmemiş Siparişi Bakiyeden Öde

POST /credits
{ "order_id": 12345 }
POST /orders ile oluşturulan siparişler oluşturulurken ödenir; bu siparişler için bu isteği göndermeniz gerekmez (gönderilirse 400 "Sipariş zaten ödenmiş" döner). Bu endpoint yalnızca başka bir kanaldan oluşturulmuş, ödenmemiş siparişler içindir.

Bakiye Sorgula (Kısa)

GET /balance

Bakiyeyi (credit_balance), tanımlıysa kredi limitini (credit_limit) ve son 10 işlemi (recent_transactions) döndürür.

Sertifika

Sertifika Durumu

GET /certificate/{order_id}
{
  "success": true,
  "certificate": {
    "order_id": 12345,
    "domain": "example.com",
    "product": "Sectigo PositiveSSL",
    "brand": "Sectigo",
    "status": "active",
    "valid_from": "2026-03-21",
    "valid_till": "2026-10-05",
    "has_certificate": true,
    "has_ca_bundle": true,
    "days_remaining": 198,
    "is_expired": false,
    "max_validity_days": 199,
    "purchase_end_date": "2027-03-21",
    "reissue_count": 0
  }
}

Sertifika İndir

GET /certificate/{order_id}/download
{
  "success": true,
  "certificate": {
    "domain": "example.com",
    "valid_from": "2026-03-21",
    "valid_till": "2026-10-05",
    "certificate_pem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
    "ca_bundle": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
  }
}

Sertifika henüz düzenlenmediyse 404 döner. Özel anahtar (private key) API tarafından üretilmez ve saklanmaz; CSR'ı oluştururken ürettiğiniz anahtarı kullanırsınız.

İstatistikler

GET /stats

Bayi hesabınıza ait sipariş sayılarını ve grafik verilerini döndürür. total_revenue ve monthly_revenue, ödenmiş siparişlerinizin KDV dahil toplamıdır.

{
  "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
    }
  }
}

Hesap Bilgileri

GET /account

GET /me aynı yanıtı döndürür.

{
  "success": true,
  "id": 42,
  "name": "Bayi Adı",
  "email": "bayi@example.com",
  "company": "Örnek Şirket Ltd.",
  "phone": "+90 212 000 00 00",
  "discount_rate": 0,
  "credit_balance": 1234.41,
  "credit_limit": 0,
  "currency": "USD",
  "tax_rate": 20,
  "status": "active",
  "api_status": "active",
  "stats": { "total_orders": 156 },
  "created_at": "2025-01-15 09:00:00"
}

Hata Kodları

Kod Anlam Açıklama
400 Bad Request Geçersiz veya eksik parametreler
401 Unauthorized Geçersiz API anahtarı veya API erişimi kapalı
402 Payment Required Bakiye / kredi limiti yetersiz veya sipariş ödenmemiş
403 Forbidden Bayi grubu tanımsız veya ürüne erişim yok
404 Not Found Kaynak bulunamadı (sipariş, sertifika)
405 Method Not Allowed HTTP metodu bu endpoint için desteklenmiyor
409 Conflict İşlem siparişin mevcut durumunda yapılamaz (ör. yayınlanmış sertifikanın iptali, zaten yapılandırılmış sipariş, aynı sipariş için süren başka bir işlem)
429 Too Many Requests İstek sınırı aşıldı (dakikada 60 istek); Retry-After başlığına bakın
500 Server Error Sunucu hatası

Hata Yanıtı

{
  "success": false,
  "error": "Yetersiz bakiye. Sipariş tutarı: USD 15.59. Mevcut bakiye: USD 10.00. Lütfen kredi yükleyin."
}

Kod Örnekleri

<?php
class SslApiClient {
    private $apiKey;
    private $baseUrl = 'https://www.sslsertifikasi.com.tr/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 SslApiClient('YOUR_API_KEY');

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

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

// 3. Sipariş oluşturulurken ödenir; tutar KDV dahildir
if ($order['success']) {
    echo "Sipariş: " . $order['order_number'] . "\n";
    echo "Tutar: " . $order['total'] . " " . $order['currency'] . "\n";
    echo "Kalan bakiye: " . $order['new_balance'] . "\n";
    // Sonraki adım: kendi sunucunuzda ürettiğiniz CSR ile POST /ssl/configure
    // (order_id, csr, dcv_method) — ardından GET /ssl/{order_id} ile doğrulama talimatlarını alı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 SslApiClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://www.sslsertifikasi.com.tr/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 configure_ssl(self, order_id, csr, dcv_method='dns'):
        data = {'order_id': order_id, 'csr': csr, 'dcv_method': dcv_method}
        return requests.post(f'{self.base_url}/ssl/configure', json=data, headers=self.headers).json()

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

    def reissue(self, order_id, csr=None):
        data = {'order_id': order_id}
        if csr:
            data['csr'] = csr
        return requests.post(f'{self.base_url}/ssl/reissue', json=data, 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 = SslApiClient('YOUR_API_KEY')

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

# Sipariş oluştur (tutar bakiyeden düşülür, ayrıca ödeme isteği gerekmez)
order = client.create_order({
    'product_id': 1,
    'domain': 'example.com'
})

if order.get('success'):
    print(f"Sipariş: {order['order_number']} | Tutar: {order['total']} | Bakiye: {order['new_balance']}")
    # CSR'ı kendi sunucunuzda üretin, sonra yapılandırın
    csr = open('example.com.csr').read()
    result = client.configure_ssl(order['order_id'], csr, dcv_method='dns')
    status = client.get_ssl_status(order['order_id'])
    print(status.get('validation_details'))
else:
    print('Hata:', order.get('error'))
const axios = require('axios');

class SslApiClient {
    constructor(apiKey) {
        this.client = axios.create({
            baseURL: 'https://www.sslsertifikasi.com.tr/api/reseller',
            headers: { 'Content-Type': 'application/json', 'X-API-Key': apiKey },
            validateStatus: () => true // 4xx yanıtlarında da { success:false, error } gövdesini oku
        });
    }

    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 configureSsl(orderId, csr, dcvMethod = 'dns') {
        return (await this.client.post('/ssl/configure', { order_id: orderId, csr, dcv_method: dcvMethod })).data;
    }

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

    async reissue(orderId, csr) {
        return (await this.client.post('/ssl/reissue', csr ? { order_id: orderId, csr } : { 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 SslApiClient('YOUR_API_KEY');

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

    // Sipariş (tutar bakiyeden düşülür, ayrıca ödeme isteği gerekmez)
    const order = await client.createOrder({ product_id: 1, domain: 'example.com' });

    if (order.success) {
        console.log(`Sipariş: ${order.order_number} | Tutar: ${order.total}`);
        // CSR'ı kendi sunucunuzda üretin, sonra yapılandırın
        const csr = require('fs').readFileSync('example.com.csr', 'utf8');
        await client.configureSsl(order.order_id, csr, 'dns');
        const status = await client.getSslStatus(order.order_id);
        console.log(status.validation_details);
    } else {
        console.error('Hata:', order.error);
    }

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

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

# ─── SSL Yapılandır (CSR kendi sunucunuzda üretilir) ───
curl -X POST "https://www.sslsertifikasi.com.tr/api/reseller/ssl/configure" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{ "order_id": 12345, "csr": "-----BEGIN CERTIFICATE REQUEST-----\n...", "dcv_method": "dns" }'

# ─── SSL Durumu / Doğrulama Talimatları ───
curl -X GET "https://www.sslsertifikasi.com.tr/api/reseller/ssl/12345" \
  -H "X-API-Key: YOUR_API_KEY"

# ─── Yeniden Düzenle (Reissue) ───
curl -X POST "https://www.sslsertifikasi.com.tr/api/reseller/ssl/reissue" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{ "order_id": 12345 }'

# ─── Sipariş İptal ───
curl -X PUT "https://www.sslsertifikasi.com.tr/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.sslsertifikasi.com.tr/api/reseller/invoices?status=paid" \
  -H "X-API-Key: YOUR_API_KEY"

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

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

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

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

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

WHMCS Modülü

WHMCS üzerinden SSL Sertifikası ürünlerini kolayca satabilirsiniz. Addon + Server modül yapısı ile tam entegrasyon.

WHMCS Addon + Server Module v5.11.0

Tam yönetim paneli, ürün oluşturucu, sipariş senkronizasyonu ve otomatik provizyon.

  • WHMCS 7.x / 8.x / 9.x uyumlu
  • Addon Panel: Ürün oluşturucu, sipariş yönetimi, istatistikler
  • Toplu ürün ekleme ve otomatik fiyatlandırma
  • Cron ile otomatik sipariş senkronizasyonu
  • Admin ve müşteri arayüzü
  • Sunucu ekleme gerektirmez - API gömülü gelir

Kurulum

  1. ZIP dosyasını indirin ve açın
  2. İki klasörü WHMCS dizininize kopyalayın:
    • modules/addons/datassl → Addon paneli
    • modules/servers/datassl → Provizyon modülü
  3. WHMCS Admin → Setup → Addon Modules → "DATASSL SSL Certificates" → Activate
  4. Access Control'dan admin rollerini seçin
  5. Addons → DATASSL → Ürün Oluşturucu ile ürünleri ekleyin
Sunucu ekleme, API anahtarı girişi gerektirmez. API bilgileri modül içinde gömülü olarak gelir.

WiseCP Modülü

WiseCP / Coremio üzerinden SSL Sertifikası ürünlerini satın. Ürün modülü ile sipariş, doğrulama ve teslim otomasyonu.

WiseCP Product Module v2.2.0

Sipariş oluşturma, CSR yapılandırma, DCV doğrulama ve sertifika teslimi tek modülde.

  • WiseCP / Coremio 3.x+ uyumlu
  • Müşteri panelinden CSR yapılandırma ve sertifika indirme
  • DCV doğrulama (E-posta / HTTP / DNS) desteği
  • SAN (çoklu domain) ve çoklu yıl desteği
  • Admin panelinden sipariş yönetimi ve senkronizasyon
  • Sunucu ekleme gerektirmez - API gömülü gelir

Kurulum

  1. ZIP dosyasını indirin ve açın
  2. DATASSL klasörünü WiseCP dizininize kopyalayın:
    • coremio/modules/Product/DATASSL → Ürün modülü
  3. WiseCP Admin → Ürünler / Hizmetler → yeni ürün eklerken DATASSL modülünü seçin
  4. Sunucu Ayarları → Bağlantı Testi ile modülü doğrulayın
  5. Ürünü kaydedin - sipariş geldiğinde otomatik provizyon başlar
Sunucu ekleme, API anahtarı girişi gerektirmez. API bilgileri modül içinde gömülü olarak gelir.