# Müşteri Kayıt Ayarları

https://dev.wisecp.com/tr/musteri-kayit-ayarlari

Kayıt formunda nelerin sorulacağını ve hangi ek alanların bulunacağını yöneten yedi uç.

## Genel Bakış

Bu yedi uç bir müşterinin kayıt olurken **nelerin sorulacağını** belirler. İki katman vardır: sistemin hazır alanları ve sizin eklediğiniz özel alanlar.

Hazır alanlarda her soru için ayrı ayrı üç şey ayarlanır: **sorulsun mu**, **zorunlu mu** ve **müşteri sonradan değiştirebilsin mi**. Bunlar bağımsız anahtarlardır; bir alanı zorunlu yapmak onu kendiliğinden sormaz.

Özel alanlar **dile aittir**: aynı alan her dilde ayrı bir kayıt olarak açılır ve kendi kimliğini taşır.

## Referans

### Kayıt Ayarlarını Getirme

get/api/v1/admin/settings/client

`Settings/GetClientSettings` admin hepsi sıfır ya da bir

Kayıt ve giriş akışında hangi alanların sorulduğunu ve zorunlu olduğunu döndürür.

Dönen alanlar data — 27

sign_in_statusintGirişin açık olup olmadığı.

sign_up_statusintKaydın açık olup olmadığı.

sign_up_email_verifyintE-postanın doğrulanmasının istenip istenmediği.

smart_namingintAd ve soyadın kendiliğinden düzeltilip düzeltilmediği.

crtacwshopintSipariş sırasında hesabın kendiliğinden açılıp açılmadığı.

sign_up_gsm_statusintCep telefonunun sorulup sorulmadığı.

sign_up_gsm_requiredintCep telefonunun zorunlu olup olmadığı.

sign_up_gsm_checkerintCep telefonunun biçim denetiminden geçip geçmediği.

sign_up_gsm_verifyintCep telefonunun doğrulanmasının istenip istenmediği.

sign_up_landline_phone_statusintSabit telefonun sorulup sorulmadığı.

sign_up_landline_phone_requiredintSabit telefonun zorunlu olup olmadığı.

sign_up_landline_phone_checkerintSabit telefonun biçim denetiminden geçip geçmediği.

sign_up_kind_statusintBireysel ya da kurumsal seçiminin sorulup sorulmadığı.

sign_up_identity_statusintKimlik numarasının sorulup sorulmadığı.

sign_up_identity_requiredintKimlik numarasının zorunlu olup olmadığı.

sign_birthday_statusintDoğum tarihinin sorulup sorulmadığı.

sign_birthday_requiredintDoğum tarihinin zorunlu olup olmadığı.

sign_birthday_adult_verifyintYaş sınırının denetlenip denetlenmediği.

security_question_statusintGüvenlik sorusunun sorulup sorulmadığı.

security_question_requiredintGüvenlik sorusunun zorunlu olup olmadığı.

sign_editable_full_nameintMüşterinin adını sonradan değiştirebilip değiştiremeyeceği.

sign_editable_emailintMüşterinin e-postasını değiştirebilip değiştiremeyeceği.

sign_editable_gsmintMüşterinin cep telefonunu değiştirebilip değiştiremeyeceği.

sign_editable_landline_phoneintMüşterinin sabit telefonunu değiştirebilip değiştiremeyeceği.

sign_editable_identityintMüşterinin kimlik numarasını değiştirebilip değiştiremeyeceği.

sign_editable_kindintMüşterinin hesap türünü değiştirebilip değiştiremeyeceği.

sign_editable_birthdayintMüşterinin doğum tarihini değiştirebilip değiştiremeyeceğ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/client' \
  -H "Authorization: Bearer $API_KEY"
