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!) |
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
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 |
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ı:
- Parametreleri alfabetik olarak sırala
- key=value formatında birleştir (& ile ayırarak)
- HMAC SHA256 ile imzala (secret key kullanarak)
- Signature'ı parametrelere ekle
- Güvenli URL'i oluştur
Node.js Örneği
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:
{
"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"
}
}
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'siamount- Transfer edilecek tutarcurrency- 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.
- Müşteri banka havalesi yapar
- ParaX ödemeyi doğrular
- ParaX, merchant'ın
return_urladresine POST isteği gönderir - Merchant webhook'u alır ve işlemi tamamlar
Webhook Endpoint
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
{
"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
// 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ı'
});
}
});
- Webhook endpoint'inizin herkese açık ve erişilebilir olması gerekmektedir
- Güvenlik için
176.31.10.152IP adresini whitelist'e eklemeniz önerilir - Webhook'a her zaman
200 OKyanı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
İ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
{
"sid": 1001,
"key": "Fp2407kzXgHUrZB9LAuwD3S3N8c19EMabih254Ge1863YyxP5269",
"transaction_id": "TD10001"
}
Başarılı Yanıt
{
"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ı |
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
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 |
message
bilgisi kullanıcıya gösterilmelidir.