Better Payment
Referans

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.6.0

Eklenenler

  • Elysia adapter'ı: better-payment/elysia handler'ı 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

0.5.1

Eklenenler

Değişenler

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)

  • BetterPayment sınıfının yerini betterPayment({ providers, plugins }) aldı; sağlayıcılar iyzico(), paytr(), akbank() ve parampos() ile oluşturuluyor. enabled alanı kaldırıldı.
  • providers iç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/plugins altı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ı olan MockProvider. 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/fastify ve better-payment/hono handler'ı tek satırda bağlar; toFetchHandler Workers, Deno ve Bun'u kapsar.
  • Dokümantasyon artık Türkçe de okunabiliyor.

Değişenler

  • PROVIDER_DEFAULT_URLS, RemoteProviderType ile tiplenir (mock dışı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 fetch ve WebCrypto kullanır.
  • Özel bir fetch uygulaması (proxy, test stub'ları) için fetch seçeneği.
  • Özel sağlayıcılar için HttpClient ve HttpError dış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ılar setupAxiosLogging() / setupAxiosRetry() yerine createHttpClient() 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) ve voidAuthorization() serbest bırakır. iyzico, Parampos ve Akbank; PayTR henüz desteklenmiyor.
  • Kayıtlı kartlar: ödeme sırasında saveCard ile kartı kaydedin, sonra storedCard: { customerToken, cardToken } ile ödeme alın ve kartları saveCard(), listCards() ve deleteCard() 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 authorize hook'u gerektirir.

Değişenler

  • PaymentRequest.paymentCard tiplerde opsiyonel; çalışma anında paymentCard ya da storedCard'dan biri zorunludur.
  • Bir sağlayıcı bir işlemi desteklemediğinde handler 500 yerine 400 dö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 code taşır (INSUFFICIENT_FUNDS, CARD_DECLINED, THREEDS_FAILED, INVALID_HASH, ...). errorCode sağ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: false ile kapatılabilir.
  • Parampos taksitleri: installmentInfo(), calculatePaidPrice() ve getInstallmentRates() Param oranlarınızı kullanır.
  • Tekrar eden callback'ler bir kez işlenir; veri değiştiren handler route'ları Idempotency-Key başlığını kabul eder. IdempotencyStore varsayılan olarak bellek içidir; birden çok örnekle Redis ya da bir veritabanı kullanın.
  • PaymentErrorCode ve PaymentStatus, better-payment/client'tan dışa açılır.

Değişenler

  • İstek doğrulama hataları errorCode: 'VALIDATION_ERROR' döner; önceden errorCode boştu.
  • any içermeyen daha sıkı public tipler: rawResponse ve handler gövdeleri unknown; onCallback / callbackRedirect bir PaymentResponse alır.
  • NETWORK_ERROR mesajları 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_Pay ile 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 authorize hook'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_key ile, imzalanan veriye merchant_salt eklenerek imzalanır. user_basket, TL fiyatlı base64 JSON'dur. merchant_oid alfanümerik olmalıdır. test_mode sandbox moduna göre ayarlanır. İade tutarları TL cinsindendir. Durum sorguları /odeme/durum-sorgu kullanır. Bildirimler düz OK ile 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 iptaller TP_Islem_Iptal_Iade_Kismi2, durum sorguları TP_Islem_Sorgulama4, BIN sorguları BIN_SanalPos kullanı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 tamamlama mdStatus=1 şartı arar. retrieveSubscription GET kullanır.

Geriye uyumsuz değişiklikler (3.x'e göre)

AlanÖnceŞimdi
PayTR configapiKey, secretKey, merchantId, merchantSaltmerchantId, merchantKey, merchantSalt, testMode?
Akbank configmerchantId, terminalId, storeKey, …merchantSafeId, terminalSafeId, secretKey
Parampos configayrıca apiKey/secretKey isteniyorduclientCode, clientUsername, clientPassword, guid
paymentId (PayTR/Akbank/Parampos)sağlayıcı token'ı / işlem GUID'isizin sipariş numaranız
Zaman aşımlarıfailurepending + errorCode: 'NETWORK_ERROR'
Handlertüm route'lar herkese açık, her zaman HTTP 200açıkça etkinleştirilen route'lar, authorize, başarısızlıkta 422
Desteklenmeyen para birimisessizce TRYhata

Bu sayfada