Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.payven.com.tr/llms.txt

Use this file to discover all available pages before exploring further.

Payven hata yanıtları tek bir yapıda döner — HTTP kodu kategoriyi, code alanı ise hatanın detayını verir.

Hata yapısı

{
  "isSuccess": false,
  "message": "Tutar 100 kuruşun altında olamaz.",
  "code": "VALIDATION_AMOUNT_TOO_LOW",
  "data": null,
  "errors": [
    { "field": "amount", "message": "Tutar 100 kuruşun altında olamaz." }
  ]
}

HTTP kategorileri

HTTPKategoriRetry uygun mu?
400İstek formatı veya validasyon hatası❌ Düzeltmeden tekrarlamayın
401Kimlik doğrulama hatası
403Yetki/lisans hatası
404Kayıt bulunamadı
409Çakışma
422İş kuralı ihlali
429Rate limit aşıldı✅ Backoff ile
5xxSunucu hatası✅ Backoff ile
TimeoutAğ veya gateway timeout✅ Idempotency-Key ile

Yaygın hata kodları

Kimlik doğrulama

KodAnlam
AUTH_MISSING_KEYAPI anahtarı header’ı eksik
AUTH_INVALID_KEYAnahtar geçersiz veya pasif
AUTH_INVALID_SECRETSecret hatalı
AUTH_MERCHANT_REQUIREDMerchant header’ı eksik
AUTH_IP_NOT_ALLOWEDİstek IP’si izin listesinde değil
AUTH_PRODUCT_NOT_LICENSEDÜrün planınızda etkin değil

Validasyon

KodAnlam
VALIDATION_AMOUNT_TOO_LOWTutar 100 kuruşun altında
VALIDATION_AMOUNT_EXCEEDEDTutar maksimum limiti aşıyor
VALIDATION_INVALID_CARDKart numarası formatı geçersiz (Luhn)
VALIDATION_INVALID_EXPIRYSon kullanma tarihi geçersiz
VALIDATION_INVALID_INSTALLMENTTaksit sayısı bu kart için desteklenmiyor
VALIDATION_INVALID_CURRENCYPara birimi desteklenmiyor

İşlem

KodAnlam
PAYMENT_NOT_FOUNDİşlem bulunamadı
PAYMENT_ALREADY_REFUNDEDİşlem zaten iade edilmiş
PAYMENT_NOT_REFUNDABLEİşlem iade edilemez durumda
REFUND_EXCEEDS_ORIGINALİade tutarı orijinali aşıyor
VOID_NOT_ALLOWED_AFTER_SETTLEMENTMutabakat sonrası iptal yapılamaz
CAPTURE_AMOUNT_EXCEEDS_AUTHÇekim tutarı ön provizyonu aşıyor

Yönlendirme ve banka

KodAnlam
ROUTING_NO_CONNECTORHiçbir konnektör koşullara uymadı
CONNECTOR_DOWNHedef konnektör geçici olarak devre dışı
BANK_DECLINEDBanka işlemi reddetti — connector.responseCode alanına bakın
BANK_TIMEOUTBanka yanıt vermedi

Diğer

KodAnlam
IDEMPOTENCY_PAYLOAD_MISMATCHAynı anahtar farklı bir payload için kullanılmış
RATE_LIMIT_EXCEEDEDİstek limiti aşıldı
WEBHOOK_INVALID_URLWebhook URL’i HTTPS değil veya erişilemez
Bu liste özettir. Tam hata kataloğu ve banka yanıt kodları için: Sanal POS → Hata Kodları ve Konsol → Hata Kodları.

Retry stratejisi

Geçici hatalar için exponential backoff önerilir:
1. deneme: hemen
2. deneme: 1 saniye sonra
3. deneme: 2 saniye sonra
4. deneme: 4 saniye sonra
5. deneme: 8 saniye sonra
async Task<T> RetryAsync<T>(Func<Task<HttpResponseMessage>> call, int maxAttempts = 5)
{
    for (int attempt = 0; attempt < maxAttempts; attempt++)
    {
        var response = await call();

        if (response.IsSuccessStatusCode)
            return await response.Content.ReadFromJsonAsync<T>();

        var statusCode = (int)response.StatusCode;
        var isRetryable = statusCode >= 500 || statusCode == 429;

        if (!isRetryable || attempt == maxAttempts - 1)
            response.EnsureSuccessStatusCode();

        await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
    }
    throw new InvalidOperationException("unreachable");
}
Yeniden denerken mutlaka aynı Idempotency-Key ile gönderin. Böylece aynı işlem iki kez gerçekleşmez.

Müşteriye gösterme

message alanı son kullanıcıya gösterilebilecek nitelikte yazılır. Yine de hassas durumlarda (örn. fraud reddi) genel bir hata mesajı göstermek daha güvenlidir:
const userMessage = (error) => {
  if (error.code.startsWith("VALIDATION_")) return error.message;
  if (error.code.startsWith("BANK_")) return "Bankanız işlemi onaylamadı.";
  return "İşleminiz gerçekleştirilemedi. Lütfen tekrar deneyin.";
};