fix(odeme): action redirect fırlatmaz, hedef döndürür + çift paket çekimine sunucu koruması
All checks were successful
Deploy / deploy (push) Successful in 8m46s
All checks were successful
Deploy / deploy (push) Successful in 8m46s
- baslatOdeme { error } | { yonlendir } döndürür; SatinAlForm client'ta
router.push yapar (cacheComponents altında geri dönüşte buton tıklamaya
sağır kalıyordu); tıklamada ok → dönen halka
- paketi olan yeniden 'paket', paketi olmayan 'topup' başlatamaz
- /odeme, paket alınmışken eski bekleyen paket siparişinin formunu göstermez
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
# iyzico ödeme entegrasyonu
|
||||
|
||||
Ödeme akışı iyzico **Checkout Form (CF)** üzerinden yürür: kart bilgisi hiçbir
|
||||
zaman bize ulaşmaz, kullanıcı iyzico'nun barındırdığı ödeme sayfasına gider.
|
||||
zaman bize ulaşmaz; kart formu iyzico iframe'i olarak kendi `/odeme` sayfamıza
|
||||
gömülür.
|
||||
|
||||
## Ortam değişkenleri
|
||||
|
||||
@@ -29,8 +30,13 @@ Ayrıntı: `src/lib/app-url.ts`.
|
||||
|
||||
1. `baslatOdeme` (`src/features/odeme/odeme-actions.ts`) — `orders` satırını
|
||||
`pending` olarak yazar, `checkoutFormInitialize` çağırır, dönen `token`'ı
|
||||
siparişe iliştirir ve kullanıcıyı `paymentPageUrl`'e yönlendirir.
|
||||
siparişe iliştirir ve `/odeme?siparis=<id>` adresini **döndürür** (`redirect()`
|
||||
fırlatmaz); yönlendirmeyi `SatinAlForm` client'ta `router.push` ile yapar.
|
||||
`conversationId` = `basketId` = sipariş id'miz.
|
||||
Oturum yoksa `/giris?callback=/paket` döner. Sunucu koruması: paketi olan
|
||||
yeniden `paket`, paketi olmayan `topup` başlatamaz; `/odeme` sayfası da
|
||||
paket alınmışken eski bekleyen paket siparişinin formunu göstermez
|
||||
(bayat sekme / ikinci cihazdan çift çekim önlemi).
|
||||
2. Kullanıcı ödemeyi bitirince iyzico `/api/odeme/callback` adresine
|
||||
**cross-site POST** atar; gövdede yalnızca `token` vardır. SameSite=Lax
|
||||
nedeniyle session çerezi gelmez, bu yüzden kullanıcı token'dan çözülür.
|
||||
|
||||
Reference in New Issue
Block a user