# Hizmet Yaşam Döngüsü

https://dev.wisecp.com/tr/hizmet-yasam-dongusu

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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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}'
```

```javascript
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();
```

```php
$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);
```

```php
$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 200

```json
{
  "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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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}'
```

```javascript
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();
```

```php
$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);
```

```php
$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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/reinstall' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
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();
```

```php
$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);
```

```php
// 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 200 422

```json
{
  "data": {
    "status": "reinstalled",
    "id": 506
  }
}
```

```json
{
  "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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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.

## İlgili Makaleler

- [Hizmet Uçları](https://dev.wisecp.com/tr/hizmet-uclari)
- [Yenileme ve İptal](https://dev.wisecp.com/tr/yenileme-ve-iptal)
- [Hizmet Ayarları ve Sunucu](https://dev.wisecp.com/tr/hizmet-ayarlari-ve-sunucu)
