İçeriğe geç
PaymentGateway
API

Ödeme oluşturma

Tek uç nokta; satış, ön provizyon, 3D'li/3D'siz ve puanlı ödemelerin hepsini başlatır. Hangi POS'un kullanılacağına yönlendirme motoru karar verir.

POST/v1/paymentsIdempotency-Key desteklenir
curl https://api.paymentgateway.com.tr/v1/payments \
  -H "Authorization: Bearer pgw_test_xxxxxxxx" \
  -H "Idempotency-Key: siparis-1001" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 15990,
    "currency": "TRY",
    "installment": 3,
    "card": {
      "number": "4111111111111111",
      "expMonth": "12",
      "expYear": "2030",
      "cvv": "123",
      "holder": "ALI VELI"
    },
    "merchantOrderId": "1001",
    "description": "Siparis #1001",
    "customer": { "email": "ali@example.com", "ip": "203.0.113.7" },
    "returnUrl": "https://magaza.example/odeme/sonuc"
  }'

İstek alanları

AlanTürAçıklama
amountintegerZorunlu. Kuruş cinsinden tutar (15990 = 159,90). Sıfırdan büyük olmalı.
currencystringTRY (varsayılan), USD, EUR, GBP.
installmentinteger1–12. Varsayılan 1 (tek çekim). Seçilen POS hesabında o taksit açık olmalı.
kindstringsale (varsayılan) ya da preauth (ön provizyon; sonradan kapatılır).
securebooleanVarsayılan true (3D Secure). false ise 3D'siz (nonsecure) satış; hesabınızın politikası buna izin vermelidir.
cardobjectnumber, expMonth (01–12), expYear (2 veya 4 hane), cvv, holder. Luhn ve son kullanma tarihi doğrulanır.
merchantOrderIdstringSizin sipariş numaranız (en fazla 64 karakter). Listelemede aranabilir.
descriptionstringSerbest açıklama.
customerobjectemail, name, phone, ip. Müşteri IP'sini iletmeniz önerilir (bazı bankalar zorunlu tutar); verilmezse istek yapan IP kullanılır.
returnUrlstring3D sonrası müşterinin döneceği https adresi (test modunda http de olur).
pointsobject{ amount }: kuruş karşılığı puan kullanımı. Yalnızca puan satışı destekleyen sağlayıcılarda.
metadataobjectÖdemeye iliştirilen serbest JSON; webhook ve yanıtlarda geri döner.
accountIdstringVerilirse yönlendirme atlanır ve doğrudan bu POS hesabı kullanılır.

Yanıt

Başarılı oluşturma 201 döner; ödemenin durumu status alanındadır.

Tahsil edilmiş ödeme (3D'siz)
{
  "id": "pay_01J8X...",
  "object": "payment",
  "mode": "test",
  "status": "captured",
  "kind": "sale",
  "amount": 15990,
  "currency": "TRY",
  "installment": 3,
  "capturedAmount": 15990,
  "refundedAmount": 0,
  "secure": false,
  "merchantOrderId": "1001",
  "provider": { "code": "garanti", "accountId": "acc_..." },
  "authCode": "123456",
  "rrn": "412345678901",
  "card": { "bin": "411111", "last4": "1111", "brand": "visa", "type": "credit", "issuer": "garanti", "origin": "domestic" },
  "commission": { "rate": 2.49, "amount": 398, "net": 15592 },
  "createdAt": "2026-03-02T09:14:22Z",
  "completedAt": "2026-03-02T09:14:23Z"
}
HTTPDurumAnlamı
201captured / authorized / requires_action / pendingÖdeme oluşturuldu; durum alanına bakın.
402declined / failedBanka reddetti veya uygun POS bulunamadı. error alanı nedeni içerir.
422validation_failedAlan doğrulaması: error.details alan → mesaj haritasıdır.

Yanıtı belirsiz kalan ödemeler

Bankadan yanıt alınamazsa (zaman aşımı gibi) ödeme pending kalır ve başka bir POS'a asla yönlendirilmez: sistem önce bankada ödemeyi sorgular; sonuç bulunursa kesinleştirir, bulunamazsa reddedilmiş sayar. Kesinleşene kadar webhook'u bekleyin ya da sorgu ucunu kullanın. Aynı siparişi kendiniz yeniden göndermeyin — Idempotency-Key kullanın.

Ödemeleri listeleme ve okuma

GET/v1/payments/{id}ödeme + denemeler + işlem hareketleri
GET/v1/paymentsfiltreli liste
Sorgu parametresiAçıklama
statuscaptured, declined, refunded ...
providerSağlayıcı kodu (ör. garanti)
issuerKartı çıkaran banka anahtarı
qSipariş no, ödeme no, son 4 hane vb. arama
fromto: YYYY-MM-DD ya da RFC3339; to tarih ise gün sonu dahildir
minAmountmaxAmount (kuruş)
limitoffset ile sayfalama. Yanıt: { data: [...], total }

Ödeme detayında her POS denemesi (attempts) ve her banka hareketi (transactions) görünür; failover ve mutabakat kararlarını buradan izleyebilirsiniz.