Hizmet Yaşam Döngüsü

1.7k görüntülenme Markdown

Hizmeti askıya alan, açan, iptal eden, yeniden kuran ve şifresini değiştiren beş uç.

Genel Bakış

Bu beş uç hizmetin durumunu değiştirir. Veri alanlarını düzenlemekten farklı çalışırlar: her biri sağlayıcıya iş yaptırır, yani kayıt ile sunucudaki hesap birlikte hareket eder.

apply_on_module bayrağını vermezseniz makul olan varsayılır: modülü olan hizmette işlem sağlayıcıya iner, olmayanda yalnız kayıt değişir. Yeniden kurma ve şifre değiştirme modülsüz çalışmaz, çünkü yapacakları işin tamamı sağlayıcıda geçer.

Her uç önce hizmetin mevcut durumuna bakar. Askıya alma active, askıdan çıkarma suspended durumundaki hizmette çalışır. Yeniden kurma ve şifre değiştirme aktif ya da askıdaki hizmette çalışır. İptal; waiting, inprocess, active, suspended, expired ve completed durumlarını kabul eder. Sunucusu sonlandırılmış hizmeti beş uç da reddeder. Uygun olmayan durumda modül çağrılmadan invalid_service_state döner.

Modül askıya almayı, askıdan çıkarmayı, iptali, yeniden kurulumu ya da parola değişikliğini reddederse yanıt, modülün kendi mesajıyla module_error (422) olur. Hizmetin durumu değişmez.

Referans

Hizmeti Askıya Alma

post/api/v1/admin/services/{id}/suspend
Services/SuspendService admin modüle iner

Hizmeti askıya alır ve sağlayıcıdaki hesabı da durdurur.

Gövde 3
reasonstringAskıya alma nedeni. Kayda geçer ve bildirim gönderilirse müşteriye ulaşır.
notifyboolMüşteriye bildirim gönderir.
apply_on_moduleboolİşlemi sağlayıcıya da uygular. Vermezseniz modülü olan hizmette açık, olmayanda kapalı sayılır.
Dönen alanlar data — 3
statusstringİşlem sonrası durum.
idintHizmet kimliği.
applied_on_moduleboolSağlayıcıya uygulandı mı. Yanlış dönerse WISECP kaydı değişmiştir ama sunucudaki hesap el değmemiştir.
Hatalar 4
not_found404Hizmet bulunamadı.
invalid_service_state422Mevcut durum bu işleme uygun değil ya da hizmet sunucuda sonlandırılmış.
module_error422Modül işlemi reddetti. Mesaj modülün kendi metnidir, örneğin sağlayıcının hatası. Hizmetin durumu değişmez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/suspend' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"reason":"Awaiting payment","notify":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/suspend', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ reason: 'Awaiting payment', notify: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/suspend');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'reason' => 'Awaiting payment',
        'notify' => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Services()->SuspendService([
    'id'     => 506,
    'reason' => 'Awaiting payment',
    'notify' => true,
]);

// Durum degisti ama module inmediyse sunucudaki hesap CALISMAYA devam eder.
if (!($response['data']['applied_on_module'] ?? false)) {
    // elle mudahale gerekir
}
Yanıt
{
  "data": {
    "status": "suspended",
    "id": 506,
    "applied_on_module": true
  }
}

Askıdan Çıkarma

post/api/v1/admin/services/{id}/unsuspend
Services/UnsuspendService admin modüle iner

Askıdaki hizmeti yeniden çalıştırır ve sağlayıcıdaki hesabı da açar.

Gövde 2
notifyboolMüşteriye bildirim gönderir.
apply_on_moduleboolİşlemi sağlayıcıya da uygular. Vermezseniz modülü olan hizmette açık, olmayanda kapalı sayılır.
Dönen alanlar data — 3
statusstringİşlem sonrası durum.
idintHizmet kimliği.
applied_on_moduleboolSağlayıcıya uygulandı mı. Yanlış dönerse WISECP kaydı değişmiştir ama sunucudaki hesap el değmemiştir.
Hatalar 4
not_found404Hizmet bulunamadı.
invalid_service_state422Mevcut durum bu işleme uygun değil ya da hizmet sunucuda sonlandırılmış.
module_error422Modül işlemi reddetti. Mesaj modülün kendi metnidir, örneğin sağlayıcının hatası. Hizmetin durumu değişmez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/unsuspend' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"notify":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/unsuspend', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ notify: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/unsuspend');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['notify' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Services()->UnsuspendService(['id' => 506, 'notify' => true]);

Hizmeti İptal Etme

post/api/v1/admin/services/{id}/cancel
Services/CancelService admin geri alınamaz

Hizmeti iptal eder ve sağlayıcıdaki hesabı kapatır.

