Sürüm notları
better-payment'in sürüm geçmişi ve geriye uyumsuz değişiklikleri.
Sürüm geçmişi sıfırlandı. 0.0.1, yeniden yazılan paketin ilk sürümüdür. 1.x–3.x sürümlerinde hatalı sağlayıcı entegrasyonları ve atlatılabilen callback kontrolleri vardı; bunları kullanmayın. Gerekçe ve adım adım geçiş rehberi için 0.0.1'deki yenilikler sayfasına bakın.
0.11.0
Eklenenler
chaosplugin'i: uygulamanızın ret, kaybolan yanıt (NETWORK_ERROR) ve gecikmeleri nasıl karşıladığını test etmek için işlemlere bunları enjekte eder.allowProductionverilmedikçeproductionmodunda çalışmaz.- EST sağlayıcısı: İş Bankası, Ziraat Bankası, Halkbank, TEB ve Şekerbank tek bir sağlayıcıyla. 3D'siz ve 3D Secure ödeme (3D, 3D Pay, 3D Host, hash ver3), iade, iptal ve sipariş durumu sorgusu desteklenir. 3D callback'leri bankayla doğrulanır.
notificationsplugin'i: satışları, iadeleri ve başarısız ödemeleri arka planda ve kart verisi olmadan Slack, Discord, Telegram veya kendi kanalınıza gönderir. Başarısız olan bir kanal ödemeyi asla etkilemez.- Sipay sağlayıcısı: 3D'siz ve 3D Secure ödeme, Sipay'in şifreli
hash_keyalanıyla doğrulanan 3D callback'leri, tam ve kısmi iade, iptal, durum sorgusu, ön provizyon ve BIN/taksit sorgusu. Sipay test ortamında uçtan uca doğrulandı.
0.10.0
Eklenenler
- Kuveyt Türk sağlayıcısı: KT Pay Gate üzerinden 3D Secure ödeme; sipariş bankada kontrol edildikten sonra
Provisionile tamamlanır. Aynı gün iptal, tam ve kısmi iade ve durum sorgusu da desteklenir.
0.9.0
Eklenenler
- Handler yanıtları
exposeRawResponse: trueverilmedikçe sağlayıcınınrawResponsealanını içermez;idempotency.scopefarklı çağıranların Idempotency-Key yanıtlarını birbirinden ayırır.
Düzeltilenler
buyer.emaildoğrulaması boş alan adı bölümlerini reddeder ve artık geri izleme yapan bir düzenli ifade kullanmaz.
0.8.1
Düzeltilenler
- Framework adapter'ları 1 MiB'tan büyük istek gövdelerini belleğe okumak yerine 413 ile yanıtlar; sınırı
maxBodySizeile değiştirebilirsiniz. - Akbank: 3D Secure callback'leri sipariş geçmişi sorgusuyla doğrulanır; Akbank'taki sipariş kaydıyla eşleşmeyen callback reddedilir.
- HTTP handler form gövdesini yalnızca sağlayıcı callback'lerinde kabul eder; diğer aksiyonlar 415 döner, böylece başka bir sitedeki form bunları kullanıcının cookie'leriyle çağıramaz.
- Logger'a verilen hatalar artık sağlayıcı isteğinin gövdesini ve başlıklarını (kart verisi, kimlik bilgileri) içermiyor.
- iyzico: başarısız bir 3D Secure sonucu artık callback isteğinden alınan paymentId veya conversationId taşımıyor.
0.8.0
React Router adaptörü.
Eklenenler
- React Router adaptörü:
better-payment/react-router, bir splat resource route içinloaderveactiondöndürür; React Router v7 ve Remix v2 ile çalışır.
0.7.0
Sepet yardımcısı, Arapça hata mesajları ve iyzico'da paymentId ile iade. iyzico için geriye uyumsuz: aşağıdaki iade maddesine bakın.
Değişenler (geriye uyumsuz)
- iyzico iadeleri:
refund(),cancel()vegetPayment()gibi ödemeninpaymentId'sini alır ve ödemenin tamamından bir tutarı iade eder (/v2/payment/refund). Tek bir sepet kalemini iade etmek için ayrıca o kaleminpaymentTransactionId'sini verin.paymentIdalanınapaymentTransactionIdgeçen kodun bu değeri yenipaymentTransactionIdalanına taşıması gerekir.
Eklenenler
buildBasket(): indirimleri ve kargoyu sepet kalemlerine dağıtır; kalemlerin toplamı ödeme tutarını kuruşu kuruşuna tutar.- Hata mesajları için dil desteği: Arapça (
ar). Handler'daAccept-Language: arArapça'yı seçer. Katkısı için @poyrazavsever'e teşekkürler.
0.6.0
Eklenenler
- Elysia adapter'ı:
better-payment/elysiahandler'ı Elysia'ya (Bun) tek satırda bağlar:app.all('/api/pay/*', toElysiaHandler(payment), { parse: 'none' }). Katkısı için @ScottHallchico'ya teşekkürler.
0.5.2
Eklenenler
- Hata mesajları için dil desteği: Rusça (
ru). Handler'daAccept-Language: ru-RURusça'yı seçer. Katkısı için @ius-sharma'ya teşekkürler.
0.5.1
Eklenenler
- Hata mesajları için dil desteği: Almanca (
de). Handler'daAccept-Language: de-DEAlmanca'yı seçer. Katkısı için @ius-sharma'ya teşekkürler.
Değişenler
- Repo czaydev/better-payment adresine taşındı.
0.5.0
Plugin'ler ve tipli ödeme olayları. Geriye uyumsuz: new BetterPayment() yerine betterPayment() geldi; sağlayıcılar fabrika fonksiyonlarıyla oluşturuluyor. Bkz. 0.5'e geçiş.
Değişenler (geriye uyumsuz)
BetterPaymentsınıfının yerinibetterPayment({ providers, plugins })aldı; sağlayıcılariyzico(),paytr(),akbank()veparampos()ile oluşturuluyor.enabledalanı kaldırıldı.providersiçindeki her anahtar bir sağlayıcı kimliğidir;payment.<id>sağlayıcıya göre tiplidir.getEnabledProviders()string[]döner.
Eklenenler
- Plugin'ler: sağlayıcı işlemleri için before/after hook'ları, tipli metotlar, handler endpoint'leri ve hata kodları. Kendi plugin'inizi birkaç satırda yazın.
- Ödeme olayları: her sağlayıcı ve akış için tek bir tipli dinleyici; yalnızca doğrulanmış sonuçlar için yayınlanır.
- Hata mesajları için dil desteği:
better-payment/pluginsaltındaki ilk resmi plugin. Müşteriye yönelik İngilizce ve Türkçe mesajlar. defineProvider()ile özel sağlayıcılar ve imzalama için WebCrypto yardımcıları.
0.4.0
Sandbox olmadan test ve tek satırlık framework entegrasyonu. Mevcut 0.3.0 kodu çalışmaya devam eder.
Eklenenler
better-payment/testing: uygulama testleri için kimlik bilgisi ve ağ erişimi gerektirmeyen, bellek içi bir sağlayıcı olanMockProvider. Sihirli kart numaraları retleri, 3D Secure hatalarını, kaybolan yanıtları ve başarısız iadeleri kapsar; 3D Secure callback'leri gerçek handler'dan geçer.- Framework adapter'ları:
better-payment/next,better-payment/express,better-payment/fastifyvebetter-payment/honohandler'ı tek satırda bağlar;toFetchHandlerWorkers, Deno ve Bun'u kapsar. - Dokümantasyon artık Türkçe de okunabiliyor.
Değişenler
PROVIDER_DEFAULT_URLS,RemoteProviderTypeile tiplenir (mockdışındaki tüm sağlayıcılar).
0.3.0
Edge ortamları ve sıfır runtime bağımlılığı. Uygulama kodu değişmeden çalışmaya devam eder.
Eklenenler
- Edge ortamı desteği: aynı paket Node.js 20+, Vercel Edge, Cloudflare Workers, Deno ve Bun'da çalışır. Yalnızca
fetchve WebCrypto kullanır. - Özel bir fetch uygulaması (proxy, test stub'ları) için
fetchseçeneği. - Özel sağlayıcılar için
HttpClientveHttpErrordışa açıldı.
Değişenler
- Runtime bağımlılığı yok: axios kaldırıldı. Zaman aşımları, loglama ve yeniden deneme kuralları değişmedi.
PaymentProvider'dan türeyen özel sağlayıcılarsetupAxiosLogging()/setupAxiosRetry()yerinecreateHttpClient()kullanır.
0.2.0
Ön provizyon ve kayıtlı kartlar. Mevcut 0.1.0 kodu çalışmaya devam eder. İki özellik de her gece gerçek iyzico sandbox'ına karşı test edilir.
Eklenenler
- Ön provizyon:
authorize()/initThreeDSAuthorize()tutarı bloke eder,capture()tahsil eder (kısmi capture desteklenir) vevoidAuthorization()serbest bırakır. iyzico, Parampos ve Akbank; PayTR henüz desteklenmiyor. - Kayıtlı kartlar: ödeme sırasında
saveCardile kartı kaydedin, sonrastoredCard: { customerToken, cardToken }ile ödeme alın ve kartlarısaveCard(),listCards()vedeleteCard()ile yönetin. iyzico ve PayTR; Parampos ve Akbank henüz desteklenmiyor. - İkisi için handler route'ları ve tarayıcı client metotları. Capture, void ve kart route'ları bir
authorizehook'u gerektirir.
Değişenler
PaymentRequest.paymentCardtiplerde opsiyonel; çalışma anındapaymentCardya dastoredCard'dan biri zorunludur.- Bir sağlayıcı bir işlemi desteklemediğinde handler
500yerine400döner.
0.1.0
Sıfırlamadan sonraki ilk özellik sürümü. Mevcut 0.0.1 kodu çalışmaya devam eder; davranış değişiklikleri "Değişenler" altında listelenir. iyzico entegrasyonu artık her gece gerçek iyzico sandbox'ına karşı test ediliyor.
Eklenenler
- Birleşik hata kodları: her başarısız sonuç bir
codetaşır (INSUFFICIENT_FUNDS,CARD_DECLINED,THREEDS_FAILED,INVALID_HASH, ...).errorCodesağlayıcının ham kodunu korur. - Sağlayıcı çağrılmadan önce istek doğrulama. Geçersiz istekler tüm geçersiz alanları listeleyerek
code: 'INVALID_REQUEST'döner.validate: falseile kapatılabilir. - Parampos taksitleri:
installmentInfo(),calculatePaidPrice()vegetInstallmentRates()Param oranlarınızı kullanır. - Tekrar eden callback'ler bir kez işlenir; veri değiştiren handler route'ları
Idempotency-Keybaşlığını kabul eder.IdempotencyStorevarsayılan olarak bellek içidir; birden çok örnekle Redis ya da bir veritabanı kullanın. PaymentErrorCodevePaymentStatus,better-payment/client'tan dışa açılır.
Değişenler
- İstek doğrulama hataları
errorCode: 'VALIDATION_ERROR'döner; öncedenerrorCodeboştu. anyiçermeyen daha sıkı public tipler:rawResponseve handler gövdeleriunknown;onCallback/callbackRedirectbirPaymentResponsealır.NETWORK_ERRORmesajları taşıma hatasının adını verir (ECONNRESET, zaman aşımı, ...).- Yayınlanan build küçültüldü: 29.6 kB yerine yaklaşık 19 kB gzip.
0.0.1
Güvenlik
- Parampos: 3D callback hash'i yalnızca yapılandırmanızdaki GUID ile doğrulanır. Önceki sürümler GUID'i callback içeriğinden okuyordu; bu da herkesin başarılı bir ödeme uydurmasına izin veriyordu.
- Parampos / Akbank: bir 3D callback tek başına artık başarılı ödeme sayılmıyor. Parampos
TP_WMD_Payile tamamlar; Akbank HMAC imzalı sonuçla 3D_PAY modelini kullanır. Eksik bir sonuç kodu artık başarı sayılmıyor. - HTTP handler: varsayılan olarak güvenli. Varsayılan olarak yalnızca callback'leri ve kart sorgularını açar. İade, iptal, ödeme sorgusu ve abonelik yönetimi bir
authorizehook'u gerektirir. - Yeniden denemeler yalnızca idempotent istekleri tekrar gönderir; böylece bir zaman aşımı artık çift çekime ya da çift iadeye yol açamaz.
- İmzalar sabit sürede karşılaştırılır.
Sağlayıcı düzeltmeleri
- PayTR: istekler
merchant_keyile, imzalanan veriyemerchant_salteklenerek imzalanır.user_basket, TL fiyatlı base64 JSON'dur.merchant_oidalfanümerik olmalıdır.test_modesandbox moduna göre ayarlanır. İade tutarları TL cinsindendir. Durum sorguları/odeme/durum-sorgukullanır. Bildirimler düzOKile yanıtlanır. Gizli anahtarlar artık istek gövdelerinde gönderilmiyor. - Parampos:
TP_WMD_UCD/TP_WMD_Pay, virgüllü ondalık tutarlar ve dokümante edilen hash kullanılır. İade ve iptallerTP_Islem_Iptal_Iade_Kismi2, durum sorgularıTP_Islem_Sorgulama4, BIN sorgularıBIN_SanalPoskullanır. Uydurma taksit oranları kaldırıldı. - Akbank: Akbank Sanal POS JSON API'sine göre yeniden yazıldı.
- iyzico: Checkout Form ve PWI sonuçları ödemenin kendi durumunu (
paymentStatus) bildirir. 3DS tamamlamamdStatus=1şartı arar.retrieveSubscriptionGET kullanır.
Geriye uyumsuz değişiklikler (3.x'e göre)
| Alan | Önce | Şimdi |
|---|---|---|
| PayTR config | apiKey, secretKey, merchantId, merchantSalt | merchantId, merchantKey, merchantSalt, testMode? |
| Akbank config | merchantId, terminalId, storeKey, … | merchantSafeId, terminalSafeId, secretKey |
| Parampos config | ayrıca apiKey/secretKey isteniyordu | clientCode, clientUsername, clientPassword, guid |
paymentId (PayTR/Akbank/Parampos) | sağlayıcı token'ı / işlem GUID'i | sizin sipariş numaranız |
| Zaman aşımları | failure | pending + errorCode: 'NETWORK_ERROR' |
| Handler | tüm route'lar herkese açık, her zaman HTTP 200 | açıkça etkinleştirilen route'lar, authorize, başarısızlıkta 422 |
| Desteklenmeyen para birimi | sessizce TRY | hata |