Yöntemleri Listeleme
GET /payments/methods, hesabınızda açık olan ödeme yöntemlerini döner: her yöntemin sağlayıcıları, sağlayıcıyı kimin seçtiği, alıcıdan istenen alanlar, tutar sınırları, para birimleri ve alıcının yapması gerekebilecek işlemler. Ödemeyi POST /payments/direct/payment ile başlatmadan önce bu yanıtı okuyun. Checkout Formu aynı listeyi kullanır.
Listede yalnız Checkout Formu ayarlarınızda açık olan (panelde Ödeme → Form Ayarları) ve en az bir sağlayıcısı bağlı olan yöntemler yer alır. Yöntemler ve sağlayıcılar Form Ayarları'nda verdiğiniz sırayla gelir; bkz. Sıra.
Akış
Yöntemleri listeleyin
GET /payments/methods çağırın. Tek bir yöntemin satırını okumak için ?paymentMethod=<KOD> ekleyin; bkz. Süzgeç.
Sağlayıcıyı belirleyin
Yöntem satırındaki providerSelectionMode sağlayıcıyı kimin seçtiğini söyler; bkz. Sağlayıcı seçimi.
BUYER: birden fazla sağlayıcı bağlıysaproviders[]listesini alıcıya gösterin; alıcının seçtiği sağlayıcınınproviderCode'unu gönderin.PLATFORM:providerCodeisteğe bağlıdır. Sağlayıcıları alıcıya gösterip seçtiği sağlayıcının kodunu gönderebilirsiniz; göndermezseniz platform bağlı sağlayıcılardan birini seçer.
Alanları doldurun
Sağlayıcının inputFields tanımındaki alanları alıcıdan alın ya da prefill ile alıcı verisinden doldurun; bkz. Yöntem alanları.
Ödemeyi başlatın
POST /payments/direct/payment ile paymentMethod'u ve yöntemin bloğunu (ör. mobileBilling) gönderin. Blokta alanlar tanımdaki key adıyla, gerekiyorsa providerCode ile gelir → Payment.
İstek
GET https://api-gateway.lunixi.com/api/v1/payments/methodsUç Step-Up kimlik doğrulaması ister (Bearer token ve Ed25519 imza başlıkları); gövdesi olmadığı için Digest başlığı gönderilmez. İmzanın kuruluşu Kimlik Doğrulama sayfasındadır. Uç hesabınızda Payment Gateway ürününün açık olmasını ister.
Süzgeç (?paymentMethod=)
GET https://api-gateway.lunixi.com/api/v1/payments/methods?paymentMethod=MOBILE_BILLING| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
paymentMethod | string | Hayır | Yöntem kodu, büyük harfle (ör. MOBILE_BILLING, WALLET, CARD). QR kodu QR_CODE olarak okunur |
- Parametre yoksa açık bütün yöntemler döner.
- Parametre varsa yanıt yine
methodslistesidir ve yalnız o yöntemin satırını taşır. Satır, süzgeçsiz listedeki satırın aynısıdır. - Yöntem form ayarlarınızda kapalıysa ya da bağlı sağlayıcısı yoksa yanıt
200ve{ "methods": [] }olur; hata dönmez. - Tanınmayan kod, küçük harfle yazılmış kod (
mobile_billing), boş değer (?paymentMethod=) ve tekrarlanan parametre400payment.method.unknownalır. Geçerli kodlardetails.allowedlistesindedir; bkz. Hatalar. - Diğer sorgu parametreleri yok sayılır.
Yanıt
{
"status": "success",
"code": "SUCCESS",
"message": "…",
"data": {
"methods": [
{
"paymentMethod": "CARD",
"category": "CARD",
"blockName": "card",
"displayName": "Kart",
"providerSelection": "ROUTED",
"providerSelectionMode": "PLATFORM",
"actionTypes": ["REDIRECT"],
"currencies": ["TRY"],
"minAmount": null,
"maxAmount": null,
"preauth": true,
"providers": [],
"splitEligible": true,
"splitBehavior": "HOLD_CAPTURE"
},
{
"paymentMethod": "MOBILE_BILLING",
"category": "TELCO",
"blockName": "mobileBilling",
"displayName": "Faturana Yansıt",
"providerSelection": "OPTIONAL",
"providerSelectionMode": "PLATFORM",
"actionTypes": ["OTP"],
"currencies": ["TRY"],
"minAmount": 100,
"maxAmount": 50000,
"preauth": false,
"providers": [
{
"providerCode": "<providerCode>",
"displayName": "<sağlayıcının görünen adı>",
"logoUrl": "https://…",
"actionTypes": ["OTP"],
"currencies": ["TRY"],
"minAmount": 100,
"maxAmount": 50000,
"preauth": false,
"inputFields": [
{
"key": "gsmNumber",
"type": "PHONE",
"required": true,
"label": { "tr": "Faturasına yansıtılacak hat", "en": "Mobile line to be billed" },
"prefill": "buyer.gsmNumber",
"pii": true,
"pattern": null,
"minLength": null,
"maxLength": null,
"options": [],
"url": null
}
],
"splitEligible": true,
"splitBehavior": "CAPTURE_IRREVERSIBLE"
}
],
"splitEligible": true,
"splitBehavior": "CAPTURE_IRREVERSIBLE"
}
]
},
"statusCode": 200,
"requestId": "…"
}Örneklerdeki <providerCode> bir yer tutucudur. Hesabınızda bağlı sağlayıcıların kodlarını bu yanıttan okuyun; kodu uygulamanıza sabit yazmayın. Tutar sınırları ve para birimleri de sağlayıcıya göre değişir.
Yöntem satırı
| Alan | Tip | Açıklama |
|---|---|---|
paymentMethod | string | Yöntem kodu; istekteki paymentMethod |
category | string | Yöntem kategorisi |
blockName | string | İstek gövdesindeki blok adı (card, wallet, mobileBilling, promissoryNote) |
displayName | string | null | Form ayarlarında verdiğiniz etiket; yoksa null |
providerSelection | string | providerCode göndermeniz gerekip gerekmediği: ROUTED, OPTIONAL ya da REQUIRED. Bkz. Sağlayıcı seçimi |
providerSelectionMode | string | Birden fazla sağlayıcı bağlıyken sağlayıcıyı kimin seçtiği: BUYER ya da PLATFORM. Bkz. Sağlayıcı seçimi |
actionTypes | string[] | Bu yöntemin yanıtta döndürebileceği aksiyon tipleri; bkz. Payment — Aksiyonlar |
currencies | string[] | En az bir sağlayıcının kabul ettiği para birimleri |
minAmount, maxAmount | integer | null | Sağlayıcılar arasındaki en düşük alt ve en yüksek üst sınır, minor unit; sınır yoksa null |
preauth | boolean | En az bir sağlayıcı preauth: true kabul ediyorsa true; bkz. Ön Provizyon |
providers | array | Sağlayıcılar, Form Ayarları'ndaki sıranızla; kartta boştur |
splitEligible | boolean | Yöntem parçalı ödemede kullanılabilir mi. Kartta her zaman true; kart dışı yöntemde en az bir sağlayıcısı uygunsa true. Bkz. Parçalı ödeme alanları |
splitBehavior | string | null | Yöntemin parçalı ödemedeki davranışı; uygun sağlayıcıların davranışı farklıysa null. Bkz. Parçalı ödeme alanları |
Sağlayıcı satırı (providers[])
| Alan | Tip | Açıklama |
|---|---|---|
providerCode | string | Sağlayıcı kodu; istekte <blok>.providerCode olarak gönderilir |
displayName | string | Alıcıya gösterebileceğiniz ad |
logoUrl | string | null | HTTPS logo adresi; yoksa null |
actionTypes | string[] | Bu sağlayıcının döndürebileceği aksiyon tipleri |
currencies | string[] | Sağlayıcının para birimleri; beyan yoksa boş |
minAmount, maxAmount | integer | null | Tutar sınırları, minor unit; sınır yoksa null |
preauth | boolean | Bu sağlayıcıyla preauth: true kabul edilir mi |
inputFields | array | Sağlayıcının alıcıdan istediği alanlar; bkz. Yöntem alanları. Boşsa alan istenmez |
splitEligible | boolean | Bu sağlayıcıyla parçalı ödeme bacağı açılabilir mi |
splitBehavior | string | null | Sağlayıcının parçalı ödemedeki davranışı; sağlayıcı parçalı ödemeyi desteklemiyorsa null |
Sıra
Yöntemleri ve her yöntemin sağlayıcılarını panelde Ödeme → Form Ayarları ekranında sıralarsınız. Bu uç, Checkout Formu ve panel aynı sırayı kullanır.
- Yöntemler sizin sıranızla gelir. Sıra vermediyseniz varsayılan sıra:
CARD,BNPL,SHOPPING_LOAN,PROMISSORY_NOTE,MEAL_CARD,GIFT_CARD,CASH,CASH_ON_DELIVERY,WALLET,BANK_TRANSFER,OPEN_BANKING,MOBILE_BILLING,QR_CODE,CRYPTO,OTHER. Listede yalnız hesabınızda açık olanlar bulunur. - Sağlayıcılar (
providers[]) yöntem içinde sizin sıranızla gelir. Sıra vermediyseniz sağlayıcı koduna göre sıralanır. - Sonradan bağladığınız sağlayıcı yönteminin sırasının sonuna eklenir. Bağlantısını kapattığınız sağlayıcı listeden düşer.
- Sıra test ve canlı ortamda aynıdır.
Form Ayarları'nda yalnız formda kapattığınız sağlayıcı bu listede görünmeye devam eder ve POST /payments/direct/payment ile kullanılabilir; Checkout Formu'nda görünmez. Sağlayıcıyı her yerde kapatmak için sağlayıcı bağlantısını kapatın → Checkout Formu — Payment › Sıra ve formda gösterilen sağlayıcılar.
Parçalı ödeme alanları
Satırdaki splitEligible ve splitBehavior, yöntemin ve sağlayıcının parçalı ödemeye girip giremeyeceğini ve parçalı ödemede nasıl çekildiğini söyler.
- Sağlayıcı satırında
splitEligible, sağlayıcı parçalı ödemeyi destekliyorsa ve yöntemi Form Ayarları'nda parçalı ödemeye açtıysanıztrue'dur. splitBehaviorsağlayıcının özelliğidir: yöntemi parçalı ödemeye açmamış olsanız da görünür.- Parçalı ödemenin kart dışı bacağında yalnız
splitEligible: trueolan sağlayıcıları kullanın.
splitBehavior | Anlamı | Parçalı ödemedeki yeri |
|---|---|---|
APPROVE_THEN_DISBURSE | Önce onay alınır, tutar en sonda çekilir (kredi, BNPL) | Her zaman ilk adım |
HOLD_CAPTURE | Tutar bloke edilir, en sonda çekilir (kart) | Onaydan sonra |
CAPTURE_REVERSIBLE | Tutar çekilir; gerekirse iade edilir | Kartlardan sonra |
CAPTURE_IRREVERSIBLE | Tutar çekilir ve geri alınamaz | En son; bir ödemede en fazla bir tane |
Sıranın ayrıntısı: Birden Fazla Yöntemle Ödeme › Adım sırası.
Sağlayıcı seçimi
Bir yönteme hesabınızda birden fazla sağlayıcı bağlı olabilir. providerCode göndermediğinizde ne olacağını yöntem satırındaki providerSelectionMode söyler:
providerSelectionMode | Anlamı | <blok>.providerCode |
|---|---|---|
BUYER | Alıcı markayı seçer; örneğin cüzdanda alıcı kendi cüzdanını seçer | Tek sağlayıcı bağlıysa gönderilmeyebilir. Birden fazla sağlayıcı bağlıysa zorunludur; göndermezseniz 400 payment.provider.required döner ve bağlı kodlar details.boundProviderCodes içindedir |
PLATFORM | Sağlayıcıyı göndermezseniz platform seçer | İsteğe bağlıdır. Gönderirseniz o sağlayıcı kullanılır. Göndermezseniz platform bağlı sağlayıcılardan birini para çekilmeden önce seçer ve ödemeye sabitler. Hiçbiri bu ödemeyi karşılamıyorsa 422 payment.provider.none_eligible döner |
Bugün kullanılabilen yöntemlerin modları:
| Yöntem | providerSelectionMode | Sayfa |
|---|---|---|
Kart (CARD) | PLATFORM: sağlayıcıyı yönlendirme seçer; kart bloğunda providerCode yoktur | Kredi/Banka Kartı |
Cüzdan (WALLET) | BUYER | Cüzdanla Öde › Sağlayıcıyı seçme |
Faturana Yansıt (MOBILE_BILLING) | PLATFORM | Faturana Yansıt › Sağlayıcıyı seçme |
providerSelection ile ilişkisi
providerSelection, providerCode göndermenizin gerekip gerekmediğini doğrudan söyler; değeri moddan ve bağlı sağlayıcı sayısından hesaplanır:
| Durum | providerSelection | providerCode |
|---|---|---|
| Kart | ROUTED | Gönderilmez; sağlayıcıyı yönlendirme seçer |
Kart dışı, PLATFORM (sağlayıcı sayısı fark etmez) | OPTIONAL | Gönderilmeyebilir |
Kart dışı, BUYER, tek sağlayıcı | OPTIONAL | Gönderilmeyebilir |
Kart dışı, BUYER, birden fazla sağlayıcı | REQUIRED | Zorunlu |
Entegrasyonunuz providerSelection REQUIRED olduğunda providerCode gönderiyorsa doğru çalışır. Alıcıya sağlayıcı listesi gösterip göstermeyeceğinize siz karar verirsiniz: PLATFORM yönteminde de listeyi gösterip alıcının seçtiği kodu gönderebilirsiniz.
providerSelectionMode yalnız bu uç ve Direct API içindir. Checkout Formu'nda alıcı, Faturana Yansıt dahil her kart dışı yöntemde sağlayıcıyı kendisi seçer; form seçilen kodu her zaman gönderir → Checkout Formu — Payment › Sağlayıcı seçimi.
Platformun seçimi
PLATFORM yönteminde providerCode göndermediğinizde ve birden fazla sağlayıcı bağlı olduğunda platform sağlayıcıları sırayla dener ve bu ödemeyi karşılayabilen ilk sağlayıcıyı seçer:
- Tutar ve para birimi sağlayıcının sınırları içinde olmalıdır.
preauth: truegönderdiyseniz sağlayıcı ön provizyonu desteklemelidir.- Yöntem bloğundaki alanlar sağlayıcının
inputFieldstanımına uymalıdır. - Sağlayıcı alıcının uygunluğunu sorgulamayı destekliyorsa (ör. hattın bu yönteme açık olması) sorgu olumlu dönmelidir. Bu sorgu para hareketi değildir.
Seçimden sonra:
- Seçilen sağlayıcı ödemeye sabitlenir. Hata olursa başka sağlayıcıya, başka yönteme ya da karta geçilmez.
- Ödemeyi yürüten sağlayıcı yanıtta ve webhook'ta
providerCodealanındadır. - Aynı
Idempotency-Keyile tekrarlanan istek yeni seçim yapmaz; ilk istekte seçilen sağlayıcı kullanılır.
Platform seçiminde iki durum, tek sağlayıcılı yöntemdeki kodla döner:
- Bütün sağlayıcılar yalnız ön provizyonu desteklemedikleri için elendiyse
422payment.preauth.unsupported_for_method. - Yöntem bloğu hiçbir sağlayıcının alan tanımına uymuyorsa
400payment.method.block_invalid.
Yöntem alanları (inputFields)
Her sağlayıcı alıcıdan farklı bilgi isteyebilir: telefon numarası, T.C. kimlik numarası, doğum tarihi gibi. Hangi alanların gerektiğini sağlayıcının inputFields tanımı söyler; değerleri yöntem bloğunda, tanımdaki key adıyla gönderirsiniz:
"mobileBilling": { "providerCode": "<providerCode>", "gsmNumber": "+905321234567" }| Alan | Tip | Açıklama |
|---|---|---|
key | string | Bloktaki alan adı |
type | string | Değer tipi; aşağıdaki tabloya bakın |
required | boolean | Alan zorunlu mu |
label | object | Alıcıya gösterilecek etiket: { "tr": "…", "en": "…" } |
prefill | string | null | Alan gönderilmezse kullanılacak alıcı verisi: buyer.gsmNumber, buyer.email, buyer.identityNumber, buyer.name, buyer.surname. Önceden doldurulan değer de doğrulanır |
pii | boolean | Kişisel veri: değer loglanmaz, ödemenin metadata'sına yazılmaz ve yanıtlarda dönmez |
pattern | string | null | Değerin uyması gereken düzenli ifade |
minLength, maxLength | integer | null | Uzunluk sınırları |
options | array | SELECT seçenekleri: { "value": "…", "label": { "tr": "…", "en": "…" } }; diğer tiplerde boş |
url | string | null | CONSENT alanında sözleşmenin HTTPS adresi |
requiredWhen | object | null | Koşullu zorunluluk: { "field": "…", "equals": "…" }. Aynı seviyedeki field alanının (bir SELECT) değeri equals ise alan zorunludur; değilse alan gönderilmemelidir. Koşul yoksa null |
itemFields | array | GROUP alanında her öğenin alanları; biçimi bu tabloyla aynıdır (iç içe GROUP yoktur). Diğer tiplerde boş |
minItems, maxItems | integer | null | GROUP alanında öğe sayısı sınırları; sınır yoksa null. Bir listede en fazla 10 öğe bulunur |
| Tip | Beklenen değer |
|---|---|
PHONE | İsteğe bağlı + ve 10–15 rakam. Örnek: +905321234567 |
TCKN | 11 haneli T.C. kimlik numarası; sağlama algoritmasıyla doğrulanır |
VKN | 10 haneli vergi kimlik numarası; sağlama algoritmasıyla doğrulanır |
EMAIL | E-posta adresi |
DATE | Takvimde var olan tarih, YYYY-AA-GG. Örnek: 1990-01-31 |
TEXT | Metin |
NUMBER | Rakamlar, isteğe bağlı ondalık kısım; metin ya da sayı olarak gönderilebilir |
SELECT | options[].value değerlerinden biri |
CONSENT | true; alıcı url adresindeki sözleşmeyi onayladı |
ADDRESS | Nesne: { "provinceCode", "districtCode", "neighborhoodCode", "line" }; dördü de zorunlu, metin. provinceCode "01"–"81", ilçe ve mahalle kodu rakamlardan oluşur, line (açık adres) en fazla 250 karakter. Kodlar adres sözlüğündendir |
GROUP | Nesne listesi; her öğe itemFields tanımıyla doğrulanır. Öğe sayısı minItems ve maxItems sınırındadır |
Alanların istekte nasıl doğrulandığı ve hata ayrıntıları: Payment — Yöntem alanları.
Hatalar
| Durum | Yanıt | Ne yapmalı |
|---|---|---|
paymentMethod süzgecindeki kod tanınmıyor, küçük harfle yazılmış, boş ya da tekrarlanmış | 400 payment.method.unknown | details.allowed listesindeki bir kodu gönderin |
| Yöntem kapalı ya da sağlayıcısı yok | 200, { "methods": [] } | Yöntemi panelde açın ve sağlayıcısını bağlayın |
| Kimlik, imza ya da ürün yetkisi hatası | 401, 403, 503 | Bkz. Hata Yönetimi |
{
"status": "failure",
"code": "payment.method.unknown",
"message": "Ödeme yöntemi tanınmıyor — `paymentMethod` alanında geçerli bir yöntem kodu gönderin.",
"statusCode": 400,
"timestamp": "2026-10-12T09:00:00.000Z",
"service": "api-gateway",
"systemTime": 1791795600000,
"requestId": "…",
"details": {
"field": "paymentMethod",
"allowed": ["CARD", "BNPL", "SHOPPING_LOAN", "PROMISSORY_NOTE", "MEAL_CARD", "GIFT_CARD", "CASH", "CASH_ON_DELIVERY", "WALLET", "BANK_TRANSFER", "OPEN_BANKING", "MOBILE_BILLING", "QR_CODE", "CRYPTO", "OTHER"]
}
}details.allowed tanınan bütün yöntem kodlarını taşır. Bir yöntemin hesabınızda kullanılabilir olup olmadığını süzgeçsiz listeden okuyun.
Sonraki adımlar
- Payment —
POST /payments/direct/paymentisteği, aksiyonlar ve hata kodları - Kredi/Banka Kartı · Cüzdanla Öde · Faturana Yansıt — yönteme özgü istekler
- Checkout Formu — Payment — aynı yöntemlerin formdaki akışı