# Site Ayarları

https://dev.wisecp.com/tr/site-ayarlari

Firma bilgilerini, site sistemlerini ve arama motoru bilgilerini yöneten altı uç.

## Genel Bakış

Bu altı uç kurulumun **kendisini** anlatan ayarları tutar: firmanın kim olduğu, nasıl ulaşılacağı, sitede hangi sistemlerin açık olduğu ve arama motorlarına ne söylendiği.

Üçü de aynı desende çalışır: bir okuma ucu bütün ayarları verir, bir yazma ucu gönderdiğiniz alanları uygular ve gerisine dokunmaz. Ama **üç yerde şekil değişir** ve bunlar bu makalenin tuzakları.

## Referans

### Temel Ayarları Getirme

get/api/v1/admin/settings/basic

`Settings/GetBasicSettings` admin dil başına firma

Firma bilgilerini, iletişim kanallarını ve iletişim formu ayarlarını döndürür.

Dönen alanlar data — 8

companyobject 3 alanDil koduna göre firma bilgileri.

company_namestringFirma adı.

addressstringFirma adresi.

informationsstringEk bilgi metni.

email_addressesstring[]İletişim e-posta adresleri. Liste bütün olarak yazılır.

phone_numbersstring[]İletişim telefon numaraları. Liste bütün olarak yazılır.

social_linksobject[] 3 alanSosyal medya bağlantıları. Liste bütün olarak yazılır.

iconstringSimgenin sınıfı.

namestringBağlantının adı.

urlstringBağlantının adresi.

map_embed_codestringİletişim sayfasındaki haritanın gömme kodu.

contact_formintİletişim formunun açık olup olmadığı.

contact_form_mandatory_phoneintFormda telefonun zorunlu olup olmadığı.

contact_mapintHaritanın gösterilip gösterilmediği.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/settings/basic' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/settings/basic', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

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

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

```php
// Firma bilgisi DIL BASINA tutulur: her dil kendi adini ve adresini tasir.
$basic = Api::Settings()->GetBasicSettings()['data'];
$name  = $basic['company']['en']['company_name'];
```

Yanıt 200

```json
{
  "data": {
    "company": {
      "en": {
        "company_name": "Example Inc.",
        "address": "123 Market Street",
        "informations": ""
      }
    },
    "email_addresses": ["support@example.com"],
    "phone_numbers": ["+1 555 0100"],
    "social_links": [
      { "icon": "fa-x", "name": "X", "url": "https://x.com/example" }
    ],
    "map_embed_code": "",
    "contact_form": 1,
    "contact_form_mandatory_phone": 0,
    "contact_map": 1
  }
}
```

### Temel Ayarları Yazma

put/api/v1/admin/settings/basic

`Settings/UpdateBasicSettings` admin listeler bütün yazılır

Gönderdiğiniz alanları uygular. Liste alanları birleştirilmez, değiştirilir.

Gövde 8

companyobject 3 alanDil koduna göre firma bilgileri.

company_namestringFirma adı.

addressstringFirma adresi.

informationsstringEk bilgi metni.

email_addressesstring[]İletişim e-posta adresleri. Liste bütün olarak yazılır.

phone_numbersstring[]İletişim telefon numaraları. Liste bütün olarak yazılır.

social_linksobject[] 3 alanSosyal medya bağlantıları. Liste bütün olarak yazılır.

iconstringSimgenin sınıfı.

namestringBağlantının adı.

urlstringBağlantının adresi.

map_embed_codestringİletişim sayfasındaki haritanın gömme kodu.

contact_formintİletişim formunun açık olup olmadığı.

contact_form_mandatory_phoneintFormda telefonun zorunlu olup olmadığı.

contact_mapintHaritanın gösterilip gösterilmediği.

Dönen alanlar data — 8

dataobjectGüncel ayarlar. Getirme ucuyla aynı şekildedir.

Hatalar 3

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

