# Modül Ayarları ve Çağrıları

https://dev.wisecp.com/tr/modul-ayarlari-ve-cagrilari

Tek bir modülün ayarlarını, sınamasını, metotlarını ve kayıtlarını kapsayan altı uç.

## Genel Bakış

Bu makale tek bir modülün **içine** uzanan uçları toplar: ayarlarını okumak ve yazmak, bağlantısını sınamak, kendi metotlarını çağırmak ve tuttuğu kayıtları görmek.

Ayar yazmanın **iki yolu** vardır ve aralarındaki fark önemlidir. Ayar ucu panelin kaydetme yolunu izler: modülün süzgeçleri, doğrulaması ve kancaları çalışır. Yapılandırma ucu ise dosyaya doğrudan yazar.

Sırlar sunucudan çıkmaz. Parola benzeri her değer maskeyle döner ve aynı maskeyi geri göndermek "bu alanı değiştirme" demektir.

## Referans

### Ham Yapılandırmayı Okuma

get/api/v1/admin/modules/{group}/{module}/config

`Modules/GetModuleConfig` admin

Modülün diskteki ayarlarını olduğu gibi döndürür.

Dönen alanlar data — 4

groupstringGrubun anahtarı.

keystringModülün anahtarı.

statusboolModül açık mı.

settingsobjectHam ayarlar. Sır benzeri anahtarların değeri maskelenir.

Hatalar 3

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/modules/mail/Mailjet/config' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/${group}/${key}/config`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
const masked = Object.entries(data.settings).filter(([, v]) => v === '**********');
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/' . $group . '/' . $key . '/config');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

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

```php
// Sirlar MASKELI gelir: bu cikti bir yedek DEGILDIR, baska kuruluma tasirsaniz anahtarlar gitmez.
$cfg = Api::Modules()->GetModuleConfig(['group' => $group, 'module' => $key])['data'];
```

### Ham Yapılandırmayı Yazma

put/api/v1/admin/modules/{group}/{module}/config

`Modules/SaveModuleConfig` admin doğrulama yok

Gönderdiğiniz anahtarları modülün ayar dosyasına birleştirir.

Gövde 2

settingsobjectBirleştirilecek anahtarlar. Maske değerini geri göndermek sırrı korur.

statusintModül durumu. Ürün ve dolandırıcılık gruplarında yazılır. Kapalı, kullanımdan kaldırılmış bir modülü açmak `module_deprecated` ile reddedilir.

Dönen alanlar data — 4

dataobjectYeniden okunan yapılandırma. Okuma ucuyla aynı şekildedir.

Hatalar 5

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

settings_required422Ne ayar ne durum gönderildi.

module_deprecated422Kapalı, kullanımdan kaldırılmış bir ürün ya da dolandırıcılık modülü açılmak istendi. Birlikte gönderilen ayarlar dahil hiçbir şey yazılmaz; açık olan böyle bir modül açık kalır ve kalıcı olarak kapatılabilir.

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/modules/mail/Mailjet/config' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"from_name":"Support"}}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/${group}/${key}/config`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ settings: { from_name: 'Support' } }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/' . $group . '/' . $key . '/config');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['settings' => ['from_name' => 'Support']]),
]);

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

```php
// Bu uc dosyaya DOGRUDAN yazar: modulun kendi dogrulamasi ve kancalari CALISMAZ.
// Gunluk kullanimda ayar ucunu secin; bu uc kurtarma ve gecis icindir.
Api::Modules()->SaveModuleConfig([
    'group' => $group, 'module' => $key, 'settings' => ['from_name' => 'Support'],
]);
```

### Ayarları Kaydetme

put/api/v1/admin/modules/{group}/{module}/settings

`Modules/UpdateModuleSettings` admin modül doğrular

Ayarları modülün kendi doğrulamasından geçirerek kaydeder.

Gövde 7

settingsobjectModülün yapılandırma alanları. Maske değerini geri göndermek sırrı korur.

statusintModül durumu. Ödeme ve dolandırıcılık gruplarında geçerlidir. Etkin olmayan, kullanımdan kaldırılmış bir ödeme ya da dolandırıcılık modülünü açmak `module_deprecated` ile reddedilir.

commission_ratestringBu yöntemle ödeyene eklenen oran. Ödemeye özgü. Sıfır ya da daha büyük olur: negatif oran `module_error` ile reddedilir.

force_convert_tointTutarın çevrileceği para birimi numarası. Ödemeye özgü.

accepted_countriesarraySadece bu ülkelere açık. Ödemeye özgü.

