Genel Bakış

OdemeNet Direkt Ödeme API, 3D Secure doğrulama gerektirmeyen hızlı ödeme işlemleri gerçekleştirmenizi sağlar. Bu API, POS entegrasyonu üzerinden direkt ödeme alma imkanı sunar.

Önemli Güvenlik Notu: Direkt ödeme işlemleri 3D Secure doğrulama gerektirmediği için daha yüksek risk taşır. Kart bilgileri şifrelenmiş olarak saklanır ve tüm API çağrıları JWT token ile yetkilendirilmelidir.
Yetkilendirme: Tüm API çağrıları için Authorization header'ında Bearer token kullanılmalıdır.
Özellikler:
  • Hızlı İşlem: 3D Secure yönlendirmesi olmadan direkt ödeme
  • Otomatik Banka Seçimi: BIN numarasına göre en uygun banka otomatik seçilir
  • Kart Saklama: Kart bilgileri güvenli şekilde şifrelenmiş olarak saklanır
  • Müşteri Yönetimi: Müşteri, fatura ve teslimat adresi bilgileri kaydedilir
  • Ürün Takibi: Ödemeye ait ürün bilgileri detaylı olarak kaydedilir
Direkt Ödeme API
Endpoint Bilgileri
Method POST
URL /api/Payment/pay
Authorization Bearer {token}
Content-Type application/json
Zorunlu Request Parametreleri
Parametre Tip Açıklama
Amount decimal Ödeme tutarı (0'dan büyük olmalı)
CardNo string Kart numarası (en az 6 haneli)
CardHolderName string Kart sahibinin adı soyadı
ExpireMonth string Son kullanma ayı (MM formatında)
ExpireYear string Son kullanma yılı (YY formatında)
Cvv string Kart güvenlik kodu (CVV/CVC)
OrderNumber string Sipariş numarası (benzersiz olmalı)
Opsiyonel Request Parametreleri
Parametre Tip Varsayılan Açıklama
Currency string "TRY" Para birimi kodu
CurrencyId int? 1 Para birimi ID
Installment int 1 Taksit sayısı
ClientIp string null Müşteri IP adresi
Phone string null Müşteri telefon numarası
SuccessUrl string null Başarılı ödeme sonrası yönlendirilecek URL
FailUrl string null Başarısız ödeme sonrası yönlendirilecek URL
CardAlias string auto Kart için özel takma ad
Customer object null Müşteri bilgileri objesi
Customer Objesi Parametreleri (Opsiyonel)
Parametre Tip Zorunlu Açıklama
FullName string Hayır Müşteri tam adı
Email string Hayır Müşteri e-posta adresi
Phone string Hayır Müşteri telefon numarası
Country string Hayır Müşteri ülkesi
City string Hayır Müşteri şehri
Address string Hayır Müşteri adresi
IdentityNumber string Hayır TC Kimlik Numarası
TaxNumber string Hayır Vergi Numarası
BillingAddress Objesi Parametreleri (Opsiyonel)
Parametre Tip Zorunlu Açıklama
Name string Hayır Fatura adresi adı
City string Hayır Fatura adresi şehir
Country string Hayır Fatura adresi ülke
Address string Hayır Fatura adresi detay
ZipCode string Hayır Fatura adresi posta kodu
ShippingAddress Objesi Parametreleri (Opsiyonel)
Parametre Tip Zorunlu Açıklama
Name string Hayır Teslimat adresi adı
City string Hayır Teslimat adresi şehir
Country string Hayır Teslimat adresi ülke
Address string Hayır Teslimat adresi detay
ZipCode string Hayır Teslimat adresi posta kodu
Products Array Parametreleri (Opsiyonel)
Parametre Tip Zorunlu Açıklama
Id string Hayır Ürün ID
Name string Hayır Ürün adı
Category string Hayır Ürün kategorisi
Description string Hayır Ürün açıklaması
Amount decimal Evet* Ürün tutarı (*Products gönderiliyorsa zorunlu)
Not: Products array gönderiliyorsa, tüm ürünlerin toplam tutarı (ProductAmount) ile request'teki Amount değeri eşleşmelidir. Aksi takdirde "AMOUNT_MISMATCH" hatası alınır.
Request Örneği (Tam)
JSON
{
  "Amount": 100.50,
  "Currency": "TRY",
  "Installment": 1,
  "CardNo": "4508034508034509",
  "CardHolderName": "John Doe",
  "ExpireMonth": "12",
  "ExpireYear": "25",
  "Cvv": "123",
  "OrderNumber": "ORD-2024-001",
  "ClientIp": "192.168.1.1",
  "Phone": "+905551234567",
  "Customer": {
    "FullName": "John Doe",
    "Email": "john@example.com",
    "Phone": "+905551234567",
    "Country": "Türkiye",
    "City": "İstanbul",
    "Address": "Test Adresi Sokak No: 123",
    "IdentityNumber": "12345678901",
    "TaxNumber": "1234567890"
  },
  "BillingAddress": {
    "Name": "John Doe",
    "City": "İstanbul",
    "Country": "Türkiye",
    "Address": "Fatura Adresi Sokak No: 123",
    "ZipCode": "34000"
  },
  "ShippingAddress": {
    "Name": "John Doe",
    "City": "İstanbul",
    "Country": "Türkiye",
    "Address": "Teslimat Adresi Sokak No: 123",
    "ZipCode": "34000"
  },
  "Products": [
    {
      "Id": "PROD-001",
      "Name": "Test Ürün",
      "Category": "Elektronik",
      "Description": "Test ürün açıklaması",
      "Amount": 100.50
    }
  ]
}
Request Örneği (Minimum)
JSON
{
  "Amount": 100.50,
  "CardNo": "4508034508034509",
  "CardHolderName": "John Doe",
  "ExpireMonth": "12",
  "ExpireYear": "25",
  "Cvv": "123",
  "OrderNumber": "ORD-2024-001"
}
Başarılı Response
JSON
{
  "Success": true,
  "Message": "Direkt ödeme işlemi başarılı",
  "PaymentResult": "BANKA_RESPONSE_DATA",
  "TransactionId": "123e4567-e89b-12d3-a456-426614174000",
  "PaymentReferenceNumber": "ON-123456789",
  "BankName": "Garanti BBVA",
  "CardAlias": "****4509",
  "Customer": {
    "Id": "123e4567-e89b-12d3-a456-426614174001",
    "FullName": "John Doe",
    "Email": "john@example.com"
  }
}
Hata Response
JSON
{
  "Success": false,
  "Message": "Direkt ödeme işlemi sırasında hata oluştu",
  "Error": "Yetersiz bakiye"
}
Hata Kodları ve Mesajları
HTTP Kodu Mesaj Açıklama
400 Geçersiz ödeme verisi Request parametreleri eksik veya hatalı
400 Geçersiz kart numarası Kart numarası 6 haneden kısa
400 Company bulunamadı veya pasif durumda Firma kaydı bulunamadı veya aktif değil
400 Company için aktif banka bulunamadı Firmaya ait aktif banka tanımı yok
401 CompanyId claim bulunamadı JWT token geçersiz veya eksik
500 Direkt ödeme işlemi sırasında hata oluştu Banka servisi çağrısında veya kayıt sırasında hata
İşlem Akışı
  1. JWT Token Doğrulama: Authorization header'ındaki Bearer token doğrulanır
  2. Firma Kontrolü: Token'dan alınan CompanyId ile firma kaydı kontrol edilir
  3. BIN Kontrolü: Kart numarasının ilk 6 hanesi (BIN) ile banka belirlenir
  4. Banka Seçimi: BIN'e göre veya default olarak en uygun banka seçilir
  5. Müşteri Kaydı: Customer bilgileri varsa kaydedilir
  6. Kart Şifreleme: Kart bilgileri AES-256 ile şifrelenir ve saklanır
  7. Ödeme Kaydı: Payment kaydı oluşturulur (Durum: Beklemede)
  8. Banka Çağrısı: Seçilen bankaya uygun servis ile direkt ödeme talebi gönderilir
  9. Sonuç: Banka yanıtı ile birlikte ödeme sonucu döndürülür
Kod Örnekleri
C# HttpClient
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", token);

var paymentData = new
{
    Amount = 100.50m,
    Currency = "TRY",
    Installment = 1,
    CardNo = "4508034508034509",
    CardHolderName = "John Doe",
    ExpireMonth = "12",
    ExpireYear = "25",
    Cvv = "123",
    OrderNumber = "ORD-2024-001",
    ClientIp = "192.168.1.1",
    Phone = "+905551234567",
    Customer = new
    {
        FullName = "John Doe",
        Email = "john@example.com",
        Phone = "+905551234567",
        Country = "Türkiye",
        City = "İstanbul",
        Address = "Test Adresi Sokak No: 123",
        IdentityNumber = "12345678901",
        TaxNumber = "1234567890"
    }
};

var json = JsonSerializer.Serialize(paymentData);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(
    "https://api.odemenet.com/api/Payment/pay", content);
var result = await response.Content.ReadAsStringAsync();
JavaScript Fetch
const paymentData = {
    Amount: 100.50,
    Currency: 'TRY',
    Installment: 1,
    CardNo: '4508034508034509',
    CardHolderName: 'John Doe',
    ExpireMonth: '12',
    ExpireYear: '25',
    Cvv: '123',
    OrderNumber: 'ORD-2024-001',
    ClientIp: '192.168.1.1',
    Phone: '+905551234567',
    Customer: {
        FullName: 'John Doe',
        Email: 'john@example.com',
        Phone: '+905551234567',
        Country: 'Türkiye',
        City: 'İstanbul',
        Address: 'Test Adresi Sokak No: 123',
        IdentityNumber: '12345678901',
        TaxNumber: '1234567890'
    }
};

fetch('https://api.odemenet.com/api/Payment/pay', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify(paymentData)
})
.then(response => response.json())
.then(data => {
    if (data.Success) {
        console.log('Ödeme başarılı:', data);
    } else {
        console.error('Ödeme hatası:', data.Message);
    }
})
.catch(error => console.error('Network hatası:', error));
Python Requests
import requests
import json

