# Hizmetin İçine Erişim

https://dev.wisecp.com/tr/hizmetin-icine-erisim

Hizmetin arkasındaki panele ulaşan yedi uç: özet, araçlar, metotlar, giriş ve parola.

## Genel Bakış

Bir hizmetin arkasında çoğu zaman bir **panel** vardır: barındırma paneli, sanallaştırma arayüzü ya da bir yazılım kurulumu. Bu yedi uç o panele ulaşır.

Hepsi **canlı çağrıdır**: WISECP kendi kayıtlarını değil, panelin o anki durumunu döndürür. Panel yavaşsa yanıt yavaşlar, panel kapalıysa uç hata verir.

Müşteriye açılan alan yönetim tarafına göre **dar tutulmuştur**. Kurma, askıya alma ve sonlandırma gibi işler buradan hiç erişilemez.

## Referans

### Panel Özetini Okuma

get/api/v1/client/services/{id}/dashboard

`Services/GetServiceDashboard` modüle canlı sorar

Hizmetin arkasındaki panelin özetini ve yeteneklerini döndürür.

Dönen alanlar data — 9

modulestringPanel modülünün adı.

panel_namestringPanelin görünen adı.

sso_availableboolTek oturum açma çalışır mı. Erişim kısıtlaması açıkken kapanır.

can_change_passwordboolPanel parolası bu uçlardan değiştirilebilir mi.

has_toolsboolModül bir araç arayüzü sunuyor mu.

has_managementboolMüşteri alanı bu hizmet için Yönetim sekmesi açar mı. Yalnız tek oturum açma sunan panelde false döner.

methodsarrayMüşterinin çağırabileceği modül metotları. Metot çalıştırma ucu yalnız bu listedekileri kabul eder.

quick_actionsarrayÖzet ekranı kısayolları. Her biri anahtar, etiket ve eylem olup olmadığını taşır.

overviewobject overviewPanelin bildirdiği durum.

gaugesarraySınırlı kaynaklar. Kullanılan, toplam ve birim taşır; toplam sıfır ya da altındaysa sınırsız demektir.

resourcesarrayModülün bildirdiği sayaç ve değerler.

accountarrayCanlı panel hesap bilgileri. Erişim kısıtlaması açıkken giriş bilgileri düşer.

Hatalar 4

not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.

not_actionable422Hizmet etkin durumda değil.

module_unavailable422Modül örneği kurulamadı. Panel şu an erişilemez.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/services/622/dashboard' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/dashboard`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (data.sso_available) showOpenPanelButton();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/dashboard');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Bu cagri PANELE CANLI gider: panel yavassa yanit yavaslar, ekranda onbellek kullanin.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];
$can = $d['methods'];
```

### Araçları Listeleme

get/api/v1/client/services/{id}/tools

`Services/GetServiceTools` modüle canlı sorar

Hizmet üzerinde kullanılabilecek panel araçlarını döndürür.

Dönen alanlar data[] — 4

keystringAracın anahtarı. Veri ve eylem uçlarına bu değer verilir.

groupstringPanelin gruplaması.

labelstringGörünen adı.

capabilitiesarrayAracın desteklediği eylemler. Oluşturma, düzenleme, silme gibi.

Hatalar 3

not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.

tools_not_supported422Modülün araç arayüzü yok.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/services/622/tools' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const byGroup = Object.groupBy(data, (t) => t.group);
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Musteri listesi YONETIM listesinden DARDIR: yalniz musteri alanina acilan araclar gelir.
$tools = Kernel::internal('client:Services/GetServiceTools',
    ['owner_id' => $uid, 'id' => $id])['data'];
$keys = array_column($tools, 'key');
```

### Araç Verisini Okuma

get/api/v1/client/services/{id}/tools/{tool}

`Services/GetServiceToolData` modüle canlı sorar

Bir aracın listelediği veriyi panelden çeker.

Sorgu 1

actionstringOkuma eylemi. Verilmezse aracın varsayılan listesi alınır.

Dönen alanlar data

dataobjectAracın döndürdüğü veri. Şekli araca ve modüle göre değişir; sabit bir sözleşme yoktur.