unaccepted_countriesarrayBu ülkelere kapalı. Ödemeye özgü.

change_subscription_feeintAbonelik değişiminde ücret alınsın mı. Ödemeye özgü.

Dönen alanlar data — 12

dataobjectModülün taze detayı. Katalog makalesindeki okuma ucuyla aynı şekildedir.

Hatalar 6

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

module_error422Modül ayarları reddetti. Mesaj modülden gelir.

module_deprecated422Etkin olmayan, kullanımdan kaldırılmış bir ödeme ya da dolandırıcılık modülü açılmak istendi. Hiçbir şey yazılmaz; `details.modules` onu adlandırır. Zaten etkin olan böyle bir modül normal kaydedilir ve kapatılabilir.

not_supported422Posta ya da kısa mesaj modülü; hiçbir şeye dokunulmaz. Ayarlarını yukarıdaki ham config ucuyla kaydedin; mesaj adresi verir.

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/modules/payment/Stripe/settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"api_key":"sk_live_123"},"commission_rate":"2.5"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/${group}/${key}/settings`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    settings: { api_key: 'sk_live_123' },
    commission_rate: '2.5',
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/' . $group . '/' . $key . '/settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['settings' => ['api_key' => $liveKey]]),
]);

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

```php
// Panelin kaydetme yolunun aynisi: modul filtreleri, dogrulamasi ve kancalari CALISIR.
Api::Modules()->UpdateModuleSettings([
    'group' => 'payment', 'module' => 'Stripe',
    'settings' => ['api_key' => $liveKey], 'commission_rate' => '2.5',
]);
```

### Bağlantıyı Sınama

post/api/v1/admin/modules/{group}/{module}/test-connection

`Modules/TestModuleConnection` admin

Modülün karşı servise ulaşıp ulaşmadığını dener.

Gövde 1

settingsobjectSınamada kullanılacak ayarlar. Gönderilmeyen alanlar kayıtlı yapılandırmadan gelir.

Dönen alanlar data — 3

groupstringGrubun anahtarı.

keystringModülün anahtarı.

connectedboolBağlantı kuruldu mu.

Hatalar 4

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

module_error422Sınama başarısız ya da modül sınamayı desteklemiyor.

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/modules/payment/Stripe/test-connection' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"api_key":"sk_test_123"}}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/${group}/${key}/test-connection`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ settings: { api_key: candidate } }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/' . $group . '/' . $key . '/test-connection');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['settings' => ['api_key' => $candidate]]),
]);

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

```php
// Sinama KAYDETMEZ: yeni anahtari once burada deneyin, gecerse ayar ucuyla yazin.
$out = Api::Modules()->TestModuleConnection([
    'group' => $group, 'module' => $key, 'settings' => ['api_key' => $candidate],
])['data'];

if ($out['connected']) Api::Modules()->UpdateModuleSettings([
    'group' => $group, 'module' => $key, 'settings' => ['api_key' => $candidate],
]);
```

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

post/api/v1/admin/modules/{group}/{module}/methods/{method}

`Modules/RunModuleMethod` admin modüle özgü

Modülün kendi panel metodunu çağırır ve sonucunu döndürür.

Gövde —

*objectModüle özgü serbest gövde. Metoda olduğu gibi aktarılır.

Dönen alanlar data — 4

groupstringGrubun anahtarı.

keystringModülün anahtarı.

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

resultstringMetodun sonucu. Metin ya da nesne olabilir; panelde gösterilen işaretleme de gelebilir.

Hatalar 5

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

method_required422Metot adı boş.

method_error422Metot bulunamadı ya da hata döndürdü. Posta ya da kısa mesaj modülünün `save` çağrısı, aktif personelin giriş kodunu aldığı kanalı kapatacaksa geri alınır ve bu kodla o personeli sayarak döner. Etkin olmayan, kullanımdan kaldırılmış bir kısa mesaj modülü ya da kapalı, kullanımdan kaldırılmış bir dolandırıcılık modülü de bu yoldan açılamaz; hiçbir şey yazılmaz.

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/modules/product/SampleProduct/methods/crud-list' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"page":1}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/${group}/${key}/methods/${method}`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ page: 1 }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/' . $group . '/' . $key . '/methods/' . $method);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['page' => 1]),
]);

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

```php
// Sonuc PANELIN kendi ciktisi olabilir; bicimi modul belirler, API sozlesmesi degil.
$out = Api::Modules()->RunModuleMethod([
    'group' => $group, 'module' => $key, 'method' => $method, 'page' => 1,
])['data'];

$isMarkup = is_string($out['result']);
```

