Hizmet Yaşam Döngüsü
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
Hizmeti askıya alır ve sağlayıcıdaki hesabı da durdurur.
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
}{
"data": {
"status": "suspended",
"id": 506,
"applied_on_module": true
}
}Askıdan Çıkarma
Askıdaki hizmeti yeniden çalıştırır ve sağlayıcıdaki hesabı da açar.
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
Hizmeti iptal eder ve sağlayıcıdaki hesabı kapatır.
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
Sağlayıcıdaki hesabı siler ve sıfırdan kurar. Modülü olmayan hizmette çalışmaz.
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]);
}{
"data": {
"status": "reinstalled",
"id": 506
}
}{
"error": {
"code": "no_module",
"message": "Service has no module to reinstall."
}
}Hizmet Şifresini Değiştirme
Sağlayıcıdaki şifreyi değiştirir ve yeni şifreyi hizmet ayarlarında şifreli saklar.
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
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.
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.
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.
İ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.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.