Payment Orchestrator
Payment

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/methods ile 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.paymentMethods gönderin, örneğin ["card", "mobile_billing"]. Bu alan panelde kapalı bir yöntemi açamaz, yalnız daraltır.
  • Intent'i "preauth": true ile 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. walletProvider ile cüzdanı da önceden seçebilirsiniz.
  • Intent'i "paymentMethod": "PROMISSORY_NOTE" ile oluşturursanız ödeme senede sabitlenir. Vade planını intent'te promissoryNote.schedule ile verebilirsiniz; vermezseniz alıcı senet sayısını seçer → Senetle Öde — Checkout Formu ile.
YöntemForm ayarındaki grupAlıcı ne yapar
CüzdanwalletCüzdanı seçer, telefon numarasını girer, gelen kodla onaylar
Faturana Yansıtmobile_billingBirden fazla sağlayıcı açıksa sağlayıcıyı seçer, hattını girer, gelen kodu girer ve sözleşmeyi onaylar
Senetle Ödepromissory_notePlanı 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/methods aynı sırayı kullanır.

Formda kapalı sağlayıcı:

  • Yalnız formda gizlenir. GET /payments/methods listesinde görünmeye devam eder ve POST /payments/direct/payment ile 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 422 payment.provider.disabled_in_form alı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 providerSelectionMode formun davranışını değiştirmez. Bu alan yalnız Direct API'de providerCode gö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 409 payment.method.selection_attempts_exhausted alı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ı callbackUrl adresinize yönlendirilmez; sonuç formda gösterilir. Siparişi payment.captured webhook'una ya da GET /payments/:id sorgusuna 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 FAILED olduysa 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.

AlanTipZorunluAçıklama
tokenstringEvetForm token'ı (intent yanıtındaki token)
checkoutSessionProofstringHayırOturum kanıtı; çerez taşınamayan ortamlar için gövde yedeği
paymentMethodstringEvetWALLET, MOBILE_BILLING ya da PROMISSORY_NOTE. Formda kart her zaman form/2d ve form/3d ile çekilir
wallet, mobileBilling, promissoryNoteobjectYönteme göreYalnı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
browserFingerprintstringEvetTarayıcı parmak izi
paymentChannelstringEvetWEB, MOBILE …
liveSessionTraceIdstringHayırRisk oturumunun izi
  • Tutar, sepet, alıcı ve callbackUrl bu gövdede yoktur; intent'ten okunur. Gönderilirse istek 400 VALIDATION_ERROR alı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 gerekirse checkoutSessionProof) 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.

DurumKodNe yapmalı
Yöntem form ayarlarında kapalı422 payment.method.disabledYöntemi panelde açın
Seçilen sağlayıcı bağlı değil422 payment.provider.not_availableSağlayıcıyı panelde bağlayın
Seçilen sağlayıcı formda kapalı422 payment.provider.disabled_in_formForm 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) doldu409 payment.method.selection_attempts_exhaustedAlıcı kartla ödeyebilir
Siparişte parçalı ödeme sürüyor409 payment.checkout.order_lockedParçalı ödemenin sonuçlanmasını bekleyin; bkz. Parçalı Ödeme
Intent başka bir yönteme sabitlenmiş409 payment.method.intent_method_conflictIntent'i paymentMethod göndermeden oluşturun
Ödeme zaten başlatılmış ya da kapanmış409 payment.method.intent_not_openAlıcı yeniden ödemek isterse yeni intent oluşturun
Formda kart bu uca gönderildi400 payment.method.card_uses_form_card_endpointsGüncel SDK'yı kullanın; kartı SDK form/2d ya da form/3d ile çeker
Yöntem ön provizyonu desteklemiyor422 payment.preauth.unsupported_for_methodIntent'i preauth olmadan oluşturun ya da yöntemi kapatın
Alan sağlayıcının tanımına uymuyor400 payment.method.block_invalidForm alanın altında gösterir; alıcı düzeltir
Form token'ı ya da oturum kanıtı geçersiz401Bkz. Kartla Ödeme — 2D, Hatalar

Kod onayı ve tekrar gönderme hataları: Payment — Hata kodları.

Hata kodları

KodHTTPAnlamı
payment.method.disabled422Yöntem işletmenin form ayarlarında kapalı ya da intent'in settings.paymentMethods listesinde yok
payment.method.intent_method_conflict409Intent oluşturulurken başka bir yönteme sabitlendi; alıcı yöntemi değiştiremez
payment.method.intent_not_open409Bu ö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_endpoints400Formda kartla ödeme POST /payments/form/2d ve POST /payments/form/3d ile yapılır
payment.method.intent_not_card409Kart dışı bir yönteme sabitlenmiş intent kart uçlarına gönderildi; intent'e dokunulmadı ve kendi yöntemiyle ödenebilir

Webhook'lar

EventNe 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