Banka Havalesi API Dökümantasyonu

ParaX Payment Gateway - Güvenli Ödeme Altyapısı

API Versiyon 2.0.0

Başlangıç

Kimlik Bilgileri

API isteklerinde kullanmanız gereken kimlik bilgileri:

Parametre Tip Açıklama
sid integer Site kimlik numarası - ParaX tarafından özel olarak sağlanır
key string API anahtarı - ParaX tarafından özel olarak sağlanır (Callback istekleri için)
secret_key string Gizli anahtar - Signature oluşturmak için kullanılır (Asla paylaşmayın!)
Güvenlik Uyarısı
ÇOK ÖNEMLİ: secret_key bilginizi asla frontend kodunuzda, client-side JavaScript'te veya public repository'lerde paylaşmayın. Bu bilgileri sadece backend sunucunuzda, ortam değişkenlerinde (environment variables) saklayın.

secret_key, HMAC SHA256 signature oluşturmak için kullanılır ve mutlaka gizli tutulmalıdır.

Para Yatırma İşlemi

Para yatırma işlemi için müşteriyi ParaX ödeme sayfasına yönlendirmeniz gerekmektedir. Bu işlem GET metodu ile yapılır ve belirtilen parametreler URL'e eklenir.

Endpoint

GET https://api.parax.tech/Methods/BankTransfer/V2/
Müşteri bu endpoint'e signature ile birlikte yönlendirildiğinde banka havalesi ödeme sayfası görüntülenir.

URL Parametreleri

Tüm isteklerde güvenlik için HMAC SHA256 signature kullanılması zorunludur.

Parametre Zorunluluk Açıklama
sid Zorunlu Site ID - ParaX tarafından sağlanır
username Zorunlu Müşteri kullanıcı adı
userID Zorunlu Müşteri ID
signature Zorunlu HMAC SHA256 imza (URL tampering önler)
fullname Zorunlu Müşteri adı soyadı
amount Zorunlu Ödeme tutarı
data Opsiyonel Özel parametre (custom data)
trx Zorunlu Merchant sistemindeki işlem ID'si
Güvenlik Uyarısı
signature parametresi zorunludur ve HMAC SHA256 algoritması ile oluşturulmalıdır. Secret key'inizi asla client-side kodda kullanmayın!

Signature Oluşturma

Güvenli URL oluşturmak için HMAC SHA256 signature kullanılır. İmza oluşturma adımları:

  1. Parametreleri alfabetik olarak sırala
  2. key=value formatında birleştir (& ile ayırarak)
  3. HMAC SHA256 ile imzala (secret key kullanarak)
  4. Signature'ı parametrelere ekle
  5. Güvenli URL'i oluştur

Node.js Örneği

secure-deposit.js
const crypto = require('crypto');

function createSecureDepositUrl(merchantConfig, depositData) {
  const SECRET_KEY = merchantConfig.secretKey; // Keep this secret!
  
  // Prepare deposit parameters
  const params = {
    sid: merchantConfig.siteId,
    username: depositData.username,
    userID: depositData.userId,
    fullname: depositData.fullname,
    amount: depositData.amount,
    trx: `DEP-${Date.now()}`
  };
  
  // Step 1: Sort keys alphabetically
  const sortedKeys = Object.keys(params).sort();
  
  // Step 2: Create sign string
  const signString = sortedKeys
    .map(key => `${key}=${params[key]}`)
    .join('&');
  
  // Step 3: Generate HMAC SHA256 signature
  const signature = crypto
    .createHmac('sha256', SECRET_KEY)
    .update(signString)
    .digest('hex');
  
  // Step 4: Add signature to params
  params.signature = signature;
  
  // Step 5: Create secure URL
  const queryString = new URLSearchParams(params).toString();
  const secureUrl = `https://api.parax.tech/Methods/BankTransfer/V2/?${queryString}`;
  
  return secureUrl;
}