Hatalar 5

not_found404Araç bilinmiyor ya da hizmet bulunamadı.

tools_not_supported422Modülün araç arayüzü yok.

tool_rejected422Bir kanca çağrıyı reddetti.

tool_data_failed500Panel çağrısı başarısız oldu.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/services/622/tools/databases' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools/${tool}`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools/' . $tool);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Donen sekil MODULE aittir, API sozlesmesi degil: sunucu paneli degisirse alanlar da degisir.
$rows = Kernel::internal('client:Services/GetServiceToolData',
    ['owner_id' => $uid, 'id' => $id, 'tool' => $tool])['data'];
```

### Araç Eylemi Çalıştırma

post/api/v1/client/services/{id}/tools/{tool}/{action}

`Services/RunServiceToolAction` sunucuda değişiklik

Bir araç üzerinde oluşturma, düzenleme ya da silme çalıştırır. DNS kaydı düzenlemesi (`dns-zone-editor/edit`) yalnız gönderdiğinizi değiştirir: gönderilmeyen ad, TTL ya da öncelik kaydın mevcut değerini korur.

Gövde —

*objectAraca özgü serbest gövde. Alanları modülün beklediği şekildedir.

Dönen alanlar data

dataobjectModülün eylem sonucu.

Hatalar 5

not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.

tools_not_supported422Modülün araç arayüzü yok.

tool_rejected422Bir kanca çağrıyı reddetti.

tool_action_failed500Panel çağrısı hata fırlattı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/tools/databases/create' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"shop"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools/${tool}/${action}`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload),
});

const { data } = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools/' . $tool . '/' . $action);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Bu cagri SUNUCUDA gercek degisiklik yapar ve geri alinamaz: silme eylemlerini onay arkasina alin.
$out = Kernel::internal('client:Services/RunServiceToolAction',
    ['owner_id' => $uid, 'id' => $id, 'tool' => $tool, 'action' => 'create'] + $payload);
```

### Modül Metodu Çalıştırma

post/api/v1/client/services/{id}/module-method

`Services/UseServiceModuleMethod` beyanlı metotlar

Modülün müşteriye açtığı bir metodu çalıştırır.

Gövde 1

methodstringreqÇalıştırılacak metot. Panel özetindeki metot listesinden alınır.

Dönen alanlar data — 4

methodstringÇalıştırılan metot.

redirect_urlstringModülün ürettiği adres. İndirme ve yönlendirme akışlarında dolar.

resultobjectMetodun dönüş değeri.

outputstringMetot dönüş yerine yazdırdıysa yakalanan çıktı.

Hatalar 6

not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.

method_required422Metot adı gönderilmemiş.

invalid_method422Metot müşteriye açık beyan edilmemiş.

module_unavailable422Modül örneği kurulamadı.

tool_rejected422Bir kanca çağrıyı reddetti.

module_method_failed500Modül metodu hata fırlattı.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/module-method' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"method":"backup_download"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/module-method`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method }),
});

const { data } = await res.json();
if (data.redirect_url) window.location = data.redirect_url;
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/module-method');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['method' => $method]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// YALNIZ beyanli metotlar cagrilir: kurma, askiya alma ve sonlandirma buradan asla erisilemez.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];

if (in_array($method, $d['methods'], true))
    Kernel::internal('client:Services/UseServiceModuleMethod',
        ['owner_id' => $uid, 'id' => $id, 'method' => $method]);
```

### Panele Tek Oturum Açma

post/api/v1/client/services/{id}/sso

`Services/GetServiceSso` kısa ömürlü adres

Panele parolasız giriş için tek kullanımlık bir adres üretir.

Gövde —

——Gövde gerekmez, boş gönderin. Panel hesabı hizmet kaydından çözülür.

Dönen alanlar data — 1

urlstringPanele açılan adres. Kısa ömürlüdür ve saklanmaya uygun değildir.

Hatalar 5

not_found404Hizmet bulunamadı, modülsüz, etkin değil ya da erişim kısıtlanmış.

sso_not_supported422Modülde tek oturum açma yok.

tool_rejected422Bir kanca çağrıyı reddetti.

sso_failed500Modül bir adres döndürmedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/sso' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/sso`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
window.open(data.url, '_blank');
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/sso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Adres KISA OMURLUDUR ve tek kullanimliktir: onbelleklemeyin, her acilista yeniden uretin.
$sso = Kernel::internal('client:Services/GetServiceSso',
    ['owner_id' => $uid, 'id' => $id])['data'];
