Ödeme Linki API Dokümantasyonu
E-posta, SMS veya diğer kanallarla gönderilebilen ödeme linkleri oluşturma
Genel Bakış
OdemeNet Ödeme Linki API, müşterilerinize e-posta, SMS veya diğer kanallarla gönderilebilecek güvenli ödeme linkleri oluşturmanızı sağlar. Müşteriler linke tıklayarak kart bilgilerini girerek ödemeyi tamamlayabilir.
Önemli: Tüm API çağrıları için geçerli bir JWT token gereklidir. Authorization header'ında Bearer token kullanın.
Özellikler:
- Kolay Entegrasyon: Tek bir API çağrısı ile ödeme linki oluşturun
- Güvenli Token: Her link için benzersiz ve güvenli token üretilir
- Geçerlilik Süresi: Link için özel geçerlilik tarihi belirleyebilirsiniz
- Kullanım Sayısı: Linkin kaç kez kullanılabileceğini sınırlayabilirsiniz
- Ürün Desteği: Ödemeye ait ürün bilgilerini ekleyebilirsiniz
- Otomatik Yönlendirme: Başarılı/başarısız ödeme sonrası özel URL'lere yönlendirme
Ödeme Linki Oluşturma API
Endpoint Bilgileri
| Method | POST |
| URL | /api/Payment/link |
| Authorization | Bearer {token} |
| Content-Type | application/json |
Zorunlu Request Parametreleri
| Parametre | Tip | Açıklama |
|---|---|---|
Amount |
decimal | Ödeme tutarı (0'dan büyük olmalı) |
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ı |
Description |
string | null | Ödeme açıklaması |
SuccessUrl |
string | null | Başarılı ödeme sonrası yönlendirilecek URL |
FailUrl |
string | null | Başarısız ödeme sonrası yönlendirilecek URL |
ExpiryDate |
DateTime? | +7 gün | Link geçerlilik tarihi |
MaxUsageCount |
int? | 1 | Maksimum kullanım sayısı |
Products |
array | null | Ürün listesi |
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ı (*Ürün ekleniyorsa zorunlu) |
Not: Products array kullanılıyorsa, tüm ürün tutarlarının toplamı Amount parametresi ile eşleşmelidir.
Basit Request Örneği
JSON
{
"Amount": 250.00,
"Currency": "TRY",
"Installment": 1,
"OrderNumber": "ORD-2024-12345",
"Description": "Premium Üyelik Ödemesi",
"SuccessUrl": "https://example.com/payment/success",
"FailUrl": "https://example.com/payment/fail",
"ExpiryDate": "2024-12-31T23:59:59",
"MaxUsageCount": 1
}
Ürün Detaylı Request Örneği
JSON
{
"Amount": 350.00,
"Currency": "TRY",
"Installment": 3,
"OrderNumber": "ORD-2024-12346",
"Description": "Online Alışveriş",
"SuccessUrl": "https://example.com/payment/success",
"FailUrl": "https://example.com/payment/fail",
"ExpiryDate": "2024-12-25T23:59:59",
"MaxUsageCount": 1,
"Products": [
{
"Id": "PROD-001",
"Name": "Kablosuz Kulaklık",
"Category": "Elektronik",
"Description": "Bluetooth 5.0 Kulaklık",
"Amount": 200.00
},
{
"Id": "PROD-002",
"Name": "Telefon Kılıfı",
"Category": "Aksesuar",
"Description": "Silikon Kılıf",
"Amount": 150.00
}
]
}
Başarılı Response
JSON
{
"Success": true,
"Message": "Payment link created successfully",
"Data": {
"PaymentLinkUrl": "https://api.odemenet.com/payment/HST-152-SGhnbC1UdWltUGNCNVRw...",
"Token": "HST-152-SGhnbC1UdWltUGNCNVRw...",
"ExpireDate": "2024-12-31T23:59:59",
"MaxUsageCount": 1,
"TransactionId": "123e4567-e89b-12d3-a456-426614174000",
"PaymentReferenceNumber": "ON-847562391",
"OrderNumber": "ORD-2024-12345",
"Amount": 250.00,
"Currency": "TRY",
"Installment": 1,
"Description": "Premium Üyelik Ödemesi",
"BankName": "Garanti BBVA",
"ProductCount": 0
},
"Timestamp": "2024-01-20T10:30:00Z"
}
Response Alanları Açıklaması
| Alan | Tip | Açıklama |
|---|---|---|
Success |
boolean | İşlem başarı durumu |
Message |
string | İşlem mesajı |
PaymentLinkUrl |
string | Müşteriye gönderilecek ödeme linki |
Token |
string | Ödeme için benzersiz güvenlik token'ı |
ExpireDate |
string | Link son kullanma tarihi |
MaxUsageCount |
int | Maksimum kullanım sayısı |
TransactionId |
guid | İşlem ID (takip için) |
PaymentReferenceNumber |
string | Ödeme referans numarası |
BankName |
string | Kullanılacak banka adı |
ProductCount |
int | Eklenen ürün sayısı |
Hata Response
JSON
{
"Success": false,
"Message": "Amount must be greater than zero",
"ErrorCode": "INVALID_AMOUNT"
}
Hata Kodları ve Mesajları
| Hata Kodu | Mesaj | Açıklama | Çözüm |
|---|---|---|---|
INVALID_REQUEST |
Invalid payment link request | Request body boş veya geçersiz | Request formatını kontrol edin |
AUTH_ERROR |
CompanyId claim not found | JWT token geçersiz veya eksik | Geçerli bir Bearer token kullanın |
INVALID_AMOUNT |
Amount must be greater than zero | Ödeme tutarı 0 veya negatif | Amount değerini 0'dan büyük girin |
AMOUNT_MISMATCH |
Sent amount does not match products total | Ürün tutarları toplamı Amount ile eşleşmiyor | Ürün tutarlarını veya Amount'u düzeltin |
COMPANY_INACTIVE |
Company not found or inactive | Firma bulunamadı veya pasif | Firma durumunu kontrol edin |
NO_ACTIVE_BANK |
No active bank found for company | Firma için aktif banka yok | Firma banka ayarlarını yapılandırın |
BANK_NOT_FOUND |
Selected bank not found | Seçilen banka bulunamadı | Banka tanımlarını kontrol edin |
LINK_GENERATION_ERROR |
Error creating payment link | Link oluşturma sırasında hata | Detaylar için Error alanına bakın |
INTERNAL_ERROR |
Error creating payment link | Sunucu hatası | Tekrar deneyin veya destek alın |
Kod Örnekleri
C# HttpClient
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var paymentLinkData = new
{
Amount = 250.00m,
Currency = "TRY",
Installment = 1,
OrderNumber = "ORD-2024-12345",
Description = "Premium Üyelik Ödemesi",
SuccessUrl = "https://example.com/payment/success",
FailUrl = "https://example.com/payment/fail",
ExpiryDate = DateTime.Now.AddDays(7),
MaxUsageCount = 1
};
var json = JsonSerializer.Serialize(paymentLinkData);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://api.odemenet.com/api/Payment/link", content);
var result = await response.Content.ReadAsStringAsync();
var paymentLinkResponse = JsonSerializer.Deserialize(result);
// Linki müşteriye gönderin
Console.WriteLine($"Payment Link: {paymentLinkResponse.Data.PaymentLinkUrl}");
JavaScript Fetch
const paymentLinkData = {
Amount: 250.00,
Currency: 'TRY',
Installment: 1,
OrderNumber: 'ORD-2024-12345',
Description: 'Premium Üyelik Ödemesi',
SuccessUrl: 'https://example.com/payment/success',
FailUrl: 'https://example.com/payment/fail',
ExpiryDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),
MaxUsageCount: 1
};
fetch('https://api.odemenet.com/api/Payment/link', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(paymentLinkData)
})
.then(response => response.json())
.then(data => {
if (data.Success) {
console.log('Payment Link:', data.Data.PaymentLinkUrl);
// Linki müşteriye e-posta, SMS vb. ile gönderin
} else {
console.error('Error:', data.Message);
}
});
Python Requests
import requests
from datetime import datetime, timedelta
payment_link_data = {
"Amount": 250.00,
"Currency": "TRY",
"Installment": 1,
"OrderNumber": "ORD-2024-12345",
"Description": "Premium Üyelik Ödemesi",
"SuccessUrl": "https://example.com/payment/success",
"FailUrl": "https://example.com/payment/fail",
"ExpiryDate": (datetime.now() + timedelta(days=7)).isoformat(),
"MaxUsageCount": 1
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}
response = requests.post(
"https://api.odemenet.com/api/Payment/link",
json=payment_link_data,
headers=headers
)
data = response.json()
if data["Success"]:
print(f"Payment Link: {data['Data']['PaymentLinkUrl']}")
# Linki müşteriye gönderin
else:
print(f"Error: {data['Message']}")
cURL
curl -X POST "https://api.odemenet.com/api/Payment/link" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"Amount": 250.00,
"Currency": "TRY",
"Installment": 1,
"OrderNumber": "ORD-2024-12345",
"Description": "Premium Üyelik Ödemesi",
"SuccessUrl": "https://example.com/payment/success",
"FailUrl": "https://example.com/payment/fail",
"ExpiryDate": "2024-12-31T23:59:59",
"MaxUsageCount": 1
}'
Kullanım Senaryoları
- Fatura Ödemeleri: Müşterilere aylık fatura ödemeleri için link gönderin
- E-Ticaret: Sepet terk eden müşterilere ödeme linki gönderin
- Abonelik: Yenileme zamanı gelen üyeliklere hatırlatma ile link gönderin
- Rezervasyon: Otel, restoran gibi rezervasyon ödemeleri için kullanın
- Bağış: Bağış kampanyalarında kolayca link paylaşın
Güvenlik Notları
- Her ödeme linki için benzersiz ve güvenli token oluşturulur
- Linkler belirtilen geçerlilik süresinden sonra otomatik olarak devre dışı kalır
- MaxUsageCount parametresi ile link kullanım sayısını sınırlayabilirsiniz
- Tüm ödeme işlemleri SSL/TLS ile şifrelenir
- Bearer token mutlaka güvenli bir şekilde saklanmalıdır
- Ödeme linkleri yalnızca güvenilir kanallarda paylaşılmalıdır