DOCS
Panel Giriş Başvurun

Ek Servisler

Ödeme Sonucu

successUrl'e dönmek başarı demek değildir — sonucu doğru okumanın tek yolu buradaki kontrollerdir.

Altın Kural

Ödeme yalnızca RESPONSE_CODE = 2 ve AUTH_CODE geçerli bir değerken başarılıdır. AUTH_CODE boş, 0 ya da 00 ise işlem başarısızdır — successUrl'e dönmüş olması hiçbir şey ifade etmez.

Karar Akışı

  1. 1hashDataV2 doğru mu?Yanıttaki imzayı Response Hash yöntemiyle kendiniz hesaplayıp karşılaştırın. Farklıysa işlem Paynkolay'dan gelmiyordur — işlemi kesin.
  2. 2RESPONSE_CODE 2 mi?Değilse işlem başarısızdır; RESPONSE_DATA hata mesajını taşır.
  3. 3AUTH_CODE geçerli mi?Boş, 0 veya 00 ise başarısız sayın.
  4. 4Tutarı karşılaştırınAUTHORIZATION_AMOUNT, gönderdiğiniz amount'a eşit ya da ondan büyük olmalıdır.

Yanıt İmzasını Doğrulama (Response Hash)

Yanıttaki hashDataV2, aşağıdaki alanlardan üretilir; aynı imzayı kendiniz hesaplayıp karşılaştırmadan sonucu güvenilir saymayın:

Response Hash Formülü
MERCHANT_NO | REFERENCE_CODE | AUTH_CODE | RESPONSE_CODE | USE_3D | RND | INSTALLMENT | AUTHORIZATION_AMOUNT | CURRENCY_CODE | merchantSecretKey
# SHA-512 → Base64 (UTF-8)
Doğrulama — PHP
$hashstr = $MERCHANT_NO."|".$REFERENCE_CODE."|".$AUTH_CODE."|".$RESPONSE_CODE."|".$USE_3D."|".$RND."|".$INSTALLMENT."|".$AUTHORIZATION_AMOUNT."|".$CURRENCY_CODE."|".$merchantSecretKey;
$beklenen = base64_encode(hash("sha512", $hashstr, true));
// $beklenen, yanıttaki hashDataV2 ile birebir aynı olmalı

Yanıttaki RND, istekte gönderdiğiniz rnd değerinden farklıdır — imzayı yanıtta dönen değerlerle hesaplayın. Hash'ler eşleşmiyorsa yanıt Paynkolay'dan gelmiyor olabilir; işlemi sonlandırın.

Hazır Kontrol Fonksiyonu

function isPaymentSuccessful(array $result): bool
{
    $code = $result['RESPONSE_CODE'] ?? null;
    $auth = trim((string)($result['AUTH_CODE'] ?? ''));
    // RESPONSE_CODE 2 olmalı VE AUTH_CODE gerçek bir değer olmalı
    return (string)$code == '2'
        && !in_array($auth, ['', '0', '00'], true);
}
function isPaymentSuccessful(result) {
  const code = String(result.RESPONSE_CODE ?? '');
  const auth = String(result.AUTH_CODE ?? '').trim();
  // RESPONSE_CODE 2 olmalı VE AUTH_CODE gerçek bir değer olmalı
  return code == '2' && !['', '0', '00'].includes(auth);
}
def is_payment_successful(result: dict) -> bool:
    code = str(result.get("RESPONSE_CODE", ""))
    auth = str(result.get("AUTH_CODE", "")).strip()

    # RESPONSE_CODE 2 olmalı VE AUTH_CODE gerçek bir değer olmalı
    return code == "2" and auth not in ("", "0", "00")
public static bool IsPaymentSuccessful(IDictionary<string, string> result)
{
    result.TryGetValue("RESPONSE_CODE", out var code);
    result.TryGetValue("AUTH_CODE", out var auth);
    auth = (auth ?? "").Trim();

    // RESPONSE_CODE 2 olmalı VE AUTH_CODE gerçek bir değer olmalı
    return code == "2"
        && auth != "" && auth != "0" && auth != "00";
}
public static boolean isPaymentSuccessful(Map<String, String> result) {
    String code = result.getOrDefault("RESPONSE_CODE", "");
    String auth = result.getOrDefault("AUTH_CODE", "").trim();

    // RESPONSE_CODE 2 olmalı VE AUTH_CODE gerçek bir değer olmalı
    return code.equals("2")
        && !auth.equals("") && !auth.equals("0") && !auth.equals("00");
}

Örnek Dönüşler

Başarılı işlem successUrl adresinize, başarısız işlem failUrl adresinize POST edilir. Alan listesi 3D ve Non-3D akışında küçük farklarla aynıdır:

Non-3D işlem dönüşü
RESPONSE_CODE: 2
RESPONSE_DATA: İşlem Başarılı
USE_3D: false
RND: 1630051651137
MERCHANT_NO: 400000001
AUTH_CODE: S00586
REFERENCE_CODE: IKSIRPF102168
CLIENT_REFERENCE_CODE: 42794212
TIMESTAMP: 2021-08-27
TRANSACTION_AMOUNT: 1.00
AUTHORIZATION_AMOUNT: 1.00
COMMISION: 0.00000000
COMMISION_RATE: null
INSTALLMENT: 1
hashData: bjb49lGdnE2D/D5Jze2/sn7Xfk0=
hashDataV2: lunnRyNfDu6pdpNjjlFrlATE4PjUluM8…
3D işlem dönüşü (AutoComplete)
RESPONSE_CODE: 2
RESPONSE_DATA: İşlem Başarılı.
REFERENCE_CODE: IKSIRPF142277040
USE_3D: true
MERCHANT_NO: 400000002
AUTH_CODE: 345344
CLIENT_REFERENCE_CODE: 24809740|988922
TIMESTAMP: 2022-02-24 13:58:36.353
TRANSACTION_AMOUNT: 1.00
AUTHORIZATION_AMOUNT: 1.00
COMMISION: 0.00
COMMISION_RATE: 0.0000
INSTALLMENT: 1
RND: 1645700316156
hashData: +wDy2xeI1hOCnwaatSqylWhtj9E=
hashDataV2: lunnRyNfDu6pdpNjjlFrlATE4PjUluM8…
BANK_RESULT: Response : IKSIRPF142277040 …
ERROR_CODE: 0

Yanıttaki hashDataV2, istek imzasından farklı hesaplanır (Response Hash). Doğrulamadan siparişi asla onaylamayın. Hatalı işlemde RESPONSE_CODE = 0 döner ve AUTH_CODE boştur.

Son güncelleme: 10 Eylül 2026

v1 · Versiyonlar