// Usage Example
const merchantConfig = {
  siteId: 'YOUR_SITE_ID',
  secretKey: 'sk_live_YOUR_SECRET_KEY' // NEVER expose this!
};

const depositData = {
  username: 'john_doe',
  userId: '12345',
  fullname: 'John Doe',
  amount: '250.00'
};

const secureUrl = createSecureDepositUrl(merchantConfig, depositData);
// Redirect user to this secure URL
res.redirect(secureUrl);

API Yanıtı

V2 endpoint'i aşağıdaki formatta başarılı yanıt döner:

JSON Response (Success)
{
  "status": 1,
  "code": 200,
  "title": "Başarılı!",
  "message": "Banka transferi başlatıldı!",
  "type": "success",
  "data": {
    "iban": "TR330006100519786457841326",
    "account_holder": "ParaX Ödeme Hizmetleri A.Ş.",
    "reference_code": "REF-1234567890",
    "transaction_id": "TD10001",
    "amount": 250.00,
    "currency": "TRY"
  }
}
Response Data Açıklaması
  • iban - Para transferi yapılacak IBAN numarası
  • account_holder - Hesap sahibi adı
  • reference_code - Referans kodu (havale açıklamasına yazılmalı)
  • transaction_id - ParaX işlem ID'si
  • amount - Transfer edilecek tutar
  • currency - Para birimi

Webhook Bildirimi

Ödeme işlemi onaylandığında ParaX sistemi, merchant tarafından belirtilen return_url adresine otomatik olarak POST isteği gönderir. Bu webhook ile işlem sonucunu anlık olarak öğrenebilirsiniz.

Webhook Akışı
  1. Müşteri banka havalesi yapar
  2. ParaX ödemeyi doğrular
  3. ParaX, merchant'ın return_url adresine POST isteği gönderir
  4. Merchant webhook'u alır ve işlemi tamamlar

Webhook Endpoint

POST https://yourdomain.com/webhook/parax
Merchant tarafından sağlanacak webhook endpoint (return_url parametresinde belirtilen adres)

Gönderilen Parametreler

Parametre Tip Açıklama
trx string Merchant sistemindeki işlem ID'si
transaction_id string ParaX işlem ID'si
amount number İşlem tutarı
status string İşlem durumu (success, failed, pending)
currency string Para birimi (TRY)

Webhook İstek Örneği

POST Request Body
{
  "trx": "DEP-1738588800000",
  "transaction_id": "TD10001",
  "amount": 250.00,
  "status": "success",
  "currency": "TRY"
}

Webhook Status Değerleri

Status Açıklama
success Ödeme başarıyla tamamlandı - Müşteri hesabına bakiye eklenebilir
failed Ödeme başarısız oldu - İşlem reddedildi
pending Ödeme beklemede - Doğrulama süreci devam ediyor

Webhook Handler Örneği

Node.js Webhook Handler
// Webhook endpoint'i
app.post('/webhook/parax', express.json(), (req, res) => {
  const { trx, transaction_id, amount, status, currency } = req.body;

  // IP whitelist kontrolü (opsiyonel ama önerilir)
  const allowedIP = '176.31.10.152';
  if (req.ip !== allowedIP) {
    return res.status(403).json({ error: 'Forbidden' });
  }

  if (status === 'success') {
    // Ödeme başarılı - bakiye ekle
    console.log(`İşlem başarılı: TRX=${trx}, Tutar=${amount} ${currency}`);
    
    // Veritabanı işlemleri...
    // await addBalanceToUser(trx, amount);
    
    return res.json({ 
      success: true, 
      message: 'Webhook alındı ve işlendi' 
    });
  } 
  
  if (status === 'failed') {
    // Ödeme başarısız
    console.log(`İşlem başarısız: TRX=${trx}`);
    
    return res.json({ 
      success: true, 
      message: 'Webhook alındı' 
    });
  }

  if (status === 'pending') {
    // Ödeme beklemede
    console.log(`İşlem beklemede: TRX=${trx}`);
    
    return res.json({ 
      success: true, 
      message: 'Webhook alındı' 
    });
  }
});
Önemli Notlar
  • Webhook endpoint'inizin herkese açık ve erişilebilir olması gerekmektedir
  • Güvenlik için 176.31.10.152 IP adresini whitelist'e eklemeniz önerilir
  • Webhook'a her zaman 200 OK yanıtı dönmelisiniz
  • Aynı webhook birden fazla gönderilebilir, idempotent olmalıdır (duplicate kontrolü yapın)