Gövde 3
reasonstringİptal nedeni.
notifyboolMüşteriye bildirim gönderir.
apply_on_moduleboolİşlemi sağlayıcıya da uygular. Vermezseniz modülü olan hizmette açık, olmayanda kapalı sayılır.
Dönen alanlar data — 3
statusstringİşlem sonrası durum.
idintHizmet kimliği.
applied_on_moduleboolSağlayıcıya uygulandı mı. Yanlış dönerse WISECP kaydı değişmiştir ama sunucudaki hesap el değmemiştir.
Hatalar 4
not_found404Hizmet bulunamadı.
invalid_service_state422Mevcut durum bu işleme uygun değil ya da hizmet sunucuda sonlandırılmış.
module_error422Modül işlemi reddetti. Mesaj modülün kendi metnidir, örneğin sağlayıcının hatası. Hizmetin durumu değişmez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/cancel' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"reason":"Customer request","notify":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/cancel', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ reason: 'Customer request', notify: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/cancel');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'reason' => 'Customer request',
        'notify' => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Panel bu islemde yonetici sifresi ister; API'de anahtarin kapsami yeterlidir.
$response = Api::Services()->CancelService([
    'id'     => 506,
    'reason' => 'Customer request',
]);

Hizmeti Yeniden Kurma

post/api/v1/admin/services/{id}/reinstall
Services/ReinstallService admin veri gider

Sağlayıcıdaki hesabı siler ve sıfırdan kurar. Modülü olmayan hizmette çalışmaz.

Gövde —
——Gövde gerekmez, boş gönderin. Modül hesabı saklı hizmet kaydından yeniden kurar; çağrıdan hiçbir şey ezilemez.
Dönen alanlar data — 2
statusstringİşlem sonucu.
idintHizmet kimliği.
Hatalar 5
not_found404Hizmet bulunamadı.
invalid_service_state422Mevcut durum bu işleme uygun değil ya da hizmet sunucuda sonlandırılmış.
no_module422Hizmete bağlı modül yok.
module_error422Modül işlemi reddetti. Mesaj modülün kendi metnidir, örneğin sağlayıcının hatası.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/reinstall' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/reinstall', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/reinstall');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Once yetenegi okuyun: modulsuz hizmette bu uc 'no_module' ile doner.
$service = Api::Services()->GetService(['id' => 506])['data'];

if ($service['capabilities']['can_reinstall'] ?? false) {
    Api::Services()->ReinstallService(['id' => 506]);
}
Yanıt
{
  "data": {
    "status": "reinstalled",
    "id": 506
  }
}
{
  "error": {
    "code": "no_module",
    "message": "Service has no module to reinstall."
  }
}

Hizmet Şifresini Değiştirme

put/api/v1/admin/services/{id}/password
Services/SetServicePassword admin modül gerekir

Sağlayıcıdaki şifreyi değiştirir ve yeni şifreyi hizmet ayarlarında şifreli saklar.

Gövde 2
passwordstringzorunluYeni şifre.
notifyboolYeni giriş bilgilerini müşteriye gönderir. Hizmet açılış şablonu kullanılır.
Dönen alanlar data — 2
statusstringİşlem sonucu.
idintHizmet kimliği.
Hatalar 6
not_found404Hizmet bulunamadı.
invalid_service_state422Mevcut durum bu işleme uygun değil ya da hizmet sunucuda sonlandırılmış.
no_module422Hizmete bağlı modül yok.
password_required422Şifre boş.
module_error422Modül işlemi reddetti. Mesaj modülün kendi metnidir, örneğin sağlayıcının hatası.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/services/506/password' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"password":"S3cretP@ss!","notify":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/password', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ password: newPassword, notify: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/password');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'password' => $newPassword,
        'notify'   => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Sifre once SAGLAYICIDA degisir, sonra kayda yazilir; modul duserse ikisi de degismez.
$response = Api::Services()->SetServicePassword([
    'id'       => 506,
    'password' => $newPassword,
    'notify'   => true,
]);

Tuzaklar

Durum değişti ama sunucuya inmemiş olabilir

Askıya alma, açma ve iptal 200 döndüğü hâlde sağlayıcıya ulaşmamış olabilir; bunu yanıttaki applied_on_module söyler. Yanlış dönüyorsa WISECP kaydı değişmiş ama hesap sunucuda çalışmaya devam ediyor demektir. Yalnız durum koduna bakan bir istemci bunu göremez.

Yeniden kurma hesabı sıfırlar

Bu uç hesabı onarmaz: sağlayıcıdaki hesabı siler ve yerine yenisini kurar. İçindeki her şey gider. Bunu bir sorun giderme adımı sanıp çalıştırmak, müşterinin verisini kaybetmenin en kısa yoludur; öncesinde yedek alındığından emin olun.

Şifre önce sağlayıcıda değişir

Yeni şifre önce sağlayıcıya yazılır, sonra hizmet ayarlarında şifreli saklanır. Modül reddederse ikisi de değişmez ve modülün kendi mesajıyla module_error (422) alırsınız; yani kayıtta duran şifre ile sunucudaki şifrenin ayrışması beklenmez. Yine de yeni şifreyi kendi tarafınızda saklamayın: kayıttan geri okunamaz.

Panel şifre ister, API kapsam

İptal işlemi panelde yönetici şifresi ister. API'de böyle bir ikinci adım yoktur: anahtarın kapsamı yeterlidir. Bu ucu açtığınız anahtarın kimlerde olduğunu bilerek verin.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.