url = 'https://api.odemenet.com/api/Payment/pay'
headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {token}'
}

payment_data = {
    'Amount': 100.50,
    'Currency': 'TRY',
    'Installment': 1,
    'CardNo': '4508034508034509',
    'CardHolderName': 'John Doe',
    'ExpireMonth': '12',
    'ExpireYear': '25',
    'Cvv': '123',
    'OrderNumber': 'ORD-2024-001',
    'ClientIp': '192.168.1.1',
    'Phone': '+905551234567',
    'Customer': {
        'FullName': 'John Doe',
        'Email': 'john@example.com',
        'Phone': '+905551234567',
        'Country': 'Türkiye',
        'City': 'İstanbul',
        'Address': 'Test Adresi Sokak No: 123',
        'IdentityNumber': '12345678901',
        'TaxNumber': '1234567890'
    }
}

response = requests.post(url, headers=headers, json=payment_data)
result = response.json()

if result['Success']:
    print('Ödeme başarılı:', result)
else:
    print('Ödeme hatası:', result['Message'])
cURL
curl -X POST "https://api.odemenet.com/api/Payment/pay" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "Amount": 100.50,
    "Currency": "TRY",
    "Installment": 1,
    "CardNo": "4508034508034509",
    "CardHolderName": "John Doe",
    "ExpireMonth": "12",
    "ExpireYear": "25",
    "Cvv": "123",
    "OrderNumber": "ORD-2024-001",
    "ClientIp": "192.168.1.1",
    "Phone": "+905551234567",
    "Customer": {
      "FullName": "John Doe",
      "Email": "john@example.com",
      "Phone": "+905551234567",
      "Country": "Türkiye",
      "City": "İstanbul",
      "Address": "Test Adresi Sokak No: 123",
      "IdentityNumber": "12345678901",
      "TaxNumber": "1234567890"
    }
  }'
Güvenlik Önlemleri
  • Kart Bilgileri Şifreleme: Tüm kart bilgileri AES-256 algoritması ile şifrelenir
  • JWT Token: Her API çağrısı için geçerli JWT token zorunludur
  • HTTPS: Tüm API çağrıları HTTPS üzerinden yapılmalıdır
  • IP Kısıtlaması: Firmanıza özel IP kısıtlamaları uygulanabilir
  • Rate Limiting: API çağrıları için hız sınırlaması mevcuttur
Desteklenen Bankalar
Banka Adı Entegrasyon Tipi Durum
Garanti BBVA Garanti Sanal POS Aktif
QNB Finansbank QNB Sanal POS Aktif
Yapı Kredi Yapı Kredi POS Aktif
İş Bankası NestPay Aktif
Akbank NestPay Aktif
Halkbank NestPay Aktif
Vakıfbank Vakıf VPOS Aktif
Kuveyt Türk Kuveyt Türk POS Aktif
Ziraat Bankası NestPay Aktif