Kart Dışı Yöntemler — Checkout Formu
Checkout Formu kartın yanında hesabınızda açık olan kart dışı yöntemleri de gösterir: cüzdan, Faturana Yansıt ve Senetle Öde gibi. Alıcı yöntemi formda seçer, istenen bilgiyi girer ve yönteme göre telefonuna gelen kodla ödemeyi onaylar.
Bu sayfa Checkout Formu yolu içindir. Kart dışı yöntem çağrılarını (POST /payments/form/payment ve aksiyon onayı) Checkout Form SDK'sı alıcının tarayıcısından kendisi yapar. Sizin ek kod yazmanız gerekmez: yazacağınız kod, kartla ödemedeki gibi sunucunuzda intent oluşturmak ve formu sayfanıza mount etmektir → Checkout Formu.
Ödemeyi kendi sunucunuzdan başlatıyorsanız bu sayfa sizin için değildir → Payment.
Nasıl çalışır
Yöntemi forma açın (bir kez)
Panelde Ödeme → Form Ayarları ekranında yöntemi açın ve sağlayıcısını bağlayın. Yöntemlerin ve sağlayıcıların formdaki sırasını aynı ekranda belirlersiniz. Ayrıntı: Yöntemleri forma açma.
Intent oluşturun ve formu mount edin
Kartla ödemedeki adımlarla aynıdır → Checkout Formu. Tutar, sepet ve alıcı bilgisi intent'ten okunur; tarayıcı bunları değiştiremez.
Alıcı yöntemi ve sağlayıcıyı seçer, onaylar
Alıcı yöntemi seçer; yöntemde formda açık birden fazla sağlayıcı varsa birini seçer. Form, seçilen sağlayıcının istediği bilgiyi (ör. telefon numarası) alır, ödemeyi başlatır ve alıcıdan doğrulama kodunu ister. Bkz. Sağlayıcı seçimi ve Alıcının gördüğü adımlar.
Sonucu webhook ile alın
Ödeme tamamlanınca payment.captured, başarısız olursa payment.failed webhook adresinize gelir. Siparişi payment.captured ile teslim edin.
Yöntemleri forma açma
- Panelde Ödeme → Form Ayarları ekranında yöntem grubunu açın ve bağlı sağlayıcıyı seçin. Formda yalnız açık olan ve en az bir sağlayıcısı bağlı olan yöntemler gösterilir.
- Form,
GET /payments/methodsile aynı listeyi kullanır. Hangi yöntemlerin formda görüneceğini sunucunuzdan bu uçla kontrol edebilirsiniz. - Bir intent'te gösterilecek yöntemleri daraltmak için intent'te
settings.paymentMethodsgönderin, örneğin["card", "mobile_billing"]. Bu alan panelde kapalı bir yöntemi açamaz, yalnız daraltır. - Intent'i
"preauth": trueile oluşturduysanız formda yalnız ön provizyonu destekleyen yöntemler ve sağlayıcılar gösterilir → Ön Provizyon. - Intent'i
"paymentMethod": "WALLET"ile oluşturduysanız ödeme cüzdana sabitlenir: form doğrudan cüzdanla açılır, kartla ya da başka bir yöntemle ödenemez.walletProviderile cüzdanı da önceden seçebilirsiniz. - Intent'i
"paymentMethod": "PROMISSORY_NOTE"ile oluşturursanız ödeme senede sabitlenir. Vade planını intent'tepromissoryNote.scheduleile verebilirsiniz; vermezseniz alıcı senet sayısını seçer → Senetle Öde — Checkout Formu ile.
| Yöntem | Form ayarındaki grup | Alıcı ne yapar |
|---|---|---|
| Cüzdan | wallet | Cüzdanı seçer, telefon numarasını girer, gelen kodla onaylar |
| Faturana Yansıt | mobile_billing | Birden fazla sağlayıcı açıksa sağlayıcıyı seçer, hattını girer, gelen kodu girer ve sözleşmeyi onaylar |
| Senetle Öde | promissory_note | Planı görür ya da senet sayısını seçer, borçlu bilgilerini girer; kod girmez |
Bir siparişi birden fazla yönteme bölerek ödetmek için (ör. iki kart ve Faturana Yansıt): Parçalı Ödeme.
Sıra ve formda gösterilen sağlayıcılar
Panelde Ödeme → Form Ayarları ekranında:
- Yöntem sekmelerini sürükleyerek sıralarsınız. Form sekmeleri bu sırayla gösterir.
- Kart dışı her yöntemin Ödeme seçenekleri listesinde sağlayıcıları sürükleyerek sıralarsınız. Form seçenekleri bu sırayla gösterir.
- Her sağlayıcıyı formda gösterilsin anahtarıyla formda açıp kapatırsınız.
Sıra kuralları:
- Sıra vermediyseniz yöntemler ve sağlayıcılar varsayılan sırayla gelir; bkz. Yöntemleri Listeleme › Sıra.
- 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ı sıradan düşer.
- Sıra test ve canlı ortamda aynıdır.
- Form, panel ve
GET /payments/methodsaynı sırayı kullanır.
Formda kapalı sağlayıcı:
- Yalnız formda gizlenir.
GET /payments/methodslistesinde görünmeye devam eder vePOST /payments/direct/paymentile kullanılabilir. Sağlayıcıyı her yerde kapatmak için sağlayıcı bağlantısını kapatın. - Formdan bu sağlayıcıyla ödeme başlatılamaz: istek
422payment.provider.disabled_in_formalır. - Yöntemin formda açık hiçbir sağlayıcısı kalmadıysa yöntem formda görünmez. Bakımdaki sağlayıcı da formda görünmez.
Sağlayıcı seçimi
Formda kart dışı her yöntemde sağlayıcıyı alıcı seçer; Faturana Yansıt dahil.
- Formda birden fazla sağlayıcı açıksa form seçenekleri sizin sıranızla, sağlayıcının logosu ve adıyla listeler; alıcı birini seçer. Logo yoksa sağlayıcının adı gösterilir.
- Tek sağlayıcı açıksa seçici gösterilmez. Sağlayıcının logosu (yoksa adı) görünür ve ödeme o sağlayıcıyla yapılır.
- Form alıcıdan seçilen sağlayıcının istediği alanları alır ve seçilen sağlayıcının kodunu her zaman gönderir.
- Yöntem satırındaki
providerSelectionModeformun davranışını değiştirmez. Bu alan yalnız Direct API'deproviderCodegönderilmediğinde ne olacağını belirler → Yöntemleri Listeleme › Sağlayıcı seçimi.
Seçim tutmazsa:
- Sağlayıcı ödemeyi para hareket etmeden reddettiyse ve ödeme kaydı açık kaldıysa alıcı aynı ekranda başka bir sağlayıcı ya da yöntem seçebilir.
- Sonucu henüz belli olmayan bir deneme varken yeni seçim yapılamaz; form sonucu bekler.
- Bir ödemede en fazla 3 kez kart dışı yöntem seçilebilir. Sınır dolunca kart dışı seçim
409payment.method.selection_attempts_exhaustedalır; alıcı kartla ödeyebilir.
Alıcının gördüğü adımlar
Faturana Yansıt
Yöntemi seçer
Alıcı ödeme yöntemleri arasından Faturana Yansıt'ı seçer. Form, tutarın seçilen hattın faturasına yansıyacağını ve kodun bu hatta SMS ile gönderileceğini söyler.
Sağlayıcıyı seçer
Formda birden fazla sağlayıcı açıksa alıcı birini seçer. Tek sağlayıcıda bu adım yoktur; sağlayıcının logosu ya da adı gösterilir.
Hattını girer
Intent'te buyer.gsmNumber gönderdiyseniz alan dolu gelir; alıcı değiştirebilir.
Kodu girer ve sözleşmeyi onaylar
Form kodun gönderildiği numarayı maskeli olarak, kodun kalan süresini ve sağlayıcının sözleşme bağlantısını gösterir. Alıcı kodu girer ve sözleşmeyi onaylar; onay olmadan ödeme devam etmez. Kod gelmediyse Kodu tekrar gönder ile yenisini ister. Yanlış kodda form kalan deneme hakkını gösterir.
Sonucu görür
Ödeme tamamlanınca form başarı mesajı gösterir. Hat bu yönteme uygun değilse ya da fatura limiti yetmiyorsa form bunu söyler.
Cüzdan
Cüzdanı seçer
Formda açık cüzdanlar sizin sıranızla, adı ve logosuyla listelenir; birden fazlaysa alıcı birini seçer. İşletmenizin kendi cüzdan programı bağlıysa programınızın adı ve logosuyla görünür. Intent'te walletProvider gönderdiyseniz o cüzdan seçili gelir.
Telefon numarasını girer
Kod bu numaraya gönderilir. Intent'te customerId gönderdiyseniz alıcı cüzdan programınızdaki müşteri kaydıyla eşlenir ve numara bu kayda göre doğrulanır.
Kodu girer ve onaylar
Form kodun gönderildiği numarayı maskeli olarak ve ödemenin gideceği işletmenin adını gösterir. Cüzdan alıcıya ücret ya da vergi yansıtıyorsa form ödenecek toplamı kırılımıyla birlikte gösterir.
Sonucu görür
Ödeme tamamlanınca form başarı mesajı gösterir. Bakiye ya da limit yetmezse para hareket etmeden alıcı başka bir yöntem seçebilir.
Senetle Öde
Alıcı Senetle Öde'yi seçer, sizin verdiğiniz vade planını görür ya da senet sayısını seçer ve borçlu bilgilerini (gerekiyorsa kefilleri de) girer. Kod ya da yönlendirme yoktur: senetler anında düzenlenir ve form sonucu gösterir. Adımların ayrıntısı: Senetle Öde — Alıcının gördüğü adımlar.
Sonuç
- Kart dışı yöntemlerde alıcının tarayıcısı
callbackUrladresinize yönlendirilmez; sonuç formda gösterilir. Siparişipayment.capturedwebhook'una ya daGET /payments/:idsorgusuna göre kapatın. - Ret para hareket etmeden geldiyse ve ödeme kaydı açık kaldıysa form alıcıya başka bir sağlayıcı ya da yöntem sunar.
- Ödeme
FAILEDolduysa aynı intent'le yeniden ödeme yapılamaz; alıcı yeniden ödemek isterse yeni intent oluşturun. - Sonuç sağlayıcıyla doğrulanıyorsa form bunu bekleme mesajıyla gösterir; kesin sonuç webhook ile gelir.
Uç başvurusu — POST /payments/form/payment
Bu bölüm başvuru içindir; uçları SDK çağırır.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
token | string | Evet | Form token'ı (intent yanıtındaki token) |
checkoutSessionProof | string | Hayır | Oturum kanıtı; çerez taşınamayan ortamlar için gövde yedeği |
paymentMethod | string | Evet | WALLET, MOBILE_BILLING ya da PROMISSORY_NOTE. Formda kart her zaman form/2d ve form/3d ile çekilir |
wallet, mobileBilling, promissoryNote | object | Yönteme göre | Yalnız paymentMethod'a karşılık gelen blok; alanlar sağlayıcının inputFields tanımıdır. Form, alıcının seçtiği sağlayıcının kodunu providerCode ile her yöntemde gönderir; formda tek sağlayıcı açıksa onun kodunu gönderir. Senet bloğunun kuralları: Senetle Öde |
browserFingerprint | string | Evet | Tarayıcı parmak izi |
paymentChannel | string | Evet | WEB, MOBILE … |
liveSessionTraceId | string | Hayır | Risk oturumunun izi |
- Tutar, sepet, alıcı ve
callbackUrlbu gövdede yoktur; intent'ten okunur. Gönderilirse istek400 VALIDATION_ERRORalır. - Kodun onayı ve tekrar gönderimi Payment sayfasındaki aksiyon uçlarıyla yapılır; formdan çağrıda gövde imza yerine
token(ve gerekirsecheckoutSessionProof) taşır. - Yanıt biçimi Payment — Yanıt ile aynıdır.
{
"token": "eyJhbGciOi…",
"paymentMethod": "MOBILE_BILLING",
"mobileBilling": { "providerCode": "<providerCode>", "gsmNumber": "+905321234567" },
"browserFingerprint": "…",
"paymentChannel": "WEB"
}Hatalar
Form bu hataları alıcıya anlaşılır bir mesajla gösterir. Kodlar destek ve kayıt incelemesi içindir.
| Durum | Kod | Ne yapmalı |
|---|---|---|
| Yöntem form ayarlarında kapalı | 422 payment.method.disabled | Yöntemi panelde açın |
| Seçilen sağlayıcı bağlı değil | 422 payment.provider.not_available | Sağlayıcıyı panelde bağlayın |
| Seçilen sağlayıcı formda kapalı | 422 payment.provider.disabled_in_form | Form alıcıya başka bir sağlayıcı ya da yöntem sunar. Sağlayıcıyı formda kullanmak istiyorsanız panelde formda gösterilsin anahtarını açın |
| Bu ödemede kart dışı yöntem seçim sınırı (3) doldu | 409 payment.method.selection_attempts_exhausted | Alıcı kartla ödeyebilir |
| Siparişte parçalı ödeme sürüyor | 409 payment.checkout.order_locked | Parçalı ödemenin sonuçlanmasını bekleyin; bkz. Parçalı Ödeme |
| Intent başka bir yönteme sabitlenmiş | 409 payment.method.intent_method_conflict | Intent'i paymentMethod göndermeden oluşturun |
| Ödeme zaten başlatılmış ya da kapanmış | 409 payment.method.intent_not_open | Alıcı yeniden ödemek isterse yeni intent oluşturun |
| Formda kart bu uca gönderildi | 400 payment.method.card_uses_form_card_endpoints | Güncel SDK'yı kullanın; kartı SDK form/2d ya da form/3d ile çeker |
| Yöntem ön provizyonu desteklemiyor | 422 payment.preauth.unsupported_for_method | Intent'i preauth olmadan oluşturun ya da yöntemi kapatın |
| Alan sağlayıcının tanımına uymuyor | 400 payment.method.block_invalid | Form alanın altında gösterir; alıcı düzeltir |
| Form token'ı ya da oturum kanıtı geçersiz | 401 | Bkz. Kartla Ödeme — 2D, Hatalar |
Kod onayı ve tekrar gönderme hataları: Payment — Hata kodları.
Hata kodları
| Kod | HTTP | Anlamı |
|---|---|---|
payment.method.disabled | 422 | Yöntem işletmenin form ayarlarında kapalı ya da intent'in settings.paymentMethods listesinde yok |
payment.method.intent_method_conflict | 409 | Intent oluşturulurken başka bir yönteme sabitlendi; alıcı yöntemi değiştiremez |
payment.method.intent_not_open | 409 | Bu ödeme için yöntem seçilemez: ödeme zaten başlatılmış ya da kapanmış. Yöntem bir ödemede bir kez seçilir |
payment.method.card_uses_form_card_endpoints | 400 | Formda kartla ödeme POST /payments/form/2d ve POST /payments/form/3d ile yapılır |
payment.method.intent_not_card | 409 | Kart dışı bir yönteme sabitlenmiş intent kart uçlarına gönderildi; intent'e dokunulmadı ve kendi yöntemiyle ödenebilir |
Webhook'lar
| Event | Ne zaman |
|---|---|
payment.captured | Ödeme tamamlandı. Siparişi bunun üzerine teslim edin. Senetle Öde'de senetlerin düzenlendiğini bildirir; tahsilat vadede yapılır |
payment.authorized | Ön provizyonlu ödemede tutar bloke edildi (AUTHORIZED); para henüz çekilmedi. Bkz. Ön Provizyon |
payment.failed | Ödeme başarısız oldu; para çekilmedi |
Olayların data'sında paymentMethod (ör. MOBILE_BILLING, WALLET, PROMISSORY_NOTE) ve ödemeyi yürüten sağlayıcının providerCode'u bulunur. Senetlerin vadedeki sonuçları ayrı olaylarla gelir → Senetle Öde — Webhook'lar. Teslimat ve imza doğrulama → Webhook'lar.
Sonraki adımlar
- Checkout Formu — intent oluşturma ve form ayarı override'ları
- Kartla Ödeme — 2D ve Kartla Ödeme — 3D Secure — formda kart
- Payment — aynı yöntemler Direct API'den, yöntem listesi ve hata kodları
- Parçalı Ödeme — bir siparişi birden fazla kart ve yöntemle ödetme