Skip to content

🔄 Tekrarlayan Ödeme İşlemleri

📝 Tekrarlayan Ödeme Oluşturma

Endpoint

POST /recurring

Açıklama

Düzenli aralıklarla otomatik olarak gerçekleştirilecek tekrarlayan ödeme (abonelik) oluşturur. Günlük, aylık veya yıllık periyotlarla ödeme planı yapılabilir.

Headers

http
Authorization: Bearer {token}
Content-Type: application/json

Request: RecurringPaymentRequest

json
{
  "reference": "SUB-2026-001",
  "amount": 99.90,
  "currencyCode": "TRY",
  "paymentSystemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "explanation": "Premium abonelik - aylık",
  "ownerDescription": {
    "fullName": "Ayşe Demir",
    "email": "ayse.demir@example.com",
    "phone": "+905559876543",
    "cardId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  },
  "paymentChannel": "mobile",
  "firstPaymentTime": "2026-03-01T00:00:00Z",
  "lastPaymentTime": "2027-03-01T00:00:00Z",
  "frequency": "monthly",
  "interval": 1,
  "dayOfMonth": 1
}

Parametreler

ParametreTipZorunluAçıklama
referencestringAbonelik referans kodu (max 150 karakter)
amountnumberHer ödeme için tutar
currencyCodestringPara birimi kodu (örn: TRY, USD, EUR)
paymentSystemIduuidKullanılacak ödeme sistemi ID'si
explanationstringÖdeme açıklaması (max 400 karakter)
ownerDescriptionobjectKart sahibi bilgileri
paymentChannelstringÖdeme kanalı (max 50 karakter)
firstPaymentTimedatetimeİlk ödeme tarihi (ISO 8601)
lastPaymentTimedatetimeSon ödeme tarihi (ISO 8601)
frequencystringÖdeme sıklığı: daily, monthly, yearly
intervalintegerPeriyot aralığı (1-30 arası)
monthOfYearinteger⚠️Yılın hangi ayı (1-12) - yearly için zorunlu
dayOfMonthinteger⚠️Ayın hangi günü (1-30) - monthly/yearly için zorunlu

Frequency (Sıklık) Değerleri

DeğerAçıklamaÖrnek
dailyGünlükHer 1 gün, her 5 gün vb.
monthlyAylıkHer ayın 1'i, her ayın 15'i vb.
yearlyYıllıkHer yıl Ocak ayının 1'i vb.

Response

Başarılı İstek (200 OK)

json
{
  "success": true,
  "error": null,
  "shouldBeOwnerConfirmation": false,
  "ownerId": "OWN-123456",
  "orderStatus": "active"
}

Hata (403 Forbidden)

json
{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3",
  "title": "Forbidden",
  "status": 403,
  "detail": "Insufficient permissions",
  "instance": "/recurring"
}

📋 Tekrarlayan Ödemeleri Listeleme

Endpoint

GET /recurring

Açıklama

Mevcut tekrarlayan ödemeleri listeler. Filtreleme, sayfalama ve sıralama destekler.

Query Parametreleri

ParametreTipZorunluAçıklama
SubscriptionstringAbonelik ID'sine göre filtreleme
PageintegerSayfa numarası (varsayılan: 1)
PageSizeintegerSayfa başına kayıt sayısı
OrderBystringSıralama alanı
DirstringSıralama yönü: asc veya desc

Örnek İstek

http
GET /recurring?Page=1&PageSize=10&OrderBy=createdAtUtc&Dir=desc

Response: RecurringPaymentModelPagedList

json
{
  "currentPage": 1,
  "pageCount": 5,
  "totalCount": 47,
  "hasNext": true,
  "hasPrevious": false,
  "stateKey": "abc123",
  "pages": [1, 2, 3, 4, 5],
  "list": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "amount": 99.90,
      "currencyCode": "TRY",
      "status": "active",
      "createdAtUtc": "2026-02-16T10:00:00Z",
      "reference": "SUB-2026-001",
      "explanation": "Premium abonelik - aylık",
      "interval": 1,
      "dayOfMonth": 1,
      "monthOfYear": null,
      "nextPaymentAtUtc": "2026-03-01T00:00:00Z",
      "lastPaymentAtUtc": "2026-02-01T00:00:00Z",
      "phone": "+905559876543",
      "email": "ayse.demir@example.com"
    }
  ]
}

