Skip to main content
Mevcut bir gateway entegrasyonunuz varsa Payven’e geçiş genelde birkaç gün sürer. Bu rehber kavram eşleştirmesi, alan-bazlı API farkları ve geçiş sıralaması sunar.
Çift-yazma stratejisi öneririz. Mevcut gateway’inizi durdurmadan, kademeli olarak trafiğin %1 → %10 → %50 → %100’ünü Payven’e taşıyın. Yönlendirme kuralları ile A/B test yapabilirsiniz.

Kavram eşleştirmesi

Sizin gatewayPayven karşılığı
Craftgate: Payment + Card + BuyerPayment (/api/v1/payments) + iç içe card + buyer
Craftgate: paymentSource (web/mobile/marketplace)Sanal POS: extra_properties.payment_source (opsiyonel)
Craftgate: connectorNamePayven: connector_code (GARANTI, AKBANK, …)
iyzico: paymentChannel (WEB/MOBILE_WEB/…)Sanal POS: işlem normalde otomatik tespit edilir; gerekirse extra_properties.channel
iyzico: paymentGroup (PRODUCT/LISTING/SUBSCRIPTION)Sanal POS: description veya basket_items[] ile model
iyzico: installmentInfo endpoint’iIdentity: BIN sorgu
PayU: merchant, merchantPosId, saltIdentity OAuth (Bearer token) — POS bilgisi konfigürasyonda
Param: Islem_HashBizde HMAC yok — tüm güvenlik OAuth + IP whitelist üzerinden

API alan eşleştirmesi (POST /payments)

Sizin alanPayven alanıNot
price (TL ondalık, örn. 150.00)amount.amount (kuruş, örn. 15000)Önemli: Payven kuruş cinsindendir
paidPriceyok — Payven amount.amount’i kullanırKomisyon ayrımı yapmıyoruz
currency: "TRY"amount.currency: "TRY"Aynı
installmentinstallmentAynı
cardHolderNamecard.holder_namesnake_case
cardNumbercard.numbersnake_case
expireMonthcard.expire_monthsnake_case
expireYearcard.expire_year4 hane (2030), iki hane değil
cvc / cvvcard.cvvAynı
buyerEmailbuyer.emailİç içe
buyerIp / ipAddressbuyer.ip_addressİç içe
conversationId (iyzico)external_idSizin sipariş ID’niz
basketIdbasket_idAynı
callbackUrl (3DS)callback_url (/payments/3d/init body’sinde)Aynı
merchantIdX-Merchant-Id header veya X-External-Merchant-Id headerBody’de değil header’da

Yanıt eşleştirmesi

Sizin alanPayven alanı
paymentIdtransaction_id
paymentStatus (SUCCESS/FAILURE)HTTP status (2xx başarı, 422 banka reddi) + status enum
errorCode (provider-spesifik)code (Payven canonical) + provider_error_code (banka orijinali)
authCodeextra_properties.auth_code
hostReference / mdStatus (3DS)extra_properties.host_reference, extra_properties.three_ds.eci

Hata yapısı eşleştirmesi

Çoğu Türk gateway hatayı 200 OK + body’de status: "FAILURE" ile döner. Payven RFC 9457 problem+json kullanır — HTTP status kodunu konuşturur:
Senaryoiyzico/Craftgate tipikPayven
Banka reddi (yetersiz bakiye)200 OK + { status: "FAILURE", errorCode: "10051" }422 Unprocessable Entity + { code: "bank_declined", provider_error_code: "51" }
Validasyon hatası200 OK + { status: "FAILURE", errorCode: "100xxx" }422 Unprocessable Entity + { code: "validation_failed", errors: [...] }
Token geçersiz200 OK + body içinde error401 Unauthorized + { code: "invalid_token" }
Rate limit403/429 farklı providerlar429 Too Many Requests + Retry-After
Migration sonrası kodunuzu düzeltmeniz gereken yer: if (res.status === 200) koşulundan if (res.ok) veya if (res.status >= 200 && res.status < 300) koşuluna geçin. Hata yanıtını code alanı üzerinden okuyun, sayısal errorCode üzerinden değil.

Idempotency

ProviderYaklaşım
iyzicoconversationId ile dedupe (best-effort)
CraftgateIdempotency-Key header desteği var
PayUYok (sipariş ID dupe kontrolü kendinize ait)
PayvenIdempotency-Key header zorunluk değil ama şiddetle önerilir — bkz. Idempotency

Webhook eşleştirmesi

ProviderPayven
iyzico: paymentEventTypePayven: type (payment.completed, payment.failed, …)
iyzico: transactionType: "AUTH"Payven: tek event yapısı, type’tan ayırd ediyoruz
Craftgate: eventTypePayven: type
HMAC imza farklı (her provider)Payven: X-Payven-Signature: sha256=... + X-Payven-Timestamp (Stripe-benzeri)
İmza algoritması: bkz. Webhook İmza Doğrulama. HMAC-SHA256, body’i raw imzala, 5 dakika timestamp tolerance.

Geçiş sıralaması (önerilen)

1

Sandbox'ta paralel entegrasyon (1-3 gün)

Mevcut sisteminize dokunmadan, sandbox’ta Payven entegrasyonunu yapın. 3DS dahil tüm akışları test edin.
2

Production canary (1 gün)

Trafiğin %1’ini Payven’e yönlendirin (örn. belirli bir BIN, belirli bir bayi, belirli bir tutar aralığı). Yönlendirme kuralları ile yapılandırın.
3

Hata oranı + latency karşılaştırması (3-7 gün)

Payven dashboard.payven.com.tr ile mevcut gateway dashboard’ını yan yana izleyin. Hata oranı, p95 latency, başarı oranı.
4

Aşamalı geçiş %10 → %50 → %100

Her aşama 2-3 gün izleme — sorun çıkarsa yönlendirme kuralını geri alın.
5

Eski gateway'i pasif et

Mevcut gateway’i kapatmayın — ileride eski işlemlerin iadesi için 13 ay daha açık tutun (chargeback penceresi).

Sık karşılaşılan tuzaklar

Tutar formatı: Payven kuruş, çoğu gateway TL ondalık. amount * 100 ölçeklemeyi unutmayın.
Yıl formatı: Payven 4 hane ("2030"), bazı gatewayler 2 hane ("30"). Dönüştürme yapın.
HTTP status’a güven: Banka reddini body.status === "FAILURE" ile bulan kodlar Payven’de hata gözünden kaçırır. HTTP status kodunu konuşturun.
Webhook imzası: Body’i parse etmeden raw olarak imzalayın. JSON.parse() + JSON.stringify() döngüsü imzayı bozar. Detay.

Hata kodu eşleştirme tablosu (örnek)

Sizin sisteminizdePayven codeBanka kodu (provider_error_code)
iyzico 10051 (yetersiz bakiye)insufficient_funds51
iyzico 10054 (kart süresi dolmuş)card_expired54
iyzico 10005 (CVC hatalı)invalid_cvv82
Craftgate BANK_DECLINED_NNbank_declinedNN
Param 99 (sistem hatası)bank_system_error96
Daha kapsamlı eşleme için Banka Yanıt Kodları ve Payven Hata Kodları.

Yardım

Geçiş sırasında özel bir senaryoda takılırsanız: organizasyon kodunuz + işlem correlation_id ile destek ekibimize yazın. Onboarding ekibi tipik olarak 1-2 saat içinde yanıt verir.