```

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

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

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

```php
// Bir alanin sorulmasi ve ZORUNLU olmasi ayri anahtarlardir: ikisini birlikte okuyun.
$cfg     = Api::Settings()->GetClientSettings()['data'];
$asksGsm = $cfg['sign_up_gsm_status'] === 1;
$needsIt = $asksGsm && $cfg['sign_up_gsm_required'] === 1;
```

### Kayıt Ayarlarını Yazma

put/api/v1/admin/settings/client

`Settings/UpdateClientSettings` admin vitrini etkiler

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

Gövde 27

sign_in_statusintGirişin açık olup olmadığı.

sign_up_statusintKaydın açık olup olmadığı.

sign_up_email_verifyintE-postanın doğrulanmasının istenip istenmediği.

smart_namingintAd ve soyadın kendiliğinden düzeltilip düzeltilmediği.

crtacwshopintSipariş sırasında hesabın kendiliğinden açılıp açılmadığı.

sign_up_gsm_statusintCep telefonunun sorulup sorulmadığı.

sign_up_gsm_requiredintCep telefonunun zorunlu olup olmadığı.

sign_up_gsm_checkerintCep telefonunun biçim denetiminden geçip geçmediği.

sign_up_gsm_verifyintCep telefonunun doğrulanmasının istenip istenmediği.

sign_up_landline_phone_statusintSabit telefonun sorulup sorulmadığı.

sign_up_landline_phone_requiredintSabit telefonun zorunlu olup olmadığı.

sign_up_landline_phone_checkerintSabit telefonun biçim denetiminden geçip geçmediği.

sign_up_kind_statusintBireysel ya da kurumsal seçiminin sorulup sorulmadığı.

sign_up_identity_statusintKimlik numarasının sorulup sorulmadığı.

sign_up_identity_requiredintKimlik numarasının zorunlu olup olmadığı.

sign_birthday_statusintDoğum tarihinin sorulup sorulmadığı.

sign_birthday_requiredintDoğum tarihinin zorunlu olup olmadığı.

sign_birthday_adult_verifyintYaş sınırının denetlenip denetlenmediği.

security_question_statusintGüvenlik sorusunun sorulup sorulmadığı.

security_question_requiredintGüvenlik sorusunun zorunlu olup olmadığı.

sign_editable_full_nameintMüşterinin adını sonradan değiştirebilip değiştiremeyeceği.

sign_editable_emailintMüşterinin e-postasını değiştirebilip değiştiremeyeceği.

sign_editable_gsmintMüşterinin cep telefonunu değiştirebilip değiştiremeyeceği.

sign_editable_landline_phoneintMüşterinin sabit telefonunu değiştirebilip değiştiremeyeceği.

sign_editable_identityintMüşterinin kimlik numarasını değiştirebilip değiştiremeyeceği.

sign_editable_kindintMüşterinin hesap türünü değiştirebilip değiştiremeyeceği.

sign_editable_birthdayintMüşterinin doğum tarihini değiştirebilip değiştiremeyeceği.

Dönen alanlar data — 27

*intYazma sonrası anahtar kümesinin tamamı; ayarları okuma ucuyla aynı şema. Her biri 0 ya da 1 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/client' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"sign_up_status":1,"sign_up_email_verify":1,"security_question_status":0}'
```

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

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

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

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

```php
// Bir alani zorunlu yapmak SORULUYOR olmasini gerektirir; ikisini birlikte acin.
Api::Settings()->UpdateClientSettings([
    'sign_up_gsm_status'   => 1,
    'sign_up_gsm_required' => 1,
]);
```

### Özel Alanları Listeleme

get/api/v1/admin/settings/client-fields

`Settings/GetClientFields` admin dil başına ayrı

Kayıt formuna eklenmiş ek alanları döndürür. Alanlar dile göre tutulur.

Sorgu parametreleri 1

langstringHangi dilin alanları. Vermezseniz geçerli dil kullanılır.

Dönen alanlar data[] — 12

idintAlanın kimliği.

langstringAlanın ait olduğu dil.

typestringAlan tipi.

namestringMüşteriye gösterilen ad.

statusstring`active` ya da `inactive`.

requiredboolDoldurulması zorunlu mu.

uneditableboolMüşteri sonradan değiştirebiliyor mu.

client_hiddenboolMüşteriden gizli mi. Gizliyken hesapta, kayıt formunda, faturada ve müşteri API'sinde görünmez.

invoiceboolFaturada gösteriliyor mu.

sign_formboolKayıt formunda soruluyor mu.

optionsstringSeçim tiplerinde sunulan değerler.

rankintFormdaki sırası.

Hatalar 2

invalid_lang422Dil kodu geçerli değil.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -G 'https://panel.ornek.com/api/v1/admin/settings/client-fields' \
  -H "Authorization: Bearer $API_KEY" \
  -d lang=en
```

```javascript
const url = new URL('https://panel.ornek.com/api/v1/admin/settings/client-fields');
url.searchParams.set('lang', 'en');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
```

```php
$url = 'https://panel.ornek.com/api/v1/admin/settings/client-fields?' . http_build_query(['lang' => 'en']);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

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

```php
// Alanlar dile BAGLIDIR: her dil icin ayri liste, ayri kimlikler.
$en = Api::Settings()->GetClientFields([], ['lang' => 'en'])['data'];
$tr = Api::Settings()->GetClientFields([], ['lang' => 'tr'])['data'];
```

Yanıt 200

```json
{
  "data": [
    {
      "id": 5,
      "lang": "en",
      "type": "text",
      "name": "VAT Number",
      "status": "active",
      "required": false,
      "uneditable": false,
      "client_hidden": false,
      "invoice": true,
      "sign_form": true,
      "options": "",
      "rank": 0
    }
  ],
  "meta": { "lang": "en", "total": 1 }
}
```

### Özel Alan Ekleme

post/api/v1/admin/settings/client-fields

`Settings/CreateClientField` admin 201

Kayıt formuna yeni bir alan ekler.

Gövde 10

namestringzorunluMüşteriye gösterilecek ad.

langstringAlanın açılacağı dil.

typestringAlan tipi. Varsayılan metin.

statusintAlanı açar ya da kapatır. Varsayılan açık.

requiredintAlanı zorunlu kılar.

uneditableintMüşterinin sonradan değiştirmesini engeller.

client_hiddenintAlanı müşteriden gizler. Yalnız yöneticiler görür.

invoiceintAlanı faturada gösterir.

sign_formintAlanı kayıt formunda sorar.

optionsstringSeçim tiplerinde sunulacak değerler.

Dönen alanlar data — 12

*objectOluşturulan alan; liste öğesiyle aynı şema. Yanıt 201 taşır.

Hatalar 4

invalid_lang422Dil kodu geçerli değil.

name_required422Alan adı boş.

create_failed422Alan eklenemedi.

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/settings/client-fields' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"lang":"en","name":"VAT Number","type":"text","required":1,"invoice":1,"sign_form":1}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/client-fields', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    lang: 'en',
    name: 'VAT Number',
    type: 'text',
    required: 1,
    invoice: 1,
    sign_form: 1,
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/client-fields');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'lang'      => 'en',
        'name'      => 'VAT Number',
        'required'  => 1,
        'sign_form' => 1,
    ]),
]);

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

```php
// Alan YALNIZ verdiginiz dilde acilir; her dil icin ayri ayri eklemeniz gerekir.
foreach (['en', 'tr'] as $lang) {
    Api::Settings()->CreateClientField([
        'lang'      => $lang,
        'name'      => $lang === 'tr' ? 'Vergi No' : 'VAT Number',
        'required'  => 1,
        'sign_form' => 1,
    ]);
}
```

### Alanları Sıralama

put/api/v1/admin/settings/client-fields/order

`Settings/ReorderClientFields` admin

Bir dildeki alanların formda görünme sırasını yazar.

Gövde 2

langstringzorunluHangi dilin alanları sıralanacak.

orderint[]zorunluAlan kimlikleri, istediğiniz sırada.

Dönen alanlar data[] — 12

*objectYeniden sıralanmış liste; alanları listeleme ucuyla aynı şema.

rankintGönderdiğiniz sırayı yeniden yazar. Listeye koymadığınız bir kimlik eski sırasını korur, arada boşluk kalabilir; temiz bir sıra için tüm listeyi gönderin.

Hatalar 2

invalid_lang422Dil kodu geçerli değil.

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/client-fields/order' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"lang":"en","order":[7,5,9]}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/client-fields/order', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ lang: 'en', order: [7, 5, 9] }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/client-fields/order');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['lang' => 'en', 'order' => [7, 5, 9]]),
]);

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

```php
// Siralama DILE ozeldir: her dilde kendi kimlikleriyle ayrica sıralamaniz gerekir.
$ids = array_column(
    Api::Settings()->GetClientFields([], ['lang' => 'en'])['data'],
    'id',
);

Api::Settings()->ReorderClientFields(['lang' => 'en', 'order' => array_reverse($ids)]);
```

### Özel Alanı Güncelleme

patch/api/v1/admin/settings/client-fields/{id}

`Settings/UpdateClientField` admin

Var olan bir alanı değiştirir. Alan adı boş bırakılamaz.

Gövde 10

namestringzorunluMüşteriye gösterilecek ad.

langstringAlanın açılacağı dil.

typestringAlan tipi. Varsayılan metin.

statusintAlanı açar ya da kapatır. Varsayılan açık.

requiredintAlanı zorunlu kılar.

uneditableintMüşterinin sonradan değiştirmesini engeller.

client_hiddenintAlanı müşteriden gizler. Yalnız yöneticiler görür.

invoiceintAlanı faturada gösterir.

sign_formintAlanı kayıt formunda sorar.

optionsstringSeçim tiplerinde sunulacak değerler.

Dönen alanlar data — 11

*objectGüncellenen alan, kaydedildiği biçimiyle.

Hatalar 3

not_found404Alan bulunamadı.

name_required422Gönderilen ad boş.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/settings/client-fields/5' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Tax ID","required":0}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/client-fields/5', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'Tax ID', required: 0 }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/client-fields/5');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['name' => 'Tax ID', 'required' => 0]),
]);

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

```php
// Gizlemek ve zorunlu kilmak birbiriyle CELISIR: musteri goremedigi alani dolduramaz.
Api::Settings()->UpdateClientField([
    'id'            => 5,
    'client_hidden' => 1,
    'required'      => 0,
]);
```

### Özel Alanı Silme

delete/api/v1/admin/settings/client-fields/{id}

`Settings/DeleteClientField` admin cevaplar da gider

Alanı kaldırır. Müşterilerin o alana verdiği cevaplar da gider.

Dönen alanlar data — 2

deletedboolSilme başarılı mı.

idintSilinen alanın kimliği.

Hatalar 2

not_found404Alan bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/settings/client-fields/5' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/client-fields/5', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

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

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

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

```php
// Silmek yerine KAPATMAK cevaplari korur; alan formdan kalkar ama veri durur.
Api::Settings()->UpdateClientField(['id' => 5, 'status' => 0]);
```

## Tuzaklar

> **Zorunlu yapmak sormaya başlatmaz**
> 
> Her hazır alanın **sorulma** ve **zorunluluk** anahtarları ayrıdır. Yalnız zorunluluğu açmak alanı forma getirmez; müşteri onu hiç görmez ve ayar sessizce etkisiz kalır. İkisini birlikte açın.

> **Özel alan tek dilde açılır**
> 
> Bir özel alan eklediğinizde yalnız verdiğiniz dilde oluşur. Sitede iki dil varsa ikinci dildeki müşteriler o alanı **hiç görmez**. Her dil için ayrı ekleme yapmanız ve sıralamayı da ayrı ayrı yazmanız gerekir.

> **Gizli alan zorunlu olamaz**
> 
> Bir alanı müşteriden gizlemek onu hesapta, kayıt formunda, faturada ve müşteri API'sinde görünmez yapar. Aynı alanı zorunlu bırakmak kaydı imkânsız hâle getirir: müşteri göremediği bir alanı dolduramaz. Gizlerken zorunluluğu kaldırın.

> **Alanı silmek cevapları da siler**
> 
> Özel alanı silmek yalnız formu değiştirmez: o alana verilmiş **bütün müşteri cevapları** gider. Alanı artık sormak istemiyorsanız silmek yerine kapatın; form temizlenir ama toplanmış veri yerinde kalır.

> **Kaydı kapatmak girişi kapatmaz**
> 
> Kayıt ve giriş ayrı anahtarlardır. Kaydı kapatmak var olan müşterilerin girişini engellemez; bakım için sistemi kapatmak istiyorsanız ikisini de kapatmanız gerekir. Tersi de doğrudur: girişi kapatıp kaydı açık bırakmak, hesap açabilen ama giremeyen müşteriler üretir.

## İlgili Makaleler

- [Site Ayarları](https://dev.wisecp.com/tr/site-ayarlari)
- [Müşteri Uçları](https://dev.wisecp.com/tr/musteri-uclari)
- [Kimlik Doğrulama Ayarları](https://dev.wisecp.com/tr/kimlik-dogrulama-ayarlari)