invalid_<field>422Bir alan tek değer yerine dizi ya da nesne olarak gönderildi. Hiçbir şey yazılmaz.

settings_write_failed500Bir ayar dosyası yazılamadı (ör. disk dolu). O dosya önceki içeriğini korur; sebebi giderip isteği yeniden gönderin.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/settings/basic' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"company":{"en":{"company_name":"Example Inc.","address":"123 Market Street","informations":""}},"email_addresses":["support@example.com"],"contact_form":1}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/basic', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    company: {
      en: {
        company_name: 'Example Inc.',
        address: '123 Market Street',
        informations: '',
      },
    },
    contact_form: 1,
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/basic');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'company'      => ['en' => ['company_name' => 'Example Inc.']],
        'contact_form' => 1,
    ]),
]);

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

```php
// Tek e-posta EKLEMEK icin mevcut listeyi de gonderin: liste butun olarak yazilir.
$basic  = Api::Settings()->GetBasicSettings()['data'];
$emails = $basic['email_addresses'];

$emails[] = 'sales@example.com';

Api::Settings()->UpdateBasicSettings(['email_addresses' => $emails]);
```

### Gelişmiş Ayarları Getirme

get/api/v1/admin/settings/advanced

`Settings/GetAdvancedSettings` admin

Sepet, sipariş, destek, sınırlar, önbellek ve gömülü kodların ayarlarını döndürür.

Dönen alanlar data — 26

basket_systemintSepet sisteminin açık olup olmadığı.

visitors_will_see_basketintGiriş yapmamış ziyaretçilerin sepeti görüp görmediği.

order_renewal_typestringSipariş yenilemesinin nasıl yürüdüğü.

order_number_sequentialintYeni siparişin numarasının kendi sipariş ID'si (1) mi, 5 haneli rastgele bir numara (0) mı olduğu. Yeni kurulumlar 1 ile başlar.

ticket_systemintDestek talebi sisteminin açık olup olmadığı.

kbase_systemintBilgi bankasının açık olup olmadığı.

use_couponintKupon kullanımının açık olup olmadığı.

clear_end_two_zero_moneyintFiyatlarda sondaki sıfırların gizlenip gizlenmediği.

ctoc_service_transferintMüşteriler arası hizmet devrinin açık olup olmadığı.

voice_notificationintSesli bildirimin açık olup olmadığı.

accessibilityintErişilebilirlik yardımlarının açık olup olmadığı.

pagination_ranksintKullanımdan kalktı, etkisi yok: bu değeri okuyan bir yüzey yok. Mevcut entegrasyonlar bozulmasın diye hâlâ kabul edilir.

redirect_httpsintŞifreli adrese yönlendirmenin açık olup olmadığı.

redirect_wwwintZiyaretçinin 301 yönlendirmesiyle gönderildiği ana adres: `0` yönlendirme yok, `1` www ekler, `2` www kaldırır. Başka bir değer `invalid_redirect_www` ile reddedilir.

cookie_policyobjectÇerez politikası: durumu ve bağlı sayfası.

pg_activationobjectÖdeme yöntemlerinin açıklık durumu. Yalnız var olan anahtarlar güncellenir.

limitsobjectSistem sınırları; anahtardan sayıya eşleme.

product_fields_extensionsstringÜrün alanlarında izinli dosya uzantıları.

attachment_extensionsstringEklerde izinli dosya uzantıları.

product_fields_max_file_sizeintÜrün alanı dosyası için en büyük boyut. Okurken bayt, yazarken megabayt.

attachment_max_file_sizeintEk dosyası için en büyük boyut. Okurken bayt, yazarken megabayt.

cacheintÖnbelleğin açık olup olmadığı.

analytics_codestringAnalitik kodu.

support_codestringDestek aracının kodu.

webmaster_tools_codestringArama motoru doğrulama kodu.

external_embed_codestringSayfalara eklenecek harici kod.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/settings/advanced' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/settings/advanced', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

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

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

