Türkiye (TR) Özel Payout Akışı
Stripe kısıtlamalarını aşmak için manuel IBAN/Payoneer toplama, admin onay ve payout_requests tablosu.
Türkiye’de Stripe Connect’in sınırlı olması nedeniyle Coursio, TR eğitmenleri için Stripe yerine manuel ödeme (IBAN veya Payoneer) akışı sunar. Bu sayfa, bu mantığın nasıl çalıştığını, PAYOUT_REQUEST tablosunu ve admin onay mekanizmasını açıklar.
Neden TR Özel Akış?
Section titled “Neden TR Özel Akış?”- Stripe Connect, Türkiye’de tam desteklenmediği veya kısıtlamaları olduğu için, TR’deki eğitmenlere Stripe Transfer ile ödeme yapılamıyor.
- Çözüm: Eğitmen IBAN veya Payoneer bilgisini platforma girer; admin ödeme talebini onayladıktan sonra manuel (platform dışı) havale/EFT ile ödeme yapar.
Manuel IBAN/Payoneer Toplama Mantığı
Section titled “Manuel IBAN/Payoneer Toplama Mantığı”Kullanıcı Tarafı
Section titled “Kullanıcı Tarafı”- Eğitmen ülkesi
TRise ödeme yöntemi olarak “Banka havalesi / Payoneer” seçeneği sunulur. - Bilgi girişi:
manualPayoutDetailsalanına IBAN (TR…) veya Payoneer e-posta adresi metin olarak kaydedilir. - Kayıt:
userstablosundapayout_method = 'bank_transfer'vemanual_payout_details = '...'güncellenir.
Endpoint: Eğitmen bu bilgiyi GraphQL mutation updatePayoutSettings(method, details, manualPayoutDetails) veya ilgili form ile gönderir; backend app/routes/api.instructor.update-manual-payout.ts veya GraphQL resolver üzerinden users.manualPayoutDetails ve users.payoutMethod günceller.
Veritabanı (users)
Section titled “Veritabanı (users)”| Alan | Açıklama |
|---|---|
payout_method | 'stripe_connect' veya 'bank_transfer' (TR için bank_transfer). |
manual_payout_details | IBAN veya Payoneer bilgisi (serbest metin). |
PAYOUT_REQUEST (payout_requests) Tablosu
Section titled “PAYOUT_REQUEST (payout_requests) Tablosu”Tüm ödeme talepleri (hem Stripe Connect hem manuel) aynı tabloda tutulur:
| Alan | Açıklama |
|---|---|
id | UUID, primary key. |
instructor_id | Talep sahibi (eğitmen veya affiliate). |
amount | Talep edilen tutar (numeric). |
status | pending, processing, completed, rejected. |
method | 'stripe_connect' veya 'bank' (manuel). |
destination | Stripe Connect hesap ID’si veya IBAN/Payoneer metni. |
processed_at | İşlenme zamanı. |
stripe_transfer_id | Stripe Transfer ID (sadece method=stripe_connect için). |
request_type | 'instructor' veya 'affiliate'. |
- Stripe Connect talepleri:
method = 'stripe_connect',destination = stripeConnectId; admin onayındaprocessPayoutTransferile Stripe’a transfer oluşturulur. - TR (manuel) talepleri:
method = 'bank',destination = manualPayoutDetails(IBAN/Payoneer); admin sadece durumucompletedyapar ve dışarıda havale/EFT gerçekleştirir.
Admin Onay Mekanizması
Section titled “Admin Onay Mekanizması”Sayfa: Admin ödemeler paneli (örn. /admin/payouts).
- Liste:
payout_requeststablosundanstatus = 'pending'talepler listelenir; eğitmen bilgisi vedestination(IBAN/Payoneer veya Connect ID) gösterilir. - Onay (Stripe Connect): Admin “Onayla” dediğinde backend
processPayoutTransfer(db, payoutId)çağırır; Stripe transfer yaratılır,stripe_transfer_idvestatusgüncellenir. - Onay (TR / bank): Admin “Onayla” dediğinde yalnızca
status = 'completed'(ve isteğe bağlıprocessed_at) güncellenir; gerçek para hareketi platform dışında (manuel havale/EFT) yapılır. - Red:
status = 'rejected'yapılır.
Böylece tek bir payout_requests tablosu ve tek bir admin akışı hem Connect hem TR manuel ödemeyi kapsar.
| Adım | Açıklama |
|---|---|
| 1 | TR eğitmeni payout_method = bank_transfer ve manual_payout_details (IBAN/Payoneer) kaydeder. |
| 2 | Eğitmen ödeme talebi oluşturur → payout_requests’e method = 'bank', destination = manualPayoutDetails ile kayıt eklenir. |
| 3 | Admin panelde talebi görür; manuel ödemeyi kendi sürecine göre yaptıktan sonra talebi “Tamamlandı” olarak işaretler. |
| 4 | Stripe Connect talepleri için admin “Onayla” dediğinde processPayoutTransfer ile Stripe’da transfer oluşturulur. |
Checkout ve webhook tarafı için Checkout & Webhooks sayfasına bakın.
İlgili Dosyalar
Section titled “İlgili Dosyalar”app/routes/api.instructor.update-manual-payout.ts— TR eğitmeni manuel ödeme bilgisi (IBAN/Payoneer) güncelleme.app/routes/instructor.payouts.tsx— Eğitmen ödemeler sayfası; manuel bilgi girişi ve payout talebi.app/routes/admin.payouts.tsx— Admin ödemeler paneli; onay/red.app/lib/stripe-connect-payout.ts— Connect talepleri içinprocessPayoutTransfer.app/lib/payout-engine.ts— Payout talebi mantığı.