### Dolandırıcılık Kayıtlarını Okuma

get/api/v1/admin/modules/{group}/{module}/records

`Modules/GetFraudRecords` admin dolandırıcılığa özgü

Bir dolandırıcılık modülünün işaretlediği kayıtları döndürür.

Sorgu 3

pageintKaçıncı sayfa.

limitintSayfa başına kayıt. En çok 100.

searchstringKayıtlarda arar.

Dönen alanlar data[] — 7 + meta — 4

idintKaydın numarası.

user_idintİşaretlenen müşterinin numarası.

user_full_namestringMüşterinin adı soyadı.

user_company_namestringMüşterinin şirket adı.

messagestringModülün yazdığı gerekçe.

ipstringİşlemin geldiği adres.

created_atstringKaydın düşüldüğü an.

countintDönen kayıt sayısı. Meta altında döner.

totalintToplam kayıt.

pageintBulunulan sayfa.

limitintSayfa boyutu.

Hatalar 4

unknown_group404Böyle bir modül grubu yok.

module_not_found404Modül bulunamadı.

not_supported422Dolandırıcılık dışı grup ya da kayıt tutmayan modül.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/modules/fraud/MaxMind/records?limit=50' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/modules/fraud/${key}/records`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data, meta } = await res.json();
const flagged = new Set(data.map((r) => r.user_id));
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/modules/fraud/' . $key . '/records');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

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

```php
// Kayit tutmak modulun secimidir: yetenek listesinde gormeden cagirirsaniz 422 alirsiniz.
$m = Api::Modules()->GetModule(['group' => 'fraud', 'module' => $key])['data'];
if ($m['capabilities']['has_records'])
    $rows = Api::Modules()->GetFraudRecords(['group' => 'fraud', 'module' => $key])['data'];
```

## Tuzaklar

> **Yapılandırma ucu modülün doğrulamasını atlar**
> 
> Yapılandırma ucu ayarları **doğrudan dosyaya** yazar: modülün alan süzgeçleri, denetimleri ve kaydetme kancaları çalışmaz. Geçersiz bir değer hata vermeden yazılır ve ilk gerçek kullanımda patlar. Günlük iş için ayar ucunu seçin; yapılandırma ucu kurtarma ve geçiş içindir.

> **Maskelenmiş sır bir yedek değildir**
> 
> Okuma uçları sır benzeri değerleri maskeyle döndürür, gerçek değeri hiç vermez. Bir modülün yapılandırmasını dışa aktarıp **başka bir kuruluma** taşırsanız anahtarlar taşınmaz; hedefte alanlar maskeyle dolar ve modül çalışmaz. Sırları ayrı taşıyın.

> **Sınama hiçbir şey kaydetmez**
> 
> Bağlantı sınaması gönderdiğiniz ayarları o çağrıyla sınırlı kullanır; başarılı olsa bile **hiçbir şey yazmaz**. Yeni bir anahtarı sınayıp kaydetmeyi unutmak, çalıştığını gördüğünüz yapılandırmanın aslında hiç var olmadığı anlamına gelir. Sınamadan sonra ayar ucuyla yazın.

> **Metot sonucunun biçimi sözleşme değildir**
> 
> Metot çalıştırma ucu modülün panel metodunu çağırır ve sonucu olduğu gibi verir. Bu sonuç bir nesne olabileceği gibi **panelin göstereceği işaretleme** de olabilir. Biçimi modül belirler ve sürümle değişebilir; ayrıştırmaya dayalı bir tümleştirme kurmayın. Kayıt listeleyen bir metot (registrar `domains` ya da `tlds`, fraud `records`) panelin tablo yanıtını verir: `total` ve `body` içinde işlenmiş satırlar; sayfalama ve arama gövdede ya da sorgu dizesinde gönderilen `page`, `perPage` ve `search` alanlarıyla çalışır.

> **Kayıtlar her dolandırıcılık modülünde bulunmaz**
> 
> Kayıt ucu dolandırıcılık grubu dışında `not_supported` döner, ve o grupta bile her modül kayıt tutmaz. Çağırmadan önce modül detayındaki yetenek listesine bakın; orada görünmüyorsa uç boş değil **hata** döndürür.

## İlgili Makaleler

- [Modül Kataloğu](https://dev.wisecp.com/tr/modul-katalogu)
- [Başvuru Listeleri](https://dev.wisecp.com/tr/basvuru-listeleri)