```php
// Dosya boyutlari BAYT olarak doner ama megabayt olarak yazilir; birimi cevirin.
$adv = Api::Settings()->GetAdvancedSettings()['data'];
$mb  = (int) round($adv['attachment_max_file_size'] / 1048576);
```

### Gelişmiş Ayarları Yazma

put/api/v1/admin/settings/advanced

`Settings/UpdateAdvancedSettings` admin boyut birimi değişir

Gönderdiğiniz alanları uygular; kalanlar olduğu gibi durur.

Gövde 26

basket_systemintSepet sisteminin açık olup olmadığı.

visitors_will_see_basketintGiriş yapmamış ziyaretçilerin sepeti görüp görmediği.

order_renewal_typestringSipariş yenilemesinin nasıl yürüdüğü.

order_number_sequentialintYeni siparişin numarasının kendi sipariş ID'si (1) mi, 5 haneli rastgele bir numara (0) mı olduğu. Yeni kurulumlar 1 ile başlar.

ticket_systemintDestek talebi sisteminin açık olup olmadığı.

kbase_systemintBilgi bankasının açık olup olmadığı.

use_couponintKupon kullanımının açık olup olmadığı.

clear_end_two_zero_moneyintFiyatlarda sondaki sıfırların gizlenip gizlenmediği.

ctoc_service_transferintMüşteriler arası hizmet devrinin açık olup olmadığı.

voice_notificationintSesli bildirimin açık olup olmadığı.

accessibilityintErişilebilirlik yardımlarının açık olup olmadığı.

pagination_ranksintKullanımdan kalktı, etkisi yok: bu değeri okuyan bir yüzey yok. Mevcut entegrasyonlar bozulmasın diye hâlâ kabul edilir.

redirect_httpsintŞifreli adrese yönlendirmenin açık olup olmadığı.

redirect_wwwintZiyaretçinin 301 yönlendirmesiyle gönderildiği ana adres: `0` yönlendirme yok, `1` www ekler, `2` www kaldırır. Başka bir değer `invalid_redirect_www` ile reddedilir.

cookie_policyobjectÇerez politikası: durumu ve bağlı sayfası.

pg_activationobjectÖdeme yöntemlerinin açıklık durumu. Yalnız var olan anahtarlar güncellenir.

limitsobjectSistem sınırları; anahtardan sayıya eşleme.

product_fields_extensionsstringÜrün alanlarında izinli dosya uzantıları.

attachment_extensionsstringEklerde izinli dosya uzantıları.

product_fields_max_file_sizeintÜrün alanı dosyası için en büyük boyut. Okurken bayt, yazarken megabayt.

attachment_max_file_sizeintEk dosyası için en büyük boyut. Okurken bayt, yazarken megabayt.

cacheintÖnbelleğin açık olup olmadığı.

analytics_codestringAnalitik kodu.

support_codestringDestek aracının kodu.

webmaster_tools_codestringArama motoru doğrulama kodu.

external_embed_codestringSayfalara eklenecek harici kod.

Dönen alanlar data — 26

dataobjectGüncel ayarlar. Getirme ucuyla aynı şekildedir, yani dosya boyutları bayt olarak döner.

Hatalar 1

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/settings/advanced' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"basket_system":1,"use_coupon":1,"cookie_policy":{"status":1,"page":0},"cache":1}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/advanced', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    basket_system: 1,
    use_coupon: 1,
    cache: 1,
  }),
});

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

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

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

```php
// Boyut MEGABAYT olarak yazilir; okudugunuz bayt degerini oldugu gibi geri gondermeyin.
Api::Settings()->UpdateAdvancedSettings([
    'attachment_max_file_size' => 10,
]);
```

### SEO Ayarlarını Getirme

get/api/v1/admin/settings/seo

`Settings/GetSeoSettings` admin dile göre

Ana sayfanın arama motorlarına gösterilen bilgilerini döndürür.

Dönen alanlar data