İşlem Sorgulama

Para yatırma işlemlerinin durumunu sorgulamak için kullanılır. İşlem ID'si ile işlemin mevcut durumunu kontrol edebilirsiniz.

Endpoint

POST https://api.parax.live/Transaction/Status/
İşlem durumunu sorgular ve detaylı bilgi döner.

İstek Parametreleri

Parametre Zorunluluk Tip Açıklama
sid Zorunlu integer Site ID
key Zorunlu string API Key
transaction_id Zorunlu string ParaX işlem ID'si (deposit işlemi sonrası dönen ID)

İstek Örneği

JSON Request Body
{
  "sid": 1001,
  "key": "Fp2407kzXgHUrZB9LAuwD3S3N8c19EMabih254Ge1863YyxP5269",
  "transaction_id": "TD10001"
}

Başarılı Yanıt

JSON Response (Success)
{
  "code": 200,
  "status": "success",
  "data": {
    "transaction_id": "TD10001",
    "amount": "1000.00",
    "currency": "TRY",
    "method": "BankTransfer",
    "status": "completed",
    "created_at": "2026-02-03 14:30:00",
    "completed_at": "2026-02-03 14:35:00",
    "user_id": "44843155",
    "username": "ahmetyilmaz"
  }
}

İşlem Durumları

Durum Açıklama
pending İşlem beklemede - Müşteri henüz ödeme yapmadı
processing İşlem inceleniyor - Ödeme alındı, doğrulanıyor
completed İşlem tamamlandı - Ödeme başarıyla alındı
failed İşlem başarısız - Ödeme alınamadı
cancelled İşlem iptal edildi
expired İşlem süresi doldu - Müşteri zamanında ödeme yapmadı
Önemli Not
İşlem sorgulama API'si, sadece completed durumundaki işlemler için callback gönderilmemişse kullanılmalıdır. Normal akışta callback sistemini kullanmanız önerilir.

Kullanım Örneği

JavaScript Örneği
const checkTransactionStatus = async (transactionId) => {
  const response = await fetch('https://api.parax.live/Transaction/Status/', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    },
    body: JSON.stringify({
      sid: process.env.PARAX_SID,
      key: process.env.PARAX_KEY,
      transaction_id: transactionId
    })
  });

  const result = await response.json();
  
  if (result.code === 200) {
    console.log('İşlem Durumu:', result.data.status);
    return result.data;
  } else {
    console.error('Hata:', result.message);
    return null;
  }
};

// Kullanım
checkTransactionStatus('TD10001');

Hata Kodları ve Yanıtlar

API Hata Kodları

Kod Mesaj Açıklama
200 Çekim talebi oluşturuldu! İşlem başarılı
1081 Tüm alanlar zorunludur! Gerekli tüm alanların doldurulması gerekiyor
1082 API kimlik bilgileri hatalı! Geçersiz sid veya key bilgisi
1083 Bu merchant işlemi kapatılmıştır! Merchant hesabı askıya alınmış
1084 Merchant bu metodu kullanamaz! Bu ödeme metodu için yetkiniz yok
1085 Bu müşteri işlem yapmaktan engellendi! Müşteri hesabı bloke edilmiş
1086 Aynı işlem tekrar gönderilemez! Duplicate transaction - işlem daha önce gönderilmiş
1087 Geçersiz Banka ID! Belirtilen banka ID geçersiz
Hata Yönetimi
Eğer kod 200 değilse, API isteği başarısız olmuştur ve message bilgisi kullanıcıya gösterilmelidir.