# Saklı Kartlar

https://dev.wisecp.com/tr/sakli-kartlar

Müşterinin saklı kartlarını okuyan, varsayılanı seçen ve kart silen üç uç.

## Genel Bakış

Saklı kart, müşterinin ödeme sağlayıcısında tutulan kartıdır. WISECP kart numarasını **saklamaz**; elinde yalnız sağlayıcının verdiği bir işaret ve kartı tanımaya yetecek kadar bilgi vardır — son dört hane, marka, son kullanma.

Bu yüzden burada kart *ekleyen* bir uç yoktur. Kart, müşteri ödeme yaparken sağlayıcının kendi ekranında saklanır; API yalnız var olanı okur, varsayılanı taşır ve siler.

## Referans

### Kartları Listeleme

get/api/v1/admin/clients/{id}/cards

`Clients/GetClientCards` admin

Müşterinin saklı kartlarını döndürür. Kart numarası hiçbir zaman dönmez; yalnız son dört hane görünür.

Dönen alanlar data[] — 6

idintSaklı kartın kimliği.

last4stringKart numarasının son dört hanesi.

brandstringKart markası, örneğin `visa` ya da `mastercard`.

modulestringKartı saklayan ödeme modülü, örneğin `Stripe`.

is_defaultboolVarsayılan kart mı.

expirystringSon kullanma tarihi, `12/27` biçiminde.

Hatalar 2

not_found404Müşteri ya da kart bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

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

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

const primary = body.data.find((card) => card.is_default);
```

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

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

```php
$response = Api::Clients()->GetClientCards(['id' => 42]);

foreach ($response['data'] as $card) {
    if ($card['is_default']) {
        $primary = $card;
    }
}
```

Yanıt 200

```json
{
  "data": [
    {
      "id": 88,
      "last4": "4242",
      "brand": "visa",
      "module": "Stripe",
      "is_default": true,
      "expiry": "12/27"
    }
  ]
}
```

### Varsayılan Kartı Seçme

put/api/v1/admin/clients/{id}/cards/{card_id}/default

`Clients/SetClientCardDefault` admin

Bir kartı varsayılan yapar. Önceki varsayılanın işareti kendiliğinden kalkar.

Gövde —

——Gövde gerekmez; boş gönderin. Hem müşteri hem kart adresten gelir.

——Başka bir kart yerine geçmeden varsayılanlığı kaldırmanın yolu yoktur.

Dönen alanlar data — 2

card_idintVarsayılan yapılan kartın kimliği.

defaultboolHer zaman `true`.

Hatalar 2

not_found404Müşteri ya da kart bulunamadı.

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/cards/88/default' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/cards/88/default', {
  method: 'PUT',
  headers: { Authorization: `Bearer ${apiKey}` },
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/cards/88/default');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

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

```php
$response = Api::Clients()->SetClientCardDefault([
    'id'      => 42,
    'card_id' => 88,
]);
```

### Kart Silme

delete/api/v1/admin/clients/{id}/cards/{card_id}

`Clients/DeleteClientCard` admin varsayılanı taşıyabilir

Saklı kartı siler. Silinen kart varsayılansa yerine bir başkası geçer ve kimliği yanıtta döner. Sağlayıcıdan da kendi kopyasını silmesi istenir; kart her durumda müşteriden kaldırılır, sağlayıcının cevabı `gateway_removal` alanında döner.

Dönen alanlar data — 5

deletedboolSilme başarılı mı.

card_idintSilinen kartın kimliği.

new_default_idintYeni varsayılan kartın kimliği. Silinen kart varsayılan değilse `0`.

gateway_removalstringSağlayıcının kendi kopyasına ne yaptığı: `removed` · `failed` (reddetti ya da ulaşılamadı; kartı sağlayıcının panelinden kaldırın) · `unsupported` (ödeme modülü saklı kart silmeyi desteklemiyor) · `none` (kart bir ödeme modülüne bağlı değil).

gateway_errorstringSağlayıcının mesajı. Yalnız `gateway_removal` `failed` iken ve sağlayıcı bir mesaj döndürdüyse bulunur.

Hatalar 2

not_found404Müşteri ya da kart 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/clients/42/cards/88' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/cards/88', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();

if (body.data.new_default_id) {
  // Varsayilan baska bir karta gecti.
}
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/cards/88');
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
$response = Api::Clients()->DeleteClientCard([
    'id'      => 42,
    'card_id' => 88,
]);

$newDefault = $response['data']['new_default_id'] ?? 0;
```

## Tuzaklar

> **Kart ekleyen bir uç yoktur**
> 
> Kart yalnız müşterinin ödeme akışında saklanabilir, çünkü numara sağlayıcıya girilir. API üzerinden kart eklemeye çalışan bir entegrasyon karşılığı olmayan bir uç arar.

> **Silmek varsayılanı taşıyabilir**
> 
> Varsayılan kartı silerseniz yerine bir başkası geçer ve kimliği `new_default_id` ile döner. Kendi tarafınızda varsayılanı saklıyorsanız bu değeri okuyup güncelleyin.

> **Silinen kart sağlayıcıda kalabilir**
> 
> Sağlayıcı kendi kopyasını silmeyi reddetse de yanıt `200` döner. `gateway_removal` alanına bakın: `failed` ise kart WISECP'den kalkmıştır ama sağlayıcıda hâlâ saklıdır ve orada elle kaldırılması gerekir.

> **Ekranda gördüğünüz kart numarası değildir**
> 
> `last4` yalnız tanımaya yarar. Kart numarasını, son kullanma tarihinin tamamını ya da güvenlik kodunu API hiçbir uçta döndürmez.

## İlgili Makaleler

- [Müşteri Uçları](https://dev.wisecp.com/tr/musteri-uclari)
- [İstek ve Yanıt Biçimi](https://dev.wisecp.com/tr/istek-ve-yanit-bicimi)