object 3 alanDil koduna göre meta bilgileri.

titlestringSayfa başlığı.

keywordsstringAnahtar kelimeler.

descriptionstringSayfa açıklaması.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/settings/seo' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/settings/seo', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

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

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

```php
// Yanit dil koduyla anahtarlanir; yazma ise ALAN adiyla. Iki sekil ayni degildir.
$seo = Api::Settings()->GetSeoSettings()['data'];
$en  = $seo['en']['title'];
```

### SEO Ayarlarını Yazma

put/api/v1/admin/settings/seo

`Settings/UpdateSeoSettings` admin şekil ters çevrilir

Ana sayfanın meta bilgilerini yazar. Gövde dile göre değil, alana göre anahtarlanır.

Gövde 3

titleobjectDil koduna göre başlıklar.

keywordsobjectDil koduna göre anahtar kelimeler.

descriptionobjectDil koduna göre açıklamalar.

Dönen alanlar data

dataobjectGüncel ayarlar. Getirme ucuyla aynı şekildedir, yani alan alan değil dil koduyla anahtarlanmış döner.

Hatalar 1

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/settings/seo' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"title":{"en":"Home"},"description":{"en":"Welcome."}}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/seo', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: { en: 'Home' },
    description: { en: 'Welcome.' },
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/seo');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'title'       => ['en' => 'Home'],
        'description' => ['en' => 'Welcome.'],
    ]),
]);

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

```php
// Okuma dile gore, yazma alana gore anahtarlanir: sekli cevirmeniz gerekir.
$seo = Api::Settings()->GetSeoSettings()['data'];

$titles = [];
foreach ($seo as $lang => $meta) $titles[$lang] = $meta['title'];
$titles['en'] = 'Home';

Api::Settings()->UpdateSeoSettings(['title' => $titles]);
```

## Tuzaklar

> **SEO okuması ve yazması ters anahtarlanır**
> 
> Okuma dil koduna göre gruplanmış nesneler döndürür; yazma ise **alan adına** göre gruplanmış nesneler bekler. Okuduğunuzu olduğu gibi geri göndermek çalışmaz, şekli çevirmeniz gerekir. Diğer iki ayar çiftinde böyle bir fark yoktur.

> **Dosya boyutu okurken bayt, yazarken megabayt**
> 
> Gelişmiş ayarlarda en büyük dosya boyutu alanları **bayt** olarak döner ama **megabayt** olarak yazılır. Okuduğunuz değeri olduğu gibi geri göndermek sınırı bir milyon katına çıkarır ve bunu hiçbir hata bildirmez.

> **Liste alanları birleştirilmez**
> 
> İletişim e-postaları, telefonlar ve sosyal bağlantılar gönderdiğiniz listeyle **değiştirilir**. Tek bir adres eklemek için önce mevcut listeyi okuyup üzerine eklemeniz gerekir; yoksa geri kalanlar silinir.

> **Firma bilgisi dil başınadır**
> 
> Firma adı, adres ve ek bilgi her dil için ayrı tutulur. Yalnız bir dile yazmak diğer dillerdeki metinleri eski hâlinde bırakır; site birden çok dilde açıksa ziyaretçi diline göre farklı bir firma adı görebilir.

> **Ödeme yöntemi listesine yeni anahtar eklenmez**
> 
> Ödeme yöntemi açıklık ayarında yalnız **var olan** anahtarlar güncellenir. Kurulu olmayan bir yöntemi buradan açmaya çalışmak sessizce yok sayılır; yöntemin önce kurulu olması gerekir.

## İlgili Makaleler

- [Müşteri Kayıt Ayarları](https://dev.wisecp.com/tr/musteri-kayit-ayarlari)
- [Yerelleştirme ve Adresler](https://dev.wisecp.com/tr/yerellestirme-ve-adresler)
- [Güvenlik Ayarları](https://dev.wisecp.com/tr/guvenlik-ayarlari)
