---
title: Plan Yönetimi ve Satışı
description: Uygulamanız için fiyatlandırma planlarını nasıl oluşturacağınızı, yöneteceğinizi ve ikas üzerinden satacağınızı öğrenin
---

ikas, uygulama geliştiricilere uçtan uca bir uygulama satış altyapısı sunar. Planlarınızı oluşturur, bölge bazında fiyatlandırırsınız; ikas satın alma, faturalama ve ödeme süreçlerini otomatik olarak yönetir. Mağazalar uygulamanızı ikas Uygulama Mağazası üzerinden satın alır, siz gelirinizi takip edersiniz.

<Callout type="info" title="Hızlı Başlangıç">
Plan sistemini sıfırdan kurmak yerine, ikas CLI'ın **Starter App with subscription** şablonunu kullanarak `getMerchantLicence` kontrolü dahil hazır bir proje oluşturabilirsiniz.

```bash
ikas app init
```

Uygulama türü sorusunda **Starter App with subscription** seçeneğini tercih edin.
</Callout>

<Callout type="info" title="Planlar Sayfası">
Uygulamanızın planlarını partner arayüzündeki Planlar sayfasından yönetebilirsiniz:

`https://partners.ikas.com/admin/application-details/{{uygulama_client_id}}/plans`
</Callout>

## Plan Oluşturma

Yeni bir plan oluşturmak için Planlar sayfasının sağ üst köşesindeki **Plan Ekle** butonuna tıklayın.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-planlar.png"
  alt="ikas partner app plans"
/>

1. **Konfigürasyon Adı** girin.
   - Konfigürasyon adı yalnızca partner arayüzünde görünür; uygulama mağazasında veya ikas arayüzünde kullanıcıya gösterilmez.
2. **Konfigürasyon Anahtarı** belirlenir.
   - Konfigürasyon adını girdikten sonra otomatik olarak bir Konfigürasyon Anahtarı oluşur.
   - Bu anahtar, uygulamanız için satın alınan planları yönetmenizi ve takip etmenizi sağlar.
   - Dilerseniz planı kaydetmeden önce otomatik oluşturulan anahtarı değiştirebilirsiniz, ancak benzersiz olduğundan emin olmanız gerekir. 
   - Kaydedilen anahtar bir daha değiştirilemez.
3. **Para birimi** (TRY, EUR, USD) seçin.
4. Planın **aylık ve yıllık ücretlendirmesini** belirleyin. 
   - Girilen plan ücreti 1 tam yıllık ya da 1 tam aylık KDV hariç fiyatlandırmadır. Mağazanın ödeyeceği fiyat ödeme ekranında `(Kalan Lisans Günü/365 * 1 Tam Aylık ya da Yıllık Ücret) + KDV` olarak belirlenir.
   - TRY için **sadece Yıllık** plan satışı yapılmaktadır.
   - Plan ücreti "0" olamaz.

<Callout type="warning" title="Ücretsiz Planlar">
Ücretsiz plan, yapısı bakımından plan olmama durumu olduğu için Planlar sayfasında ücretsiz plan oluşturamazsınız. Uygulamanız için ücretsiz bir plan sunmak istiyorsanız, bu işlemi Yayınlama sayfasında bölgeleri ve planları eşleştirirken yapmalısınız.
</Callout>

5. (İsteğe bağlı) **Ücretsiz deneme süresi** ekleyin ve gün sayısını belirtin.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-plan-olusturma.png"
  alt="ikas partner adding new app plan"
/>

<Callout type="warning" title="Plan Düzenlemesi">
Planlar üzerinde yaptığınız değişiklikler direkt olarak uygulamanıza yansımaktadır. Ancak, ilgili planın açıklamalarını değiştirmek isterseniz uygulamanızı incelemeye göndermeniz gerekmektedir.
</Callout>

---

## Planları Bölgelerle Eşleştirme