header('Location: ' . $sso['url']);
```

### Panel Parolasını Değiştirme

post/api/v1/client/services/{id}/password

`Services/ChangeServicePassword` barındırma ve sunucu

Hizmetin panel parolasını değiştirir.

Gövde 1

passwordstringreqYeni panel parolası. Operatörün asgari uzunluğunu karşılamalıdır.

Dönen alanlar data

dataobjectDeğişimin sonucu.

Hatalar 5

not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.

password_too_short422Parola asgari uzunluğun altında. Asgari değer yanıtın ayrıntısında gelir.

password_not_supported422Hizmet türü uygun değil, erişim kısıtlanmış ya da modülde bu yetenek yok.

password_change_failed422Panel değişikliği reddetti.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/password' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"password":"a-long-new-secret"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/password`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ password }),
});

if (res.status === 422) showRule(await res.json());
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/password');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['password' => $new]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Panel parolasi HESAP parolasi degildir: buradaki degisim musterinin giris bilgilerine dokunmaz.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];

if ($d['can_change_password'])
    Kernel::internal('client:Services/ChangeServicePassword',
        ['owner_id' => $uid, 'id' => $id, 'password' => $new]);
```

## Tuzaklar

> **Bu uçlar panele canlı gider**
> 
> Özet, araçlar ve araç verisi WISECP veritabanından değil **panelin kendisinden** gelir. Panel yavaşladığında yanıt süresi uzar, panel erişilemez olduğunda uç hata döndürür. Bu uçları bir listeleme ekranında satır başına çağırmayın; kullanıcı gerçekten istediğinde çağırın.

> **Yalnız beyan edilmiş metotlar çağrılabilir**
> 
> Metot çalıştırma ucu, modülün **müşteriye açık** diye beyan ettiği metotları kabul eder. Yönetim tarafındaki genişlik burada yoktur: kurma, askıya alma ve sonlandırma metotlarına bu uçtan asla ulaşılamaz. Listeyi panel özetinden okuyun.

> **Araç verisinin şekli bir sözleşme değildir**
> 
> Araç uçlarının döndürdüğü yapı **modülün kendi çıktısıdır** ve sunucu paneli değiştiğinde değişebilir. Alan adlarına sıkı bağlanan bir arayüz bir modül güncellemesiyle kırılır. Yetenekleri araç listesinden okuyup buna göre çizin.

> **Erişim kısıtlaması iki ucu birden kapatır**
> 
> Operatör bir ürün için erişim kısıtlamasını açtığında hem tek oturum açma hem panel parolası değişimi **kapanır**, ayrıca özet ekranındaki giriş bilgileri düşer. Araçlar ise çalışmaya devam eder. Bunu bir hata sanmayın; özetteki iki bayrağı okuyun.

> **Tek oturum adresi saklanmaz**
> 
> Tek oturum açma adresi **kısa ömürlü ve tek kullanımlıktır**. Bir yere kaydedip sonra açmak çalışmaz, üstelik o adres o anda panele giriş yetkisi taşır. Her açılışta yeniden üretin ve hiçbir günlüğe yazmayın.

> **Panel parolası hesap parolası değildir**
> 
> Bu uçtan değiştirilen parola **sunucudaki panelin** parolasıdır; müşterinin WISECP giriş bilgileri etkilenmez. Yetenek yalnız barındırma ve sunucu türündeki hizmetlerde vardır ve modülün desteklemesi gerekir.

## İlgili Makaleler

- [Sahip Olunan Hizmetler](https://dev.wisecp.com/tr/sahip-olunan-hizmetler)
- [Destek İsteme](https://dev.wisecp.com/tr/destek-isteme)
