İçeriğe geç

Ödeme Linkleri

Ödeme linki, Kart Handoff entegrasyonu kurmadan tek bir ödeme talebi için paylaşılabilir bir URL oluşturmanızı sağlar. Alıcı bu URL’i kendi tarayıcısında açar, taksit seçer (varsa) ve ödemeyi kendisi tamamlar; kartı sizin checkout’unuz toplamaz. POST /v1/payments + handoff akışına alternatiftir; kart yüzeyiyle hiç uğraşmak istemediğiniz durumlarda (örn. bir siparişi telefonda/mesajla paylaşmak) kullanışlıdır.

POST /v1/payment-links
Authorization: Bearer ptk_live_…
Content-Type: application/json
{
"amount": 125050,
"terminalId": "trm_3Kd9x",
"customerCommissionShareBps": 0,
"description": "Sipariş #8841",
"redirectUrl": "https://magazan.example/odeme"
}
Alan Zorunlu Açıklama
amount Evet Talep edeceğiniz taban tutar, kuruş cinsinden tamsayı (1.250,50 TL → 125050). Bkz. Tutar ve Para Birimi.
terminalId Evet Ödemenin yönlendirileceği terminal. Size ait ve aktif olmalıdır; aksi halde terminal_not_allowed döner.
customerCommissionShareBps Hayır Komisyonun alıcıya yansıtılacak payı, baz puan tamsayı (0-10000; %2,5 → 250). Verilmezse 0 (komisyonun tamamı size ait olur).
description Hayır Link açıklaması.
redirectUrl Hayır Ödeme sonuçlandıktan sonra alıcının yönlendirileceği adresin tabanı; oluşturma anında doğrulanır (bkz. redirectUrl davranışı).
allowedInstallmentCounts Hayır Bu link için kabul edilecek taksit sayılarının listesi. Verilmezse (ya da null) kısıtlama yoktur ve terminalinizin efektif taksit kümesi (Taksit Seçenekleri) geçerli olur. Verirseniz liste boş olamaz ve terminalinizin efektif taksit kümesinin bir alt kümesi olmalıdır; aksi halde 422 installment_not_allowed ile reddedilir. Link oluşturulduktan sonra bu kısıt değiştirilemez.

201 Created:

{
"id": "01J9K5QATN6M1PXG7VYSD3HZWB",
"token": "plk_EXAMPLE0000000000…",
"url": "https://pay.lydiagate.example/link/plk_EXAMPLE0000000000…",
"partnerReference": 42,
"status": "pending",
"amount": 125050,
"customerCommissionShareBps": 0,
"description": "Sipariş #8841",
"redirectUrl": "https://magazan.example/odeme",
"firstOpenedAt": null,
"lastOpenedAt": null,
"expiresAt": "2026-06-21T12:00:00Z",
"createdAt": "2026-06-14T12:00:00Z",
"updatedAt": "2026-06-14T12:00:00Z",
"allowedInstallmentCounts": null
}
Alan Açıklama
id Linkin kalıcı kimliği; tekil sorgu, iptal çağrıları ve webhook gövdesindeki paymentLinkId alanında kullanılır.
token url alanının gizli bileşeni. Ayrıca saklamanız gerekmez; url zaten bunu içerir.
url Alıcıyla paylaşacağınız tam adres.
partnerReference Hesabınıza özel, artan sıra numarası (görüntüleme/referans amaçlıdır).
status Linkin güncel durumu. Bkz. Yaşam döngüsü.
amount Talep ettiğiniz taban tutar (kuruş).
firstOpenedAt / lastOpenedAt Alıcının linki ilk/son açtığı an; henüz açılmadıysa null.
expiresAt Linkin son geçerlilik anı. Bkz. Süre (TTL).
createdAt / updatedAt Zaman damgaları (UTC).
allowedInstallmentCounts İstekte gönderdiğiniz taksit kısıtı, artan sıralı; kısıtlama yoksa null.
Durum Anlam
pending Link oluşturuldu; alıcı henüz açmadı.
launched Alıcı linki açtı.
initiated Bir ödeme denemesi 3D Secure’da; uçuşta. Bu durumdayken yeni bir deneme başlatılamaz. Deneme tamamlanmadan başarısız olursa link yeniden ödenebilir hale gelir.
completed Ödeme tamamlandı (terminal — sonraki bir geçiş yok).
expired Süresi (TTL) doldu, link ödenmeden geçersiz oldu (terminal).
failed Bir ödeme denemesi başarısız oldu; terminal değildir — link yeniden ödenebilir.
cancelled Siz iptal ettiniz (terminal).