Oluşturduğunuz planlar doğrudan kullanıcılara sunulmaz; [Uygulama Yayınlama](https://builders.ikas.com/tr/docs/app-development/admin-app/build-publish) sayfasında bölgelerle ilişkilendirilmesi gerekir.

ikas'ın sunduğu **Bölgeler ve Planlar** yapısı sayesinde uygulamanızın fiyatlandırmasını ülkeler bazında özelleştirebilir ya da uygulamanızın yayınlanacağı ülkeleri sınırlayarak belirli pazarlara göre konumlandırabilirsiniz.

Her bölgenin yalnızca aynı para biriminde oluşturulmuş planlarla eşleştirilebileceğine dikkat edin. Bu kuralı takip etmenizi kolaylaştırmak amacıyla Yayınlama sayfasında her para birimi için ayrı bir tablo bulunur.

### Bölgeye Plan Ekleme

Yayınlama sayfasında yeni bölge oluştururken veya mevcut bir bölgeyi düzenlerken aşağıdaki formu kullanırsınız:

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-region-step1.png"
  alt="ikas app regions step1"
/>

- **Bölge Adı:** Sadece partner arayüzünde görünür; farklı konfigürasyonları ayırt etmenizi sağlar.
- **Bölge:** Bu bölgenin hangi para birimini kullanacağını ve hangi ülkeleri kapsadığını gösterir.
- **Ülkeler:** Uygulamanın satışta olacağı ülkeler. Bir ülke yalnızca bir bölgede bulunabilir.
- **Planlar:** Bölgeye eklenecek uygulama planları. Olası plan düzenlemeleri ve nasıl kullanılması gerektiği ile ilgili detaylı bilgi için [Plan Yapıları](#farklı-plan-yapıları-ve-gerekli-uygulama-düzenlemeleri) bölümüne bakın.

<Callout type="warning" title="ikas Üzerinden Ödeme Almamak">
Eğer uygulama satışı yaparken, bunu ikas üzerinden değilde kendi sistemleriniz üzerinden yapmak istiyorsanız, uygulamanıza hiç bir plan eklemeden `Ücretsiz` seçeneği ile devam etmelisiniz. Aksi takdirde eklediğiniz planlar mağazalar tarafından satın alınabilir hale gelecektir.
</Callout>

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-region-step2.png"
  alt="ikas app regions step2"
/>

---

## Planlarınız Nasıl Satın Alınır?

Oluşturulan ve bir bölgeye eklenen plan, o bölgelere ait mağazalar tarafından satın alınabilir duruma gelir. Uygulama planı satın alım süreci için sizin ekstra bir sayfa yapmanıza gerek yoktur. ikas, mağaza bölgesine otomatik olarak planlarınızı listeler.

Mağaza plan satın almak için, uygulamaların, sağ üst köşesinde bulunan "Planı Yönet" butonuna tıklar.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/merchant-managed-plan-1.png"
  alt="ikas merchant managed plan 1"
/>

Sonraki sayfada mağazanın alabileceği planlar ikas tarafından otomatik olarak listelenir. Mağaza "Planı Seç" diyerek ödeme sayfasına gider ve satın alma işlemini tamamlar.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/merchant-managed-plan-2.png"
  alt="ikas merchant managed plan 2"
/>

---

## Farklı Plan Yapıları ve Gerekli Uygulama Düzenlemeleri

ikas, ücretli, ücretsiz ya da bu ikisinin karması olacak şekilde plan düzenlemesi yapmanıza izin vermektedir.

Uygulamanızı geliştirirken, kullanacağınız plan düzenine göre uygulamanız üzerinde farklı geliştirmeler yapmanız gerekebilir. Bu geliştirmeleri yapmanız için gereken araçları Webhook ve `getMerchantLicence` query ile size sağlamaktayız.

[Webhook ve getMerchantLicence query kullanımı](#webhook-ve-getmerchantlicence-kullanımı) ile ilgili detaylandırmaları sayfanın devamında bulabilirsiniz.

Kullandığınız yöntemden bağımsız olarak, farklı plan düzenlemeleri ve bu düzenlemelerine karşılık olarak uygulamanızda yapmanız gereken geliştirmeler aşağıda detaylandırılmıştır.

### Ücretsiz

Planlar sayfasında herhangi bir plan oluşturulmaz. Ücretsiz seçeneği, [uygulama yayınlama](https://builders.ikas.com/tr/docs/app-development/admin-app/build-publish) sürecinde bölgelere doğrudan eklenir.

Bir uygulamanın ücretsiz kullanılması, o uygulama ile ilgili hiçbir lisans işleminin yapılmamış olması demektir. Yani, size bir webhook gelmez ya da getMerchantLicence'ta uygulamanız ile ilgili subscription işlemi bulunmaz. 

Dolayısı ile, uygulamanız ikas üzerinde tamamen ücretsiz olacaksa, yapmanız gereken herhangi bir işlem bulunmamaktadır.

Özellikle ikas üzerinden uygulama satışı yapmayıp, kendi ödeme sistemlerini kullanmak isteyen geliştiriciler bu yöntem ile ilerlemelidir. ikas üzerinden webhook beklemeden ya da getMerchantLicence ile mağazanın ikas'taki uygulama lisansını kontrol etmeden, tamamen kendi sistemleri üzerinden bir kontrol yapmalıdırlar.

### Ücretli

Her plan için aylık ve yıllık fiyat ayrı ayrı belirlenir. İsteğe bağlı olarak ücretsiz deneme süresi de ekleyebilirsiniz. Bir bölge içerisinde toplam 4 adet ücretli plan seçeneği sunabilirsiniz. Bir bölgede ücretsiz seçenek de bulunuyorsa ücretli plan sayısı 3 ile sınırlıdır.

Aynı plan, para birimi uyumlu olduğu sürece birden fazla bölgede kullanılabilir; ancak bir bölgede aynı plan birden fazla kez eklenemez.

#### Deneme Süresi

Deneme süresi eklemek istediğiniz durumlarda, mağazanın uygulamanızı kurduğu tarihi sisteminize ekleyerek, ilgili planı satın almamış olmasına rağmen kullanmasına izin verebilir, deneme süresi bittikten sonra ise hala plan satın alınmamışsa uygulamaya erişimini tamamen engelleyebilirsiniz.

Bir bölge içerisinde deneme süresi olan **yalnızca bir plan** bulunabilir.

#### Lisans Tabanlı Fiyatlandırma

Uygulama lisansı, mağazanın ikas lisansına bağlı olarak çalışır. Mağaza, aylık veya yıllık seçim yapmaz; ikas lisansının kalan süresine göre orantılı ücret öder. Fiyatlarınızı belirlerken bu yapıyı göz önünde bulundurun.

### Ücretsiz + Ücretli

Bir uygulamanın hem ücretsiz planı hem de 3 adet ücretli planı bulunabilir. Burada dikkat edilmesi gereken nokta, mağazadan plan satın alımıyla ilgili bir webhook gelip gelmediği ve `getMerchantLicence` içinde uygulamanıza ait subscription bilgisinin bulunup bulunmadığıdır.

Eğer bir mağazanın, uygulamanız için satın aldığı bir plan bulunmuyorsa, uygulamanızın ücretsiz planını kullanıyor demektir. Bu bilgiye dayanarak ilgili mağaza için uygulamanızın özelliklerinde sınırlamaya gidebilirsiniz.

Eğer bir mağazadan plan satın alımıyla ilgili bir webhook aldıysanız ya da `getMerchantLicence` içinde uygulamanıza ait bir subscription bilgisi bulunuyorsa, ilgili subscription kaydındaki `storeAppListingSubscriptionKey` üzerinden mağazanın hangi planı kullandığını anlayabilirsiniz.

Eğer ücretli planlarınız arasında deneme süresi içeren bir plan varsa, mağazanın uygulamanızı indirdiği günü sisteminizde tutmalı ve deneme süresi bitene kadar ilgili planı, deneme süresi bittiğinde ise ücretsiz planı kullanıyormuş gibi davranmalısınız.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-region-and-plans-completed.png"
  alt="ikas partner app regions and plans completed"
/>
<p className="mt-2 text-sm text-fd-muted-foreground">Planlar sayfasında oluşturduğunuz planların bölgeler ile ilişkilendirilmiş hali</p>

---

## Webhook ve getMerchantLicence Kullanımı

### Webhook Kullanımı

Uygulamanızda bir plan satışı yaptığınızda ikas üzerinden webhook almak için uygulamanızın konfigürasyon sayfasında bizimle bir webhook adresi paylaşmış olmanız gerekmektedir.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-app-webhook-bildirim-adresi.png"
  alt="ikas partner app webhook bildirim adresi"
/>

Plan satın alındığında ikas'ın webhook adresinize göndereceği payload aşağıdaki yapıya sahiptir:

```json
{
  "id": "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb",
  "merchantId": "cccccccc-4444-5555-6666-dddddddddddd",
  "authorizedAppId": "eeeeeeee-7777-8888-9999-ffffffffffff",
  "scope": "store/app/payment",
  "signature": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
  "createdAt": "2026-04-17T11:47:30.476Z",
  "data": {
    "merchantAppPayment": {
      "id": "11112222-aaaa-bbbb-cccc-333344445555",
      "merchantId": "cccccccc-4444-5555-6666-dddddddddddd",
      "storeAppId": "55556666-aaaa-bbbb-cccc-777788889999",
      "storeAppListingSubscriptionId": "99990000-aaaa-bbbb-cccc-111122223333",
      "storeAppListingSubscriptionKey": "pro-try",
      "name": "Pro Plan",
      "prices": [
        { "period": "MONTHLY", "price": 400 },
        { "period": "YEARLY", "price": 4800 }
      ],
      "paymentDate": "2026-04-17T11:47:30.456Z",
      "status": "PAID",
      "type": "SUBSCRIPTION"
    },
    "merchantLicence": {
      "merchantId": "cccccccc-4444-5555-6666-dddddddddddd",
      "region": "TR",
      "period": "YEARLY",
      "activeSubscriptionCode": "SCALE_PLUS",
      "fromDate": "2025-09-29T11:05:44.991Z",
      "toDate": "2026-09-29T11:05:44.991Z",
      "appSubscriptions": [
        {
          "storeAppId": "55556666-aaaa-bbbb-cccc-777788889999",
          "name": "Pro Plan",
          "status": "ACTIVE",
          "lastPaymentDate": "2026-04-17T11:47:30.330Z",
          "lastPaymentPeriod": "YEARLY",
          "lastPaymentPeriodInDays": 165,
          "lastPaymentPrice": 2169.86,
          "lastPaymentPriceWithTax": 2603.84,
          "currency": "TRY"
        }
      ]
    }
  }
}
```

Önemli payload alanları aşağıdaki şekildedir.

| Alan | Açıklama |
|------|----------|
| `scope` | Webhook türü. Plan satın alımlarında `store/app/payment` gelir. |
| `authorizedAppId` | Uygulamanızın client ID'si. Gelen webhook'un kendi uygulamanıza ait olduğunu doğrulamak için kullanın. |
| `data.merchantAppPayment.status` | Ödeme durumu. Yalnızca `PAID` olan kayıtları işleyin. |
| `data.merchantAppPayment.storeAppListingSubscriptionKey` | Partner panelinde tanımladığınız Konfigürasyon Anahtarı. Hangi planın satın alındığını bu alanla belirlersiniz. |
| `data.merchantLicence.appSubscriptions` | Mağazanın tüm aktif uygulama abonelikleri. `getMerchantLicence` ile aynı yapıdadır. |

<Callout type="info" title="store/app/deleted Webhook'u">
  Bir mağaza uygulamanızı sildiğinde `store/app/deleted` scope'uyla webhook alırsınız. Payload yapısı `store/app/payment` ile aynıdır; `data` alanı ise silme zamanını içerir.

  ```json
  {
    "id": "079d2254-8189-4541-440c-fd7441f772c3",
    "merchantId": "f3c22e47-e3e0-4668-b6e3-4ec46844e49d",
    "scope": "store/app/deleted",
    "createdAt": "2026-05-15T13:39:17.762Z",
    "signature": "99ee2131e97116967330c28a37311de65446af71b01217002462344d600be97a",
    "authorizedAppId": "5123e922-ca31-4d7e-a183-34456ec3789c",
    "data": "{\"deletedAt\":1778852357762}"
  }
  ```

  Bu webhook'u kullanarak mağazanın uygulamayı kaldırdığını tespit edebilir, kendi sisteminizde ilgili aboneliği sonlandırabilirsiniz.
</Callout>

### getMerchantLicence Kullanımı

`getMerchantLicence` query'si ile bir mağazanın ikas üzerinde sahip olduğu tüm lisansları görüntüleyebilirsiniz, bu lisanslara uygulama lisansları da dahildir.

```graphql
query GetMerchantLicence {
  getMerchantLicence {
    activeSubscriptionCode
    appSubscriptions {
      addedDate
      appPaymentKey
      authorizedAppId
      createdAt
      currency
      currencyCode
      currencySymbol
      deleted
      id
      lastPaymentDate
      lastPaymentDiscountRatio
      lastPaymentPeriod
      lastPaymentPeriodInDays
      lastPaymentPrice
      lastPaymentPriceWithTax
      merchantAppPaymentId
      name
      status
      storeAppId
      storeAppListingSubscriptionId
      storeAppListingSubscriptionKey
      updatedAt
    }
    fromDate
    merchantId
    period
    region
    toDate
  }
}
```

### Örnek Response

```json
{
  "data": {
    "getMerchantLicence": {
      "activeSubscriptionCode": "GROW",
      "fromDate": 1780000000000,
      "merchantId": "11111111-aaaa-bbbb-cccc-222222222222",
      "period": "YEARLY",
      "region": "TR",
      "toDate": 1811536000000,
      "appSubscriptions": [
        {
          "id": "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb",
          "name": "Stok Yönetimi Pro",
          "authorizedAppId": "cccccccc-4444-5555-6666-dddddddddddd",
          "storeAppId": "eeeeeeee-7777-8888-9999-ffffffffffff",
          "storeAppListingSubscriptionId": "11112222-aaaa-bbbb-cccc-333344445555",
          "storeAppListingSubscriptionKey": "stok-pro-basic-try",
          "status": "ACTIVE",
          "deleted": false,
          "addedDate": 1750000000000,
          "lastPaymentDate": 1750000000000,
          "lastPaymentPeriod": "YEARLY",
          "lastPaymentPeriodInDays": 312,
          "lastPaymentPrice": 2140.27,
          "lastPaymentPriceWithTax": 2568.32,
          "lastPaymentDiscountRatio": null,
          "currency": "TRY",
          "currencyCode": "TRY",
          "currencySymbol": "₺",
          "appPaymentKey": null,
          "merchantAppPaymentId": "55556666-aaaa-bbbb-cccc-777788889999",
          "createdAt": null,
          "updatedAt": null
        }
      ]
    }
  }
}
```

Response alanları ve bu alanların açıklamaları aşağıdaki şekildedir.

| Alan | Açıklama |
|------|----------|
| `activeSubscriptionCode` | Mağazanın aktif ikas plan kodu (`START`, `GROW`, `PREMIUM`, `SCALE`, `SCALE_PLUS` vb.) |
| `fromDate` / `toDate` | ikas lisansının geçerlilik tarihleri (Unix timestamp, ms) |
| `merchantId` | Mağazanın benzersiz ID'si |
| `period` | Ödeme periyodu: `YEARLY` veya `MONTHLY` |
| `region` | Mağazanın bulunduğu bölge (`TR`, `EU` vb.) |

`appSubscriptions` alanları ve bu alanların açıklamaları aşağıdaki şekildedir.

| Alan | Açıklama |
|------|----------|
| `authorizedAppId` | Uygulamanızın client ID'si — kendi uygulamanızı bulmak için kullanın |
| `storeAppListingSubscriptionKey` | Partner panelinde tanımladığınız **Konfigürasyon Anahtarı** — hangi planın aktif olduğunu bu alanla belirlersiniz |
| `storeAppListingSubscriptionId` | Satın alınan plan listing'inin ID'si |
| `storeAppId` | Mağazadaki uygulama kurulumunun ID'si |
| `status` | Abonelik durumu: `ACTIVE`, `WILL_BE_REMOVED`, `REMOVED` |
| `deleted` | Aboneliğin silinip silinmediği |
| `addedDate` | Planın satın alındığı tarih (Unix timestamp, ms) |
| `lastPaymentDate` | Son ödeme tarihi (Unix timestamp, ms) |
| `lastPaymentPeriod` | Son ödeme periyodu: `YEARLY` veya `MONTHLY` |
| `lastPaymentPeriodInDays` | Ödenen gün sayısı — ikas lisans süresiyle orantılı hesaplanır |
| `lastPaymentPrice` | Ödenen tutar (KDV hariç) |
| `lastPaymentPriceWithTax` | Ödenen tutar (KDV dahil) |
| `lastPaymentDiscountRatio` | Uygulanan indirim oranı (`0`–`100`); indirim yoksa `null` döner |
| `currency` / `currencyCode` / `currencySymbol` | Para birimi bilgileri |

### Abonelik Kontrolü

Uygulamanız gerekli durumlarda mağazanın aktif aboneliğini doğrulamalıdır. ikas SDK'nın standart akışını kullanarak bu kontrolü şu şekilde yapabilirsiniz:

<Callout type="info" title="ikas SDK Kurulumu">
Aşağıdaki örnekler ikas starter projesindeki `getIkas` ve `getUserFromRequest` helper'larını kullanmaktadır. Kurulum ve detaylar için [ikas SDK](../ikas-sdk) sayfasına bakın.
</Callout>

Önce `graphql-requests.ts` dosyasına query'yi ekleyin:

```typescript title="src/lib/ikas-client/graphql-requests.ts"
import { gql } from 'graphql-request';

export const GET_MERCHANT_LICENCE = gql`
  query GetMerchantLicence {
    getMerchantLicence {
      appSubscriptions {
        authorizedAppId
        storeAppListingSubscriptionKey
        status
        deleted
      }
    }
  }
`;
```

Ardından `pnpm codegen` komutunu çalıştırarak type'ları güncelleyin. Sonra API route'unuzda abonelik kontrolünü yapın:

```typescript title="src/app/api/check-subscription/route.ts"
import { NextRequest, NextResponse } from 'next/server';
import { getIkas } from '@/helpers/api-helpers';
import { getUserFromRequest } from '@/lib/auth-helpers';
import { AuthTokenManager } from '@/models/auth-token/manager';

export async function GET(request: NextRequest) {
  const user = getUserFromRequest(request);
  if (!user) {
    return NextResponse.json({ error: 'Authentication required' }, { status: 401 });
  }

  const token = await AuthTokenManager.get(user.authorizedAppId);
  if (!token) {
    return NextResponse.json({ error: 'Token not found' }, { status: 401 });
  }

  const ikasClient = getIkas(token);

  const licenceResponse = await ikasClient.queries.getMerchantLicence();
  const subscriptions = licenceResponse.data?.getMerchantLicence?.appSubscriptions ?? [];

  // JWT'den gelen authorizedAppId ile kendi uygulamanızın aktif aboneliğini bulun
  const mySubscription = subscriptions.find(
    (sub) =>
      sub.authorizedAppId === user.authorizedAppId &&
      sub.status === 'ACTIVE' &&
      !sub.deleted
  );

  if (!mySubscription) {
    return NextResponse.json({ error: 'No active subscription' }, { status: 403 });
  }

  // Hangi planın aktif olduğunu belirleyin
  const planKey = mySubscription.storeAppListingSubscriptionKey;
  // Örnek: "stok-pro-basic-try" veya "stok-pro-premium-try"

  return NextResponse.json({ planKey });
}
```

`authorizedAppId` değeri JWT payload'ından otomatik olarak gelir — `getUserFromRequest` bu değeri token'dan çözümleyerek döner. Dolayısıyla `process.env.APP_CLIENT_ID` gibi bir sabit kullanmanıza gerek yoktur.

---

## Planları Test Etme

Uygulamanızı yayınlamadan önce, yaptığınız plan düzenlemeleri doğru bir şekilde çalıştığından emin olmanız gerekmektedir. Uygulamanızı yayınlamadan plan satın alımı senaryosunu test etmek için sırasıyla aşağıdaki adımları takip edin.

1. Uygulamanızın Planlar sayfasına giderek kullanacağınız tüm planları oluşturun.
2. Uygulamanızın [Yayınlama](https://builders.ikas.com/tr/docs/app-development/admin-app/build-publish) sayfasına gidin.
   - Uygulamanızın bölgelerini ayarlayın ve bu bölgelere planları ekleyin.
   - Uygulamanızın detaylarını belirleyin.
   - Uygulamanızın mağaza içeriğini ekleyin ve plan açıklamalarını tamamlayın.
   - Son aşamaya gelin ve uygulamanızı incelemeye göndermeden "Kaydet ve Sonra Devam Et" seçerek yaptığınız işlemleri kaydedin.
3. Uygulamanızın [İzin Verilen Mağazalar](https://builders.ikas.com/tr/docs/app-development/admin-app/allowed-app) sayfasına gidin. 
4. Bir geliştirme mağazasını uygulamanıza izin verilen mağaza olarak ekleyin. Eğer bir geliştirme mağazanız yoksa önce mağazayı oluşturun.
5. Oluşturduğunuz geliştirme mağazasına gidin ve Uygulamalarım sayfasından izin vermiş olduğunuz uygulamayı indirin.
6. Uygulama kurulumu tamamlandıktan sonra sağ üst kısımdaki "Planı Yönet" butonuna tıklayın.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-managed-plan-page.png"
  alt="ikas partner managed plan page"
/>

7. Gelen planlar arasından test etmek istediğiniz uygulamayı "Planı Seç" diyerek seçin.
8. Gelen ekranda adres bilgilerini ve kart bilgilerini girin.
   - Girdiğiniz adres bilgileri doğru olmak zorunda değildir.
   - Girdiğiniz kart bilgilerinde ay/yıl kuralına uyduğunuz sürece geri kalan bilgiler doğru olmak zorunda değildir.
   - Bu durum sadece kendi uygulamalarınızı, kendi mağazalarınızda test edebilmeniz amacıyla izin verilmiş bir durumdur, başka bir mağazada denediğinizde hata alırsınız.

<img
  className="mx-auto my-6 rounded-lg border border-zinc-200 shadow-sm dark:border-zinc-800"
  src="/media/ikas-partner/partner-managed-plan-buy.png"
  alt="ikas partner managed plan buy"
/>

9. Plan satın alımı tamamlandığında doğru bir şekilde webhook aldıysanız ve getMerchantLicence içeriğinde uygulamanız için lisans bilgisi görebiliyorsanız, uygulama tarafında gerekli işlemleri tamamlayabilirsiniz demektir.

---

## Planlarda Dikkat Edilmesi Gerekenler

<Accordions type="single">
  <Accordion
    value="s1"
    title="Türkiye bölgesinde sadece Yıllık plan kullanılabilir.">
    Uygulama lisansları direkt olarak mağazanın ikas lisansına bağlı olarak çalışır. Türkiye mağazaları sadece yıllık kullanabildiklerinden dolayı, sadece yıllık uygulama lisansı satın alabilirler.
  </Accordion>
  <Accordion
    value="s2"
    title="Ödenecek tutar, kalan lisans gününe göre hesaplanır.">
    Uygulama lisansları direkt olarak mağazanın ikas lisansına bağlı olarak çalışır. Yani, mağaza lisansı bittiğinde uygulama lisansı da biter. Dolayısı ile mağazanın ödediği tutar, kalan ikas lisansı günü oranında hesaplanır.
  </Accordion>
  <Accordion
    value="s3"
    title="Deneme süreleri planlara eklenir, uygulama tarafında yönetilir.">
    Uygulama planlarınızı oluştururken, hangi plan türünün deneme süreci olacağını belirlersiniz. Uygulama geliştirici olarak sorumluluğunuz, uygulamanızı, indiren mağaza sanki bu planı satın almış gibi davrandırmanızdır. Mağazanın entegrasyonunuza bağlandığı süre, belirlediğiniz deneme süresini aştığında, kendi tercihinize göre mağazayı "Ücretsiz" plana düşürebilir ya da tamamen uygulamanıza erişimini kesebilirsiniz.
  </Accordion>
  <Accordion
    value="s4"
    title="Ücretsiz plan, mağazanın uygulamanız için planı olmama durumudur.">
    Ücretsiz planlar yapısı gereği, mağazanın uygulamanız için hiç planı olmaması durumudur. Dolayısı ile "Ücretsiz" planlar için bir plan konfigürasyonu ekleyemezsiniz ve uygulamanın "Ücretsiz" plan kullandığını yine uygulamanız için planı olmamasından anlarsınız.
  </Accordion>
</Accordions>

---

## Plan Değişikliği ve Plan Yükseltme

<Callout type="info" title="Yakında">
Mağazaların aktif planlarını değiştirme özelliği henüz mevcut değildir. Bu özellik kullanıma açıldığında bu sayfa güncellenecektir.
</Callout>

---

## Sonraki Adımlar

### Satış Takibi

Uygulamanızın yaptığı satışları ve kurulum yapan mağazalardan hangisinin uygulamanızı aldığı gibi verileri Uygulama Performansı sayfasından takip edersiniz.

Uygulama Performansı sayfasına;

`https://partners.ikas.com/admin/application-details/{{uygulama_client_id}}/analytics` adresinden gidebilirsiniz

Detaylı bilgi için **[Uygulama Performansı](https://builders.ikas.com/tr/docs/app-development/admin-app/app-analytics)** sayfasına bakın.

### Hak Ediş

Uygulamanızın yaptığı satışlardan kazandığınız hak edişi ve hak edişler ne zaman alabileceğiniz gibi detayları Hak Ediş ve Ödemeler sayfasından takip edersiniz.

Hak Ediş ve Ödemeler sayfasına;

`https://partners.ikas.com/admin/payouts` adresinden gidebilirsiniz

Detaylı bilgi için **[Partner Hak Edişleri](https://builders.ikas.com/tr/docs/ikas-partner/partner-payouts)** sayfasına bakın.