Ödemeleri Listeleme
Oluşturduğunuz her ödeme — hosted checkout, direkt API, pazaryeri split — aynı iki okuma endpoint'inden sorgulanır: filtrelenmiş listeler için GET /payments, tek bir ödemenin tüm detayı için GET /payments/:id. Dashboard'lar, mutabakat işleri, müşteri hizmetleri sorguları ve sipariş durumu kontrolleri için kullanın.
İki endpoint de sunucu tarafı erişim token'ınızla (at_live_…) düz Bearer kimlik doğrulaması kullanır — salt-okuma çağrılarında istek imzası gerekmez.
Yanıtlardaki tüm tutarlar minor-unit (kuruş) integer olarak döner: "amount": 10050 = ₺100,50.
Ödemeleri listeleme
GET /payments, en yeniden eskiye sıralı, sayfalanmış bir liste döner. Filtreler:
| Query parametresi | Tip | Anlamı |
|---|---|---|
status | string | Yalnızca bu durumdaki ödemeler (bkz. durum referansı) |
customerId | string | Yalnızca bu müşteriye ait ödemeler |
page | integer | Sayfa numarası |
limit | integer | Sayfa boyutu |
includeLegs | boolean | true: Checkout Formu parçalı ödemelerinin parçalarını da ayrı satır olarak getirir. Varsayılan false: parçalı ödeme yalnız ana ödemesiyle tek satırdır |
Parçalı ödemeyle ilgili satırlar split alanı taşır: splitPaymentId, role (PARENT ana ödeme, LEG parça) ve parçada parentPaymentId ile legSequence. Ayrıntı: Parçalı Ödeme › Liste ve detay.
curl "https://api-gateway.lunixi.com/api/v1/payments?status=CAPTURED&customerId=cus_8f2a9c&page=1&limit=20" \
-H "Authorization: Bearer at_live_5f3e2b1a..."Yanıt
{
"status": "success",
"code": "PAYMENTS_LISTED",
"data": {
"data": [
{
"id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
"amount": 10050,
"currency": "TRY",
"merchantId": "m_…",
"status": "CAPTURED",
"createdAt": 1780740000000,
"updatedAt": 1780740002500
}
],
"total": 137,
"page": 1,
"limit": 20,
"totalPages": 7
},
"statusCode": 200,
"requestId": "…"
}Liste satırları kompakttır — id, amount (minor unit; çekilen tutar, taksitte vade farkı dahil), currency, merchantId, status, createdAt/updatedAt (epoch milisaniye). Tam kayıt için GET /payments/:id çağırın.
Tek ödeme detayı
GET /payments/:id, ödemenin tam kaydını döner; attempt'ler ve yönlendirme kararının özeti de dahildir.
- Attempt'ler — bir ödeme birden fazla kez denenebilir (örneğin akıllı yönlendirme başka bir sağlayıcı kimliğine failover yaptığında). Her attempt kendi sonucunu kaydeder; nihai duruma tam olarak nasıl gelindiğini görürsünüz.
- Yönlendirme kararı — ödemenin neden o rotaya gönderildiğinin niteliksel özeti: hangi yönlendirme sonucunun uygulandığı ve failover olup olmadığı. İç skorlama detayları dışarıya açılmaz.
curl https://api-gateway.lunixi.com/api/v1/payments/pay_9f3a1c \
-H "Authorization: Bearer at_live_5f3e2b1a..."Yanıt
{
"status": "success",
"code": "PAYMENT_FOUND",
"data": {
"id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
"amount": 10050,
"currency": "TRY",
"merchantId": "m_…",
"status": "CAPTURED",
"createdAt": 1780740000000,
"updatedAt": 1780740002500,
"orderId": "ORD-84722",
"paymentChannel": "WEB",
"locale": "tr",
"installment": 1,
"is3D": true,
"metadataJson": "{}",
"description": "Sipariş #84722 ödemesi",
"providerCode": "…",
"attemptCount": 2,
"recoveredAfterRetry": true,
"recoveryAttemptCount": 1,
"recoveryProviderPathJson": "[…]"
},
"details": {
"capturedAmount": "10050",
"refundedAmount": "0",
"remainingCapturable": "0",
"remainingRefundable": "10050",
"events": [ "…ödeme event zaman çizelgesi…" ],
"routingSummary": { "…niteliksel rota kararı…": "…" },
"attemptHistory": [ "…her çekim denemesi için bir kayıt…" ],
"card": { "…maskeli kart bilgisi…": "…" },
"threeD": {
"mode": "…",
"liabilityShiftGranted": true,
"post3DFailoverUsed": false
}
},
"statusCode": 200,
"requestId": "…"
}data bloğu ödeme kaydının kendisidir; details bloğu settlement tutarlarını (capturedAmount, refundedAmount, remainingCapturable, remainingRefundable — minor-unit string), event zaman çizelgesini, attempt geçmişini ve yönlendirme/3-D özetlerini ekler.
Ödeme durumları
status alanı her zaman şu 12 değerden tam olarak birini taşır:
| Durum | Anlamı |
|---|---|
INITIATED | Ödeme kaydı oluşturuldu; işleme henüz bir sonuca varmadı |
PROCESSING | Ödeme aktif olarak işleniyor |
AWAITING_3D | Alıcı 3-D Secure'a yönlendirildi ve henüz tamamlamadı |
AUTHORIZED | Tutar alıcının kartında bloke; henüz capture edilmedi (ön provizyon) |
CAPTURED | Yetkilendirilen tutarın tamamı çekildi |
PARTIALLY_CAPTURED | Yetkilendirilen tutarın yalnızca bir kısmı çekildi |
REFUNDED | Çekilen tutarın tamamı iade edildi |
PARTIALLY_REFUNDED | Çekilen tutarın bir kısmı iade edildi |
VOIDED | Yetkilendirme capture edilmeden serbest bırakıldı — para hareket etmedi |
EXPIRED | Capture edilmemiş bir yetkilendirmenin süresi doldu ve otomatik serbest bırakıldı |
FAILED | Ödeme başarısız oldu; para çekilmedi |
NEEDS_RECONCILIATION | Nihai sonuç otomatik doğrulanamadı; ödeme mutabakat sürecinde |
Ters ibraz finansal durumu ezmez — dispute durumu payment.disputed webhook'u ve Ters İbraz yüzeyinden izlenir; ödeme CAPTURED/REFUNDED olarak kalır.
NEEDS_RECONCILIATION durumunu başarısız değil belirsiz olarak ele alın: nihai bir duruma çözülene kadar bu ödemeye karşılık iade yapmayın, tekrar denemeyin, siparişi teslim etmeyin. Çözüldüğünü GET /payments/:id ile sorgulayarak ya da ilgili webhook'u dinleyerek öğrenirsiniz.
Analytics
Listeyi tamamlayan iki salt-okuma analytics endpoint'i vardır (Bearer):
GET /payments/analytics/failover-recovery— akıllı yönlendirmenin başka bir rotaya failover yaparak ödemeyi ne sıklıkla kurtardığı: trafiğiniz üzerinden kurtarılan hacim ve adetler.GET /payments/analytics/provider-credentials/:id— tek bir sağlayıcı kimliğinin performansı (:id, panelde yapılandırdığınız credential'dır): ona atfedilen başarı oranları ve hacimler.
İkisi de toplulaştırılmış ve nitelikseldir — iç yönlendirme modelini değil, sonuçları raporlar.
Hatalar
| Durum | Ne olur / ne yapmalı |
|---|---|
| Bilinmeyen ödeme id'si | 404 — id mevcut değil ya da başka bir merchant'a ait. |
Geçersiz filtre değeri (örn. bilinmeyen status) | Doğrulama hatası — 12 enum değerinden birini birebir yazıldığı gibi kullanın. |
| Eksik veya geçersiz API key | 401 — erişim token'ınızı Authorization: Bearer at_live_… olarak gönderin. |
Sonraki adımlar
- Webhooks — aynı durum değişikliklerini poll etmek yerine push olarak alın
- Ön Provizyon, Capture & İptal —
AUTHORIZEDödemeler üzerinde işlem yapın - İadeler — capture edilmiş ödemeler üzerinde işlem yapın
- Ters İbraz —
payment.disputedsonrasında ne olur