✏️ Tekrarlayan Ödeme Güncelleme

Endpoint 1: Subscription ID ile Güncelleme

PUT /recurring/subscription/{subscription}

Endpoint 2: UUID ile Güncelleme

PUT /recurring/{id}

Açıklama

Mevcut bir tekrarlayan ödemenin parametrelerini günceller. Tutar, para birimi, sıklık ve diğer ayarlar değiştirilebilir.

Path Parametreleri

ParametreTipAçıklama
subscriptionstringAbonelik ID'si (string)
iduuidTekrarlayan ödeme UUID'si

Request: UpdateRecurringPaymentRequest

json
{
  "amount": 119.90,
  "currencyCode": "TRY",
  "explanation": "Premium Plus abonelik - aylık",
  "lastPaymentTime": "2028-03-01T00:00:00Z",
  "paymentSystemGroupId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "paymentSystemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "paymentChannel": "mobile",
  "frequency": "monthly",
  "status": "active",
  "interval": 1,
  "dayOfMonth": 1
}

Parametreler

ParametreTipZorunluAçıklama
amountnumberGüncel ödeme tutarı
currencyCodestringPara birimi kodu
explanationstringAçıklama (max 400 karakter)
lastPaymentTimedatetimeSon ödeme tarihi
paymentSystemGroupIduuidÖdeme sistemi grup ID'si
paymentSystemIduuidÖdeme sistemi ID'si
paymentChannelstringÖdeme kanalı (max 50 karakter)
frequencystringÖdeme sıklığı
statusstringDurum değişikliği
intervalintegerPeriyot aralığı (1-30)
monthOfYearinteger⚠️Ayın günü (1-12)
dayOfMonthinteger⚠️Ayın günü (1-30)

Response

Başarılı İstek (200 OK)

json
{
  "success": true
}

Örnek Kullanımlar

cURL - Oluşturma

bash
curl -X POST https://pgw.klogs.dev/recurring \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "SUB-2026-001",
    "amount": 99.90,
    "currencyCode": "TRY",
    "ownerDescription": {
      "fullName": "Ayşe Demir",
      "email": "ayse.demir@example.com",
      "phone": "+905559876543",
      "cardId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    },
    "firstPaymentTime": "2026-03-01T00:00:00Z",
    "frequency": "monthly",
    "interval": 1,
    "dayOfMonth": 1
  }'

JavaScript - Listeleme

javascript
const response = await fetch('https://pgw.klogs.dev/recurring?Page=1&PageSize=10', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data.list);

C# - Güncelleme

csharp
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");

var updateRequest = new {
    amount = 119.90,
    currencyCode = "TRY",
    status = "active"
};

var content = new StringContent(
    JsonSerializer.Serialize(updateRequest),
    Encoding.UTF8,
    "application/json"
);

var subscriptionId = "SUB-2026-001";
var response = await client.PutAsync(
    $"https://pgw.klogs.dev/recurring/subscription/{subscriptionId}",
    content
);

Notlar

  • Tekrarlayan ödemeler oluşturulurken firstPaymentTime gelecekte olmalıdır
  • interval değeri 1-30 arasında olmalıdır
  • Aylık ödemeler için dayOfMonth parametresi zorunludur
  • Yıllık ödemeler için dayOfMonth ve monthOfYear parametreleri zorunludur
  • Abonelik durumu active olduğunda ödemeler otomatik işlenir
  • Aboneliği durdurmak için status değerini disabled olarak güncelleyin
  • Başarısız ödemeler için otomatik retry mekanizması vardır

İlişkili Endpointler