Bir linkin varsayılan geçerlilik süresi, oluşturulduğu andan itibaren 7 gündür. expiresAt anı geçtiğinde link expired durumuna düşer ve artık ödenemez.

GET /v1/payment-links?status=pending&status=launched&page=0&size=20
Authorization: Bearer ptk_live_…
Parametre Açıklama
status Bir ya da daha fazla durumla filtreleme; parametreyi tekrarlayın (status=pending&status=launched).
minAmount / maxAmount Tutar aralığı (kuruş).
createdFrom / createdTo Oluşturulma zaman aralığı (UTC, ISO 8601).
page / size Sayfalama; page 0’dan başlar, size varsayılan 20’dir.

Yanıt (200 OK):

{
"items": [
{
"id": "01J9K5QATN6M1PXG7VYSD3HZWB",
"token": "plk_EXAMPLE0000000000…",
"url": "https://pay.lydiagate.example/link/plk_EXAMPLE0000000000…",
"partnerReference": 42,
"status": "pending",
"amount": 125050,
"customerCommissionShareBps": 0,
"description": "Sipariş #8841",
"redirectUrl": "https://magazan.example/odeme",
"firstOpenedAt": null,
"lastOpenedAt": null,
"expiresAt": "2026-06-21T12:00:00Z",
"createdAt": "2026-06-14T12:00:00Z",
"updatedAt": "2026-06-14T12:00:00Z",
"allowedInstallmentCounts": null
}
],
"page": 0,
"size": 20,
"hasMore": false
}
Alan Açıklama
items Bu sayfadaki linkler; her öğe oluşturma yanıtıyla aynı alanları taşır.
hasMore Dönen öğe sayısı size’a eşitse true. Sonraki sayfa için page’i bir artırın.
GET /v1/payment-links/{id}
Authorization: Bearer ptk_live_…

{id}, oluşturma ya da listeleme yanıtındaki id alanıdır (token değil).

DELETE /v1/payment-links/{id}
Authorization: Bearer ptk_live_…

Yalnızca terminal olmayan durumdaki linkler (pending / launched / initiated / failed) iptal edilebilir; başarılı çağrı linki cancelled durumuna geçirir ve güncel link kaydını döner. Zaten tamamlanmış, süresi dolmuş ya da daha önce iptal edilmiş bir linki tekrar iptal etmeye çalışmak hataya düşer (aşağıya bkz.).

redirectUrl verdiyseniz Lydia Gate bunu link oluşturma anında doğrular:

  • Adres, şeması http ya da https olan mutlak bir URL olmalıdır; değilse istek 400 validation_error ile reddedilir.
  • Hesabınız için izinli bir host listesi tanımlıysa, redirectUrl’in host’u bu listede yer almalıdır; listede olmayan bir host aynı şekilde 400 validation_error ile reddedilir. Böyle bir liste tanımlı değilse yalnızca şema kontrol edilir. Bu, POST /v1/payments’taki returnUrl doğrulamasıyla aynı open-redirect korumasıdır.

Doğrulamadan geçen redirectUrl için, alıcı ödeme sonucunu gördükten sonra:

  • Ödeme tamamlandığında{redirectUrl}/payment/success adresine,
  • Deneme başarısız olduğunda{redirectUrl}/payment/failure adresine yönlendirilir.

redirectUrl göndermezseniz alıcı, sonucu Lydia Gate’in barındırdığı sayfada görür.

Kod HTTP Sebep
payment_link_not_found 404 Link bulunamadı ya da bu partnere ait değil.
payment_link_already_paid 409 Link zaten tamamlanmış. (Nadiren: iptal isteğiniz tam o anda tamamlanan bir ödemeyle yarışırsa da aynı hata döner.)
payment_link_expired 409 Linkin süresi dolmuş; artık iptal edilemez.
payment_link_cancelled 409 Link zaten iptal edilmiş.
installment_not_allowed 422 allowedInstallmentCounts boş gönderildi ya da terminalinizin efektif taksit kümesinin alt kümesi değil.

Tam liste: Hata Kodları.

Bir link tamamlandığında ya da süresi dolduğunda Lydia Gate size bir webhook gönderir (payment_link.completed / payment_link.expired); gövdede paymentCode yerine bu sayfadaki id alanı (paymentLinkId adıyla) taşınır. Detay ve örnek gövde: Webhooks.