# Müşteri Güvenliği

https://dev.wisecp.com/tr/musteri-guvenligi

Şifreyi, doğrulamayı, iki adımlı girişi ve müşteriye özel güvenlik kurallarını yöneten beş uç.

## Genel Bakış

Bu beş uç müşterinin hesabına **operatör tarafından** uygulanan güvenlik kararlarını taşır: şifreyi değiştirmek, bir alanı doğrulanmış saymak, iki adımlı doğrulamayı açmak, giriş ve ödeme kurallarını sıkmak, destek hakkını kısmak.

Hiçbiri müşteriye soru sormaz. Hepsi doğrudan uygulanır, o yüzden bu uçları taşıyan bir anahtarın kapsamı dar tutulur.

## Referans

### Şifre Değiştirme

put/api/v1/admin/clients/{id}/password

`Clients/SetClientPassword` admin eski şifre sorulmaz

Müşterinin şifresini doğrudan değiştirir. Mevcut şifre istenmez.

Gövde 2

passwordstringzorunluYeni şifre. En az `options/password-length` karakter; varsayılan 6.

password_confirmationstringGönderilirse `password` ile birebir aynı olmalı. Göndermezseniz doğrulama yapılmaz.

Dönen alanlar data — 1

changedboolŞifre değiştirildi mi.

Hatalar 5

not_found404Müşteri bulunamadı.

password_required422Şifre boş.

password_too_short422Şifre en küçük uzunluğun altında. Sınır `error.details.min` ile geri döner.

password_mismatch422Şifre tekrarı şifreyle eşleşmiyor.

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/clients/42/password' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"password":"Str0ngP@ssw0rd","password_confirmation":"Str0ngP@ssw0rd"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/password', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    password: 'Str0ngP@ssw0rd',
    password_confirmation: 'Str0ngP@ssw0rd',
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/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,
        'password_confirmation' => $newPassword,
    ]),
]);

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

```php
$response = Api::Clients()->SetClientPassword([
    'id'       => 42,
    'password' => $newPassword,
]);
```

### E-posta ve Telefon Doğrulama

post/api/v1/admin/clients/{id}/verify

`Clients/VerifyClient` admin

Bir alanı doğrulanmış olarak işaretler. Müşteriye kod gönderilmez; işaret doğrudan konur.

Gövde 1

typestringzorunlu`email` ya da `phone`.

Dönen alanlar data — 2

verifiedboolDoğrulama uygulandı mı.

typestringDoğrulanan alan: `email` ya da `phone`.

Hatalar 3

not_found404Müşteri bulunamadı.

type_invalid422`type` iki değerden biri değil.

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/clients/42/verify' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"email"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/verify', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ type: 'email' }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/verify');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['type' => 'email']),
]);

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

```php
// Kendi doğrulama akışınızı çalıştırdıktan sonra işareti buradan koyarsınız.
$response = Api::Clients()->VerifyClient([
    'id'   => 42,
    'type' => 'email',
]);
```

### İki Adımlı Doğrulama

put/api/v1/admin/clients/{id}/2fa

`Clients/SetClient2fa` admin

Müşterinin iki adımlı doğrulamasını açar ya da kapatır.

Gövde 2

enabledboolzorunluAçar ya da kapatır.

methodstringKullanılacak Authentication modülünün adı, örneğin `GoogleAuthenticator`. Yalnız açarken zorunlu; kapatırken gerekmez.

Dönen alanlar data — 2

enabledboolGüncel iki adımlı doğrulama durumu.

methodstringSeçilen modülün adı. Etkinleştirmede döner, kapatmada gelmez.

Hatalar 3

not_found404Müşteri bulunamadı.

method_required422Etkinleştirme isteğinde `method` yok.

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/clients/42/2fa' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"enabled":true,"method":"GoogleAuthenticator"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/2fa', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ enabled: true, method: 'GoogleAuthenticator' }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/2fa');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'enabled' => true,
        'method'  => 'GoogleAuthenticator',
    ]),
]);

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

```php
// Kapatırken method göndermeye gerek yok.
$response = Api::Clients()->SetClient2fa([
    'id'      => 42,
    'enabled' => false,
]);
```

### Güvenlik Ayarları

patch/api/v1/admin/clients/{id}/security-settings

`Clients/UpdateClientSecuritySettings` admin

Müşteriye özel güvenlik kurallarını değiştirir. Yalnız gönderdiğiniz alan değişir.

Gövde 6

block_proxyboolProxy arkasından girişi engeller.

allow_proxyboolBu müşteriyi proxy kontrolünden muaf tutar.

require_birthdayboolDoğum tarihini zorunlu kılar.

require_adult_agebool18 yaş üstü doğrulaması ister.

force_document_filtersint[]Zorunlu tutulacak belge doğrulama filtrelerinin kimlikleri. Liste: `clients/document-filters`.

blocked_gatewaysstring[]Bu müşteriye kapatılan ödeme yöntemlerinin anahtarları.

Dönen alanlar data — 6

block_proxyboolProxy arkasından giriş engelli mi. Gönderdiğiniz parça değil, durumun tamamı döner.

allow_proxyboolMüşteri proxy kontrolünden muaf mı.

require_birthdayboolDoğum tarihi zorunlu mu.

require_adult_agebool18 yaş üstü doğrulaması açık mı.

force_document_filtersint[]Zorunlu tutulan belge doğrulama filtrelerinin kimlikleri.

blocked_gatewaysstring[]Bu müşteriye kapatılan ödeme yöntemlerinin anahtarları.

Hatalar 2

not_found404Müşteri bulunamadı.

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/clients/42/security-settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"block_proxy":true,"blocked_gateways":["PayPal"]}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/security-settings', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ block_proxy: true, blocked_gateways: ['PayPal'] }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/security-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'block_proxy'      => true,
        'blocked_gateways' => ['PayPal'],
    ]),
]);

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

```php
$response = Api::Clients()->UpdateClientSecuritySettings([
    'id'          => 42,
    'block_proxy' => true,
]);
```

### Destek Ayarları

patch/api/v1/admin/clients/{id}/support-settings

`Clients/UpdateClientSupportSettings` admin

Müşterinin destek talebi açma hakkını kısıtlar ya da tamamen kapatır.

Gövde 2

ticket_restrictedboolTalep açmayı kısıtlar.

ticket_blockedboolTalep açmayı tamamen engeller. Her müşteride çalışır. Kara listedeki müşteride kara listenin `block_tickets` kısıtlamasıyla birlikte yazılır; öteki kısıtlamalara dokunulmaz.

Dönen alanlar data — 2

ticket_restrictedboolTalep açma kısıtlı mı. Gönderdiğiniz parça değil, durumun tamamı döner.

ticket_blockedboolTalep açma engelli mi. Yürürlükteki engeli gösterir: yalnız kara liste kısıtlamasıyla engellenmiş müşteride de açıktır.

Hatalar 2

not_found404Müşteri bulunamadı.

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/clients/42/support-settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"ticket_restricted":true}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/support-settings', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ ticket_restricted: true }),
});

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

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

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

```php
$response = Api::Clients()->UpdateClientSupportSettings([
    'id'                => 42,
    'ticket_restricted' => true,
]);
```

## Tuzaklar

> **Şifre değişimi eski şifreyi sormaz**
> 
> Uç bir operatör aracıdır: mevcut şifreyi bilmeden yenisini yazar. Müşterinin kendi şifresini değiştirdiği akış bu değildir, o Müşteri API'sindedir.

> **Doğrulama kod göndermez**
> 
> `verify` yalnız işareti koyar; müşteriye e-posta ya da SMS gitmez. Kendi doğrulama akışınızı çalıştırdıktan **sonra** çağırın, yerine değil.

> **İki proxy alanı birbirinin zıddıdır**
> 
> `block_proxy` engeller, `allow_proxy` muaf tutar. İkisini birlikte açık göndermek çelişkili bir durum bırakır; hangisini istiyorsanız yalnız onu gönderin.

## İlgili Makaleler

- [Müşteri Uçları](https://dev.wisecp.com/tr/musteri-uclari)
- [API Kimlik Doğrulama ve İzinler](https://dev.wisecp.com/tr/api-kimlik-dogrulama-ve